Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Управление звуковым генератором
     
    
Добавлено: 12.05.09 10:36
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 Виталий Игоревич | Web-сайт: www.tvitaly1.narod.ru
      
       
  
имеется 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 была на аудиокарточку счас немножко загружен делами, но если не разберешься отпиши, постараюсь при возможности помочь.