Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Delta24 en 25 Octubre 2005, 19:40 pm



Título: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Delta24 en 25 Octubre 2005, 19:40 pm
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...


Título: Re: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Kizar en 26 Octubre 2005, 18:34 pm
Fuente: api - guide

Código:

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



Título: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Delta24 en 26 Octubre 2005, 22:04 pm
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...


Título: Re: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Kizar en 27 Octubre 2005, 18:09 pm
Fuente : Api Guide

Código:
'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



Título: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Delta24 en 28 Octubre 2005, 06:55 am
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... )


Título: Re: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Sancho.Mazorka en 30 Noviembre 2005, 22:34 pm
alguno me puede dejar el link de donde puedo bajar la API-Guide ya la busque pero no la encuentro.
muchas gracias

Sancho Mazorka   :P


Título: -.-''
Publicado por: NYlOn en 1 Diciembre 2005, 02:03 am
Google (http://www.google.com.ar/search?hl=es&q=API-Guide+download&btnG=B%C3%BAsqueda&meta=)

El segundo resultado... No buscaste un choto


Título: Re: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: el_chente23 en 1 Diciembre 2005, 03:43 am
Citar
alguno me puede dejar el link de donde puedo bajar la API-Guide ya la busque pero no la encuentro

http://foro.elhacker.net/index.php/topic,82675.msg381363.html#msg381363

Saludos


Título: Re: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Sancho.Mazorka en 1 Diciembre 2005, 23:23 pm
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.

Sancho Mazorka   :P


Título: Re: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Sancho.Mazorka en 8 Diciembre 2005, 23:56 pm
miren ya se que paso mucho tiempo y me meti para preguntar sobre la API-GUIDE, pero les queria decir que yo tengo un ej que te marca en un form con lineas la frecuancia como los programas WAVE cut pro para edicon de sonido pero no la podes modificar ni nada solo te marca el sonido. despues tengo otro que te sube o baja el volumen de la makina. salu2


Sancho Mazorka  :P


Título: Re: Reproduccion de Sonidos... clamando por ayuda...
Publicado por: Delta24 en 10 Diciembre 2005, 00:51 am
Ahora que mencionas eso, podemos encontrar una manerade solucionar mi problema. Todos los reproductores de sonidos, ( ...bueno la mayoria ), utilizan visualizaciones donde se ve reflejada la onda del sonido; como rayos hacen eso???

 Obviamente extraen la frecuencia y dibujan la gráfica con el valor de la intensidad. tambien en los ecualizadores de winamp y windows media player, en fin, cualquier tipo de ecualizador hace eso precisamente, entonces, la idea es investigar, como obtener los valores de las frecuencias de una onda WAVE. Si hay una funcion get, a fuerza que existe uan set ;) .

Quiza es ahi donde entren los tipos esos de WAVEFORM,  ( pero no entiendo que significan los parametros...  :( ), en fin, a seguirle buscando... estamos en contacto..