| 
	
		|  Autor | Tema: Reproduccion de Sonidos... clamando por ayuda...  (Leído 5,863 veces) |  
	| 
			| 
					
						| Delta24 
								
								 Desconectado 
								Mensajes: 4
								
								 
								Delta24
								
								
								
								
								
								   | 
 
Hola que tal usuarios de este foro. Veran, molestandoles preguntado sobre como podria desviar los comandos enviados al altavoz del gabinete hacia la tarjeta de sonido, mediante funciones en Visual Basic.
 Luego de un tiempo encontre la funcion Beep de la API, que me recive valores de frecuencias y duracion en milisegundos de las mismas, pero les señalo el problema:
 
 Reproduce el sonido en la bocina del gabinete, y no puedo variar la intensidad del sonido que se emite. De inmediato pense en buscar otra funcion. Encontre las funciones de la API para reproduccion de formato WAVE, pero no les entiendo....   ???. Mi problema es que no encuentro como se estructura un archivo WaveForm.
 
 Es como dejo mi comentario, preguntando por cualquiera de las 2 soluciones, o las que sean necesarias, jeje, pues si existe alguna otra funcion o libreria que me saque de este problema pues seria un completo alivio, sintetizo mis dudas:
 
 - Como desviar la señal del altavoz de gabiente a la tarjeta de sonido.
 
 ó
 
 - Como rayos puedo hacer un archivo WaveForm, (.WAV), mediante el Visual Basic.
 
 De antemano y sobreentendido queda mi agradecimiento por quien conteste a mi peticion, asi como quien lea este comentario...
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 Delta24 |  |  |  | 
			| 
					
						| Kizar 
								       
								
								 Desconectado 
								Mensajes: 1.325
								
								 
								kizar_net
								
								
								
								
								
								   | 
 
Fuente: api - guide Private Const SND_APPLICATION = &H80         '  look for application specific association
 Private Const SND_ALIAS = &H10000     '  name is a WIN.INI [sounds] entry
 Private Const SND_ALIAS_ID = &H110000    '  name is a WIN.INI [sounds] entry identifier
 Private Const SND_ASYNC = &H1         '  play asynchronously
 Private Const SND_FILENAME = &H20000     '  name is a file name
 Private Const SND_LOOP = &H8         '  loop the sound until next sndPlaySound
 Private Const SND_MEMORY = &H4         '  lpszSoundName points to a memory file
 Private Const SND_NODEFAULT = &H2         '  silence not default, if sound not found
 Private Const SND_NOSTOP = &H10        '  don't stop any currently playing sound
 Private Const SND_NOWAIT = &H2000      '  don't wait if the driver is busy
 Private Const SND_PURGE = &H40               '  purge non-static events for task
 Private Const SND_RESOURCE = &H40004     '  name is a resource name or atom
 Private Const SND_SYNC = &H0         '  play synchronously (default)
 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()
 PlaySound "C:\WINDOWS\MEDIA\TADA.WAV", ByVal 0&, SND_FILENAME Or SND_ASYNC
 End Sub
 
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Delta24 
								
								 Desconectado 
								Mensajes: 4
								
								 
								Delta24
								
								
								
								
								
								   | 
 
Saludos de nuevo. 
 Kizar, la función que posteas, es la solución, efectivamente logras reproducir un sonido por medio de la tarjeta de audio. pero quizás no expliqué bien mi problema. Lo replanteo de la siguiente manera, quizás me puedas ayudar... :
 
 - Cómo puedo hacer, para que la tarjeta de sonido, me emita por medio de las bocinas un sonido de 500hz a 30db?
 
 Ese es el asunto, quisiera poder mandar reproducir una sola frecuencia. La solución que me brindas, me plantea la opción de grabar archivos WAV, con las frecuencias que necesito, ( un archivo que contenga un sonido de 250hz, otro para 500hz, y asi...). Pero, definitivamente esos archivos durarán siempre el mismo tiempo. Yo necesito que duren N tiempo, es decir, que de la tarjeta de sonido salga la señal mientras el usuario mantenga oprimida la tecla Enter, ( por dar un ejemplo ).
 
 Espero puedan ayudarme, tanto tú como quien se interese por el tema. Como antes, mis saludos y agradecimientos por prestar lectura a estos posts...
 |  
						| 
								|  |  
								|  |  En línea | 
 
 Delta24 |  |  |  | 
			| 
					
						| Kizar 
								       
								
								 Desconectado 
								Mensajes: 1.325
								
								 
								kizar_net
								
								
								
								
								
								   | 
 
Fuente : Api Guide 'Example submitted by Danjel Nyberg'It needs a textbox (Text1) and two command buttons (Command1, Command2)
 Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As Integer, ByVal dwVolume As Long) As Integer
 Private Declare Function waveOutGetVolume Lib "Winmm" (ByVal wDeviceID As Integer, dwVolume As Long) As Integer
 Private Sub Command1_Click()
 Dim a, i As Long
 Dim tmp As String
 a = waveOutGetVolume(0, i)
 tmp = "&h" & Right(Hex$(i), 4)
 Text1 = CLng(tmp)
 End Sub
 Private Sub Command2_Click()
 Dim a, i As Long
 Dim tmp, vol As String
 vol = Text1
 tmp = Right((Hex$(vol + 65536)), 4)
 vol = CLng("&H" & tmp & tmp)
 a = waveOutSetVolume(0, vol)
 End Sub
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Delta24 
								
								 Desconectado 
								Mensajes: 4
								
								 
								Delta24
								
								
								
								
								
								   | 
 
Hola que tal. Veran: la solución que me posteas, no me arroja ningun resultado, quisiera explicarte como la entiendo, si en algo me equivoco, ruego me corrijan... :
 'Example submitted by Danjel Nyberg
 'It needs a textbox (Text1) and two command buttons (Command1, Command2)
 
 Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As Integer, ByVal dwVolume As Long) As Integer // Carga de la libreria Winmm.dll la funcion WaveOutSetVolume, la cual establece el valor de volumen de salida de la tarjeta de sonido.
 
 Private Declare Function waveOutGetVolume Lib "Winmm" (ByVal wDeviceID As Integer, dwVolume As Long) As Integer //Carga de la libreria winmm.dll la funcion WaveOutGetVolume que obtiene el valor del volumen de la tarjeta de sonido,
 
 Private Sub Command1_Click() // Cuando se haga click en command1
 Dim a, i As Long // Declare las variables a,i de tipo LONG
 Dim tmp As String  //Declare la variable TMP de tipo STRING
 a = waveOutGetVolume(0, i) // el valor devuelto por la funcion con los parametros de Dispositivo Numero 0, al valor de i, sera igual a la variable a
 tmp = "&h" & Right(Hex$(i), 4) // temp es igual a "&h", ( segun yo esto es para direccionar a un puerto ) mas los cuatro caracteres de la derecha del hexadecimal de i.
 Text1.text = CLng(tmp) // El texto de text1 vale tmp convertido a tipo LONG
 End Sub
 
 Private Sub Command2_Click() // Cuando se haga click en Command2
 Dim a, i As Long // Declare a,i como LONG
 Dim tmp, vol As String //Declaro tmpo,vol como STRING
 vol = Text1.text //Iguala vol, al valor de text de text1
 tmp = Right((Hex$(vol + 65536)), 4) //Iguala a tmpo a los cuatro caracteres de la derecha del hexadecimal de vol + 65536
 vol = CLng("&H" & tmp & tmp) //Iguala a vol a la parte LONG de "&h" mas el valor de temp mas el valor de tmp
 a = waveOutSetVolume(0, vol) //iguala a a con el resultado devuelto de la funcion con los parametros Dispositivo Numero 0 y el Volumen igual al valor de VOL
 End Sub
 
 
 Segun entiendo, las funciones:
 
 - waveOutGetVolume.- Obtiene el valor del volumen actual
 - waveOutSetVolume.- Establece el valor de volumen
 
 ( es obvio que hablamos de intesidad de sonido )
 
 De acuerdo a esto, logramos el objetivo de variar el volumen de salida de la tarjeta de sonido, pero seguimos con la maxima duda: Como puedo hacer que se reproduzcan 1000Hz.?? o x numero de Hz...
 
 Quiero compartir con ustedes lo siguiente:
 
 las propiedades del sonido son 3: Intensidad, Frecuencia, y Duracion.
 
 Bajo esta loógica, todo lo que oimos proviene de una fuente que emite a determinada intensidad, ( dB ), a determinada frecuencia, ( hz ) y por determinado tiempo, ( segs. ). Entonces, un archivo de sonido, como es un midi, wav, mp3, rar, etc., etc., tiene forzosamente que tener un registro, ( una especie de base de datos por decirlo de otro modo ), que por cada milisegundo, guarde intensidad y frecuencia.
 
 Mi duda es, en que momento, en que parte, bajo que condiciones y como se guarda ese registro, en un archivo WAVEFORM, por ejemplo, o en un Midi, o no se, creo que el mas conveniente seria el WaveForm...
 
 Como siempre les agradezo, y quedamos en contacto...
 ( jeje, ya logramos una... )
 |  
						| 
								|  |  
								|  |  En línea | 
 
 Delta24 |  |  |  |  |  | 
			| 
					
						| NYlOn 
								 
								
								 Desconectado 
								Mensajes: 842
								
								 
								OOOOHHHHHH, TARAGÜIIII       xDDDDDD
								
								
								
								
								
								     | 
								|  | -.-'' « Respuesta #6 en:  1 Diciembre 2005, 02:03 am » |  | 
 
 
GoogleEl segundo resultado... No buscaste un choto |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  | 
			| 
					
						| Sancho.Mazorka 
								 
								
								 Desconectado 
								Mensajes: 480
								
								 
								Gamer & Programador
								
								
								
								
								
								     | 
 
no si busque y habia entrado a al pagina esa que es toda verde pero como no entendia bien todo eso segui buiscando. y aca en el foro o encontre nada. |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  |  |  
 
	
 
   |