Programar con ASIO en C# para aplicación multicanal propia

Elios
#1 por Elios el 08/04/2007
Estoy haciendo mi Proyecto Fin de Carrera, que consiste en un software de edición de audio multicanal (algo así como Cool Edit Pro, pero simplficado). Adjunto una imagen del aspecto actual (aun no definitivo).

He escogido como lenguaje de programación C# (plataforma .NET), y mirando en http://www.thecodeproject.com he encontrado ejemplos de programación de la tarjeta de sonido a bajo nivel. Para ello usa la API WaveOutXXX y WaveInXXX de winmm.dll.

Leyendo en esta página:
http://www.staudio.de/kb/english/drivers/

Me he enterado bien de qué papel juegan la API ASIO y la API MMSystem (la que contiene winmm.dll de la que he obtenido las funciones).
Sin embargo me ha surgido una duda al leer esta página:
http://www.yio.com.ar/secciones.php?nam ... le&sid=154

-¿¿En qué capa está ASIO?? ¿¿En la de drivers o la de API??

Además...
-¿Alguien ha programado alguna vez usando los drivers ASIO? ¿Merece la pena dedicar un tiempo importante a investigar acerca de este estándar? O por el contrario con MMSystem puedo conseguir resultados similares.

En fin, resumiendo, que he hecho ya cosas con MMSystem, pero según me han dicho para la gestión multicanal ASIO es mucho más potente, sin embargo no se manejar ASIO (de hecho lo entiendo nada más que regular), y tendría que dedicar mucho tiempo a aprender... así que no se si seguir con MMSystem o con ASIO.

Depende de la información que consiga acerca de ASIO estos días.
Archivos adjuntos ( para descargar)
misoftware.JPG
Subir
Elios
#2 por Elios el 08/04/2007
Ahh! Otra cosa.
Me he descargado el ASIO SDK, que trae un montón de archivos CPP, archivos .H, etc... en general cosas para C++, lo que pasa es que no se compilarlo, ni se para qué sirve. Eso sí, trae un manual muy interesante. Según tengo entendido esto sirve para empezar a hacer cosas con ASIO, pero no lo tengo claro...
Subir
Elios
#3 por Elios el 08/04/2007
Adjunto diversas páginas de información que hacen que cuando ya creo que me he enterado me surjan dudas:

http://en.wikipedia.org/wiki/Audio_stream_input_output
http://www.yio.com.ar/secciones.php?nam ... le&sid=154
http://www.yio.com.ar/secciones.php?nam ... le&sid=157
http://listas.hispalinux.es/pipermail/gnu-nexus-devel/
(muy interesante lista de correo para este tema).

La verdad es que tengo un buen cacao en la cabeza... como no logre enterarme pronto de lo de ASIO voy a seguir el camino que llevaba (con winmm.dll), aunque no sea el óptimo, y andando...
Subir
narf1
#4 por narf1 el 08/04/2007
Los ficheros .H, son ficheros de cabecera de C/C++, donde están las cabeceras de las funciones implementadas en los ficheros .CPP correspondientes.
Normalmente en el programa principal se incluyen aquellas cabeceras de las funciones que vayas a utilizar, y luego en la compilacion, se añaden las funciones que se utilizan al programa principal y se ensambla.
En windows, no he trabajado con librerias, pero en Unix/linux, todo eso se hace mediante un makefile de gcc, donde se crean los ficheros objetos de las librerias que necesites y que luego son linkados con el programa principal.Me supongo que bajo windows, eso se hará de una forma automatica si los ficheros .h y cpp, estan en la carpeta correspondiente, la verdad es que lo desconozco.
Y volviendo al tema de los drivers, pues desgraciadamente, cuando quieres hacer algo y quieres utilizar librerias ya implementadas, no queda otra que informarse de las funciones que tienen y cual es su funcionamiento(parametros a pasar, tipo, etc...).
Bienvenido al mundo de la programación, autodidacta y puñetero.
Un saludo.
Subir
modulay
#5 por modulay el 08/04/2007
Si cuentas con las librerías ya compiladas pues eso,solo necesitas conocer su contenido y como invocar sus funciones desde tu aplicación.
Si lo que tienes son las fuentes pues necesitarás un compilador c++ para compilarlas y después linkarlas,con el fin de obtener los supuestos archivos dll.
Es interesante el tema de aplicaciones que trabajen con asio.
Os seguiré de cerca :)
Subir
Elios
#6 por Elios el 08/04/2007
Primera parte del manual de ASIO SDK
Archivos adjuntos ( para descargar)
ASIO SDK 2.2.rar
Subir
Elios
#7 por Elios el 08/04/2007
Bueno, os meteis en:
http://www.steinberg.net/329+M52087573ab0.html

Os registrais en 1 minuto, y os descargais el ASIO SDK. No trae funciones compiladas, todo viene para compilarlo (algo que no he conseguido).

Una vez compilado supongo que invocando las funciones que nos menciona podremos programar usando la API ASIO (muy buena para multicanal, supuestamente).

...
Sin embargo no encuentro ningún ejemplo para C#, y paso de andar investigando... así que voy a usar al final winmm.dll, que aunque es algo menos potente, tengo ya trabajo avanzado...
y además, Cool Edit Pro no usaba ASIO y funcionaba muy bien en trabajo multipista.

Así que, probaré distintos tamaños de drivers y demás parámetros para ir optimizando...

Por otro lado, yo creo que los softwares como Cubase o Audition 2.0 que soportan ASIO, es que aparte de la API original de windows (winmm.dll) o DirectSound, usa ASIO. Es decir, mi software debo empezarlo con la API de Windows, y si va bien puedo probar a introducirle el ASIO...
Bye!
Archivos adjuntos ( para descargar)
ASIO SDK 2.2-2parte.rar
Subir
modulay
#8 por modulay el 08/04/2007
Bueno,es que creo que no son cosas excluyentes.
Se supone que la plataforma asio está a nivel de driver,es decir,es la capa que interactúa de forma directa con el hard,estando por debajo de todas las capas software de cualquier aplicación.El hecho de usar el api de windows no creo que suponga el tener que comunicarse con los dispositivos exclusivamente a través de drivers no asio.Una dll no es más que un conjunto de subprogramas,funciones,que a su vez necesitan tener por debajo un driver que haga de intermediario entre ellas y el hardware,ya sea asio o no.
No tengo muy claro el tema este de las SDK,supongo que son herramientas para el desarrollo de drivers.
Voy a echarle una ojeada a los enlaces que pusiste
Subir
modulay
#9 por modulay el 08/04/2007
El SDK trae dos ejemplos compilables con Visual C++.
Uno genera un ejecutable (hostsample) y el otro una dll (asiosample).
He compilado ambos sin problema con Visual C++ 6.0
Subir
Elios
#10 por Elios el 09/04/2007
modulay @ 08 Abr 2007 - 06:11 PM escribió:
Bueno,es que creo que no son cosas excluyentes.
Se supone que la plataforma asio está a nivel de driver,es decir,es la capa que interactúa de forma directa con el hard,estando por debajo de todas las capas software de cualquier aplicación.El hecho de usar el api de windows no creo que suponga el tener que comunicarse con los dispositivos exclusivamente a través de drivers no asio.Una dll no es más que un conjunto de subprogramas,funciones,que a su vez necesitan tener por debajo un driver que haga de intermediario entre ellas y el hardware,ya sea asio o no.


Ahí iba yo. ¿Tú crees que están en la capa de drivers?
Es que según
http://www.staudio.de/kb/english/drivers/

ASIO lo pone a la misma altura que "mmsystem" (es una API).
Es que no tengo claro lo que es los drivers a nivel de Kernel o los drivers a nivel de usuario (algo de hecho he leído)...

¿Tú sabes bien qué capas hay y qué archivos entran en juego hasta llegar al hardware?
Subir
Elios
#11 por Elios el 09/04/2007
Por cierto... yo no usé Visual C++ 6.0, si no el de la plataforma .NET... con ese no pude.
Me tendré que buscar el 6.0 y probar a compilar...
Subir
resonic
#12 por resonic el 30/04/2007
Con visualstudio deberias poder compilar. Una vez me bajé un proyecto en c# de un plugin vst para visual studio que tiraba de los fuentes de c++
Subir
1334
#13 por 1334 el 07/06/2007
Elios @ 09 Abr 2007 - 03:44 PM escribió:
Por cierto... yo no usé Visual C++ 6.0, si no el de la plataforma .NET... con ese no pude.
Me tendré que buscar el 6.0 y probar a compilar...


descargate el visual studio 2005 C++ express edition de la pagina de microsoft y con esto lo podras compilar

salut
Subir
planetap
#14 por planetap el 07/06/2007
eso te iba a decir....que aunque el proyecto este en visual c++ 6 con el express puedes compilarlo y ejecutarlo.
Subir
Elios
#15 por Elios el 07/06/2007
Hola, me conseguí Visual C++ 6.0 y con este sí compila perfectamente.

Con el Visual Studio 2005 Express no lo he conseguido... supongo que se podrá pero bueno. Teniendo el 6.0 tampoco me importa tanto.

No obstante, mi proyecto fin de carrera lo estoy haciendo sin ASIO. Sería una buena mejora incluirle compatibilidad ASIO, pero requeriría invertir mucho tiempo. Igual que sería buena idea convertirlo en un host VST, pero también requeriría mucho tiempo.

La verdad es que el software se me está quedando bien, es multipista, puedes aplicar efectos a tiempo real a cada pista, una representación gráfica apañá... Puedes reproducir ficheros WAV de distintas frecuencias de muestreo simultáneamente!! (adapta a tiempo real la frecuencia de muestreo, como si fuera un efecto más).

En fin, cuando lo acabe, lo subo por aquí junto con la memoria del proyecto para que todos aquellos que quieran cacharrearle a mi software entiendan bien todo.

Le faltan detalles como posibilidades de edición (copiar y pegar), undo, un poco más de agilidad para la representación, un poco más de rendimiento en general... Son cosas que haré si me dan tiempo porque son un poco secundarias.

Bueno, hasta luego!
Subir
Hilos similares
Responder

Regístrate o para poder postear en este hilo