Autor
|
Tema: Reproduccion de Sonidos... clamando por ayuda... (Leído 5,380 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
|
|
|
|
|
|
|