waveform Audio Functions (UDF)

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

waveform Audio Functions (UDF)

Mensaje por Jonny »

Hola

¡por fin! :).

He terminado la UDF que me ha dado dolores de cabeza durante unas semanitas...

Hay algunas funciones que pueden mejorarse, pero no se bien como y antes de hacerlo mal... prefiero dejarlo así :) y que alguien me diga como mejorarlo y arreglarlo.

Así, que si hay algo que no esté bien, o es porque no he sabido implementarlo mejor, o porque no me he dado cuenta con tanta modificación en algunas de las funciones :P.

Como ya he dicho por otros posts donde preguntaba cosas acerca de estas apis, las funciones waveOut se encuentran en Winmm.dll y manejan sonido. en realidad, no hacen nada que no haga la UDF Sound.au3, pero de diferente manera más difícil.
Quizá, la diferencia más notable, es que con estas apis, puede reproducirse sonido almacenado en buffers, así que la librería puede serle útil a quiénes necesiten hacer esto.

Por ahí leí, que estas apis son las anteriores a Direct sound (no se si es así), pero diría que Direct sound debe hacer muchas más virguerías con el sonido.

En realidad, waveform Audio Functions tiene más funciones: waveIn, que manejan los dispositivos de entrada de sonido, que dejaré para más adelante, cuando me recupere de waveOut :).

Os adjunto la UDF, que por cierto con la tontería ha ocupado bastante. Básicamente por la documentación de las funciones. He intentado documentarlas lo mejor posible, y traducir también lo mejor que he sabido la documentación original. Así que, teniendo en cuenta que no soy muy bueno con el inglés y que en la documentación a veces pone cosas que no son necesarias.... puede que la documentación también se pueda mejorar.

Salu2!
Adjuntos
WaveOut.rar
(10.53 KiB) Descargado 257 veces
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2091
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: waveform Audio Functions (UDF)

Mensaje por BasicOs »

Gracias por el aporte, :smt041 :smt041
Salu22:)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: waveform Audio Functions (UDF)

Mensaje por Chefito »

Jejeje...por lo que veo ha sido un gran esfuerzo. Gracias por compartir. Seguro que a alguien le puede hacer falta alguna vez :smt002 .

Espero que vaya todo.....que te conozcooooo :smt005 . Es broma.

Por cierto, en los agradecimientos.....no soy Xefito, soy chefito :smt005 . Gracias por mencionarnos.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: waveform Audio Functions (UDF)

Mensaje por Jonny »

Xefito... :)

¡ya lo cambiooo! :).

Acias, eso espero yo también, que funcione, si no ¡pa darse un tiro!.

En cualquier caso, hay alguna que otra función que no puedo probar, porque dice Windows que el dispositivo no es compatible. ¿Si él lo dice?...

Salu2!
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: waveform Audio Functions (UDF)

Mensaje por Jonny »

Hola

Tengo que pedir disculpas, porque he visto que la función más importante de la UDF no funciona :).

WaveOutWrite().

No se por qué, pero no reproduce nada...

He mirado la función y me parece que está todo bien. Incluso, he buscado códigos que usen esta función en el foro inglés y aquí viene lo mejor.

He encontrado esto:

http://www.autoitscript.com/forum/topic ... ntry841309

por ejemplo, y tampoco me funciona.

Es extraño, porque la API WaveOutWrite en la UDF que he hecho yo devuelve 11 (creo recordar que ese valor no está contemplado por la documentación de la msdn) y en el código de la página que he puesto devuelve 34 (creo que tampoco sale por la msdn ese valor).

Así, que no se qué será, pero no funciona.
Cualquiera sabe, quizá (lo más seguro) el problema no esté en esa función, sino en alguna estructura, valor que se almacene en ellas...

Espero dar con la tecla y arreglarlo, aunque pinta complicado...

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: waveform Audio Functions (UDF)

Mensaje por Ximorro »

Uau sí que es una currada sí.

Gracias por los créditos. Aunque ya la tienes casi terminada te he puesto algo más de binario y hexadecimal en la otra entrada, para que comprendas mejor lo de los bits y los bots. ;-)

Una sugerencia, aunque la UDF está bien documentada es difícil ponerse a trabajar con ella si no sabes con qué funciones arrancar.
Podrías poner algún ejemplo básico que use la UDF, por ejemplo algo que toque 10 segundos de un mp3 o wav, cambie el volumen, haga una pausa, y continúe hasta el final, o algo así.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: waveform Audio Functions (UDF)

Mensaje por Jonny »

Hola

Ya leí el otro post.

Gracias por los links y las explicaciones :).

También es verdad, hay funciones que aunque más o menos he explicado qué hacen, estarían mejor con un ejemplo.

A ver si consigo que funcione, (que no se por qué no irá ahora) y añado ejemplos a la documentación.

Salu2!
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: waveform Audio Functions (UDF)

Mensaje por Jonny »

Hola
Jonny dijo: Tengo que pedir disculpas, porque he visto que la función más importante de la UDF no funciona :).

WaveOutWrite().

No se por qué, pero no reproduce nada...

...

Cualquiera sabe, quizá (lo más seguro) el problema no esté en esa función, sino en alguna estructura, valor que se almacene en ellas...
al fin:). Me he puesto a rebisar la UDF, pues era una lástima después de semejante curro, que no sirviera para nada... y habiendo descansado unos días de ella, he visto los errores que habían.

Como me suponía, el problema (gordo) no estaba en WaveOutWrite(), sino en WaveOutPrepareHeader().
Me hice una empanada mental con tanta api, estructura, uniones, bites... que acabé por utilizar mal las funciones DLL de AutoIt, pasando punteros, donde tenía que pasar handles, y eso que le di vueltas y más vueltas; pero cada vez que lo tocaba era para estropearlo más.
Ahora, lo he dejado bastante bien (o eso creo). La cosa, es que ahora sí, funciona.

Al principio me he asustado un poco, porque el sonido sonaba revolucionado; como si reprodujéramos una cinta rápido, pero eso no es cosa de la UDF, sino, de la configuración del dispositivo de salida de audio y del sonido que se reproduce. Y como no soy nada bueno con el sonido digital (ni analógico :))...

Yo he conseguido que el sonido que he reproducido suene bien (aunque ahora tengo que averiguar por qué se me cuelga el programa donde utilizo la UDF), que no creo que sea culpa de esta, sino de que no implemento bien las funciones (hay que llamar a waveoutunprepareheader() después de reproducir un sonido, según la msdn y supongo que será buena idea liberar el buffer que lo contiene. Pero para que os suene bien un sonido, tenéis que saber como funciona el formato que queréis reproducir:
el byterate, bitspersample, mono/estereo... yo he puesto una configuración inicial que puede que sirva en algunos casos y así podemos ahorrarnos poner unos cuantos parámetros, pero no tienen por que ser buenos para cualquier sonido.

Espero que ahora sí, esté todo correcto y os sirva cuando necesitéis hacer cosas complejas con sonidos.
Ximorro dijo: Una sugerencia, aunque la UDF está bien documentada es difícil ponerse a trabajar con ella si no sabes con qué funciones arrancar.
Podrías poner algún ejemplo básico que use la UDF, por ejemplo algo que toque 10 segundos de un mp3 o wav, cambie el volumen, haga una pausa, y continúe
hasta el final, o algo así.
Como decía en el anterior post que puse, tenía intención de hacer ejemplos de uso; en un script a parte, con una interfaz, pero no encuentro como quitar las cabeceras a un archivo .wav por ejemplo. Esto es necesario, porque como pone en la documentación de WaveOutPrepareHeader() creo, el sonido debe estar limpio de cabeceras.
Si encuentro la forma de quitar las cabeceras de un archivo de sonido, para dejar únicamente el sonido, hago un pequeño script de ejemplo. incluso, me gustaría hacer una función que hiciera esto de quitar las cabeceras a los archivos de sonido para que fuera más sencillo aún utilizar las apis WaveOut, y no tuviera que hacerlo el usuario.

Así, que si alguien sabe como se hace? :).

Ah, por si os preguntáis "¿como he probado un sonido si no se quitar las cabeceras?": Porque lo he probado con ECI.dll, que ya escribí algo por el foro :). Esa dll, da la posibilidad de reproducir directamente sonido, o enviarlo a un buffer para que lo reproduzcamos nosotros como queramos (y así es como lo he hecho :).

Salu2!
Adjuntos
WaveOut.rar
(10.54 KiB) Descargado 196 veces
Responder