Воспроизведение звука

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ramauf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 03.08.2003 (Вс) 21:10
Откуда: Кумертау

Воспроизведение звука

Сообщение Ramauf » 05.10.2003 (Вс) 9:54

Как можно воспроизвести звук нужной частоты через динамик (не системный)? А через API функции?!!

goro
Постоялец
Постоялец
 
Сообщения: 494
Зарегистрирован: 03.12.2002 (Вт) 11:45
Откуда: Украина, Запорожье

Re: Воспроизведение звука

Сообщение goro » 05.10.2003 (Вс) 11:15

Ramauf писал(а):Как можно воспроизвести звук нужной частоты через динамик (не системный)? А через API функции?!!

По моему на ВБ это сделать нереально, разве что воспроизводить уже существующий wav файл.
ПРЕВЕД

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Воспроизведение звука

Сообщение Vovik » 05.10.2003 (Вс) 11:59

Ramauf писал(а):Как можно воспроизвести звук нужной частоты через динамик (не системный)? А через API функции?!!

Через API - нельзя... А вот через DirectX стоило попробовать! :lol:

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 07.10.2003 (Вт) 1:19

Как воспроизвести звук и видео
'Вариант 1

Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Private Sub Form_Click()
Dim res
res = mciExecute("Play C:\Путь_до_файла")
End Sub
'Вообще, для того, что бы воспроизвести аудио или видео файл, можно воспользоваться элементом управления Microsoft Multimedia Control, но при этом вместе с вашим приложением придется таскать файл MCI32.OCX, а это лишних 193 кб, приведенный же выше код гораздо меньше. Прим. все вышесказанное касается только тех случаев, когда вам необходимо просто проиграть какой-то звуковой файл из программы.

'Вариант 2

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Form_Load()
Dim x As Long
x = PlaySound("C:\Путь_до_файла", 0, &H1 Or &H10)
End Sub

'Вариант 3

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Private Sub Form_Load()
Dim x As Long
x = sndPlaySound("C:\Путь_до_файла", &H1 Or &H10)
End Sub

Первый параметр, lpszSound, представляет собой имя WAV-файла, который вы хотите проиграть.

Второй параметр, fuSound, содержит одну из следующих констант, которые передают Windows простые команды.

SND_SYNC 0x0000 Играть синхронно (по умолчанию)
SND_ASYNC 0x0001 Играть несинхронно
SND_NODEFAULT 0x0002 Не использовать звук, предпологающийся по умолчанию
SND_MEMORY 0x0004 Первый параметр - файл памяти
SND_LOOP 0x0008 Проигрывать звук в цикле до следующего обращения к sndPlaySound
SND_NOSTOP 0x0010 Не прекращать проигрывать текущий звук
Возвращаемое значение

Возвращает TRUE, при успешном выполнении, в обратном случае FALSE
Параметры функции: lpszSoundName Имя файла. Если этот параметр NULL,
то проигрывание файла останавливается. fuOptions Специальные опции
для проигрывания музыки. Они могут быть следующими:
Значение Описание SND_SYNC Музыка играется синхронно, и функция не
возвращает указатель пока не будет конца файла. SND_ASYNC Музыка
играется асинхронно, и функция возвращает указатель сразу после
начала проигрывания файла. Чтобы остановить проигрывание,
надо вызвать функцию SndPlaySound с параметром lpszSoundName
установленным в NULL. SND_NODEFAULT Если файл не найден,
то функция возвращает указатель сразу и не проигрывает
стандартный звуковой эффект Windows. SND_MEMORY
Этот параметр нужен для проигрывания Wave-файла в виде ресурса
(из памяти). SND_LOOP Этот параметр нужен для проигрывания
Wave-файла в циклическом режиме. Также при этом вы должны
использовать влаг SND_ASYNC. Чтобы остановить проигрывание,
надо вызвать функцию SndPlaySound с параметром lpszSoundName
установленным в NULL. SND_NOSTOP Если музыка уже проигрывается,
то функция возврвщает FALSE. Возвращаемое значение:
Если музыка проигрывается правильно, то функция возврвщает TRUE,
иначе FALSE.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.10.2003 (Вт) 1:46

2Z-zzz Вопрос-то не о том, как проигрывать файлы :wink:

P.S. Возможно, ключ к решению в том, чтобы "на лету" записывать wav-файлы с нужной частотой и длительностью звука и потом их же проигрывать?
P.P.S. Я пошёл искать форматы wav-файлов...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.10.2003 (Вт) 15:57

Зачем вообще нужен файл? В DirectSound создать буфер, заполнить его вручную данными и воспроизвести. Причем, если нужны звуки разных частот, DirectSound позволит воспроизвести буфер с разными частотами не меняя данных.

Ramauf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 03.08.2003 (Вс) 21:10
Откуда: Кумертау

Сообщение Ramauf » 12.10.2003 (Вс) 21:04

А можешь предоставить технологию воспроизведения через DirectSound???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.10.2003 (Пн) 10:11

Можно и через API, установив флаг SND_MEMORY и создав в памяти виртуальный WAV-файл (например в байтовом массиве). Но DirectX конечно дает больше возможностей.
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.10.2003 (Пн) 16:45

А можешь предоставить технологию воспроизведения через DirectSound???


http://www.tuapse-mikle.narod.ru/snd.zip

Ramauf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 03.08.2003 (Вс) 21:10
Откуда: Кумертау

Сообщение Ramauf » 16.10.2003 (Чт) 13:12

Спасиба, посмотрю.

mark+
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 156
Зарегистрирован: 03.07.2003 (Чт) 0:04
Откуда: Kurgan

Сообщение mark+ » 16.10.2003 (Чт) 21:53

Большое спсибо z-zzz. Я как раз пишу программу, где не используется ни одного дополнительного контрола будь то MMC или Dialog... а звук нужен! :P :P :P :P :P

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 16.10.2003 (Чт) 23:33

mark+ писал(а):Большое спсибо z-zzz. Я как раз пишу программу, где не используется ни одного дополнительного контрола будь то MMC или Dialog... а звук нужен! :P :P :P :P :P


Всегда пожалуйста!!!!!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.11.2003 (Чт) 18:40

To Z-zzz:

понравился вариант с MCIExecute, более короткого я еще не видел. Но как потом управлять воспроизведением. В MSDN нашел список команд MCIExecute, Stop, Open, Close, Pause там есть, но где хотя бы Volume? Может для установки громкости воспроизведения использовать не MCIExecute, а другую команду?

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 14.11.2003 (Пт) 12:31

MCISendString
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 2

    TopList