Страница: 1 |
Страница: 1 |
Вопрос: Управление звуковым генератором
Добавлено: 12.05.09 10:36
Автор вопроса:
Виталий Игоревич | Web-сайт:
имеется API функция:
Option Explicit
'Функция генерирует звуковой сигнал
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
'dwFred - частота звука
'dwDuration - продолжительность сигнала в миллисекундах
Private Sub cmdGen_Click()
'Генерируем звук
Beep 220, 5000
End Sub
Увы, несовершенная вещь! Ибо:
1. дает прерывание внутри программы пока не завершился звук.
2. сигнал идет через внутренний динамик
1-ое мне удалось устранить через Паскаль:
‘компилированная внешняя программа в Pascal
var
s:string;
i,j:integer;
f:text;
BEGIN
assign(f,'f:\s');
repeat
reset(f);
READ(F,J);
IF J <= 0 THEN NOSOUND ELSE SOUND(J);
Until j=-1;
close(f);
nosound;
END.
'загрузка внешней программы
Private Sub Form_Load()
Open "f:\s" For Output As 1
Print #1, "0"
Close #1
Shell "f:\sound.exe ", 0
end sub
'выгрузка внешней программы
Private Sub Form_Unload(Cancel As Integer)
Open "f:\s" For Output As 1
Print #1, "-1"
Close #1
End Sub
'включить ноту
Private Sub Command1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Open "f:\s" For Output As 1
Print #1, "220"
Close #1
end sub
'отключить ноту
Private Sub Command1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Open "f:\s" For Output As 1
Print #1, "0"
Close #1
end sub
Вопрос следующий:
a) Если API функция, которая только включает генератор внутреннего динамика
b) Если API функция(или как сделать соответвующее иным способом) которая дает сигнал генератора на колонки. Ведь стандартный Beep VB дает сигнал именно в колонки!
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа: MegaÐefender
Вопросов: 19
Ответов: 313
Web-сайт:
Профиль | | #1
Добавлено: 12.05.09 12:51
VB-шный beep зашит в msvbvm60.dll(независим от api-fnc) и он не имеет параметров.
Номер ответа: 2
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 12.05.09 17:16
Формируешь синусоидный сигнал в памяти и выводишь его waveOutOpen/waveOutClose, waveOutPrepareHeader/waveOutUnprepareHeader, waveOutWrite
Номер ответа: 3
Автор ответа: $@ny@PG
ICQ: 468469477
Вопросов: 71
Ответов: 196
Профиль | | #3
Добавлено: 12.05.09 20:17
Прикольная функция!!!
Номер ответа: 4
Автор ответа: _Serega
Вопросов: 1
Ответов: 43
Профиль | | #4
Добавлено: 13.05.09 00:48
Прямая работа с аудиоплатой через DirectX, что достаточно наворочено и уже другой вопрос хватит ли квалификации для реализации, то есть оно его как бы знать надо много всего другого, что есть отдельная и большая тема, а вот API вызов для проигрывания аудиофайлов имеет примерно такой вид:
'This project needs :
'- a common dialog box, named CDbox
' (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
' and select Microsoft Common Dialog control)
'-a button
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Private Sub Command1_Click()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'Get the number of installed waveout devices
ret& = waveOutGetNumDevs
If ret& > 0 Then
'Set the CommonDialogBox' filter
CDBox.Filter = "Wave-files (*.wav)|*.wav|All Files (*.*)|*.*"
'Set the CommonDialogBox' title
CDBox.DialogTitle = "Choose your wave-file ..."
'Show the 'Open File'-dialog
CDBox.ShowOpen
'Play the selected sound
sndPlaySound CDBox.filename, SND_ASYNC Or SND_NODEFAULT
Else
MsgBox "No soundcard detected !"
End If
End Sub
Private Sub Form_Load()
Command1.Caption = "Load WAV"
End Sub
Номер ответа: 5
Автор ответа: Виталий Игоревич
Вопросов: 3
Ответов: 5
Web-сайт:
Профиль | | #5
Добавлено: 14.05.09 13:38
Спасибо за ответ! Но хочется какого либо примера:
пример формирования сигнал, включения сигнала, выключения сигнала
Номер ответа: 6
Автор ответа: Виталий Игоревич
Вопросов: 3
Ответов: 5
Web-сайт:
Профиль | | #6
Добавлено: 14.05.09 13:42
'- a common dialog box, named CDbox
' (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
' and select Microsoft Common Dialog control)
'-a button
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Private Sub Command1_Click()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'Get the number of installed waveout devices
ret& = waveOutGetNumDevs
If ret& > 0 Then
'Set the CommonDialogBox' filter
CDBox.Filter = "Wave-files (*.wav)|*.wav|All Files (*.*)|*.*"
'Set the CommonDialogBox' title
CDBox.DialogTitle = "Choose your wave-file ..."
'Show the 'Open File'-dialog
CDBox.ShowOpen
'Play the selected sound
sndPlaySound CDBox.filename, SND_ASYNC Or SND_NODEFAULT
Else
MsgBox "No soundcard detected !"
End If
End Sub
Private Sub Form_Load()
Command1.Caption = "Load WAV"
End Sub
Спасибо за ответ!
А сам файл WAV как создать, какой формат его?
Номер ответа: 7
Автор ответа: mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #7
Добавлено: 14.05.09 14:12
WAV файл, формат PCM, создать саундрекордером или программкой какой-то специализированной, конвертировать из любого другого аудиоформата.. Кажется тебе не это надо. Sharp, по-моему вещь говорит про waveOutOpen/waveOutClose, waveOutPrepareHeader/waveOutUnprepareHeader, waveOutWrite, кури MSDN, может примеры через google накопаешь.
Номер ответа: 8
Автор ответа: Виталий Игоревич
Вопросов: 3
Ответов: 5
Web-сайт:
Профиль | | #8
Добавлено: 15.05.09 14:40
Номер ответа: 9
Автор ответа: _Serega
Вопросов: 1
Ответов: 43
Профиль | | #9
Добавлено: 16.05.09 03:00
На CODEPROJECT.COM видел материал по теме, там кстатьи и подвязка через DirectX была на аудиокарточку счас немножко загружен делами, но если не разберешься отпиши, постараюсь при возможности помочь.