2012-03-19 8 views
5

Necesito encontrar una biblioteca de sonidos para haskell. He seguido las instrucciones de algunos que se presentan en haskell wiki http://www.haskell.org/haskellwiki/Sound_data_structures pero no pude conseguir ninguno para trabajar. Todo lo que necesito es reproducir archivos de audio, independientemente de su formato. Estoy desarrollando un juego con FunGen, y es hora de la música. Puede que tenga algunos problemas para que trabajen juntos, pero ni siquiera puedo reproducir un simple ejemplo de sonido. La mayoría de mis problemas se deben a la instalación de cabal, o dependencias que no puedo encontrar en ningún lugar. Estoy usando Windows.Sound lib haskell

+0

¿Cuáles has probado y cuáles son los problemas? ¿Puedes dar mensajes de error? – luqui

+0

por favor, compruebe esta [pregunta] (https://stackoverflow.com/questions/14005592/play-a-wav-file-with-haskell) espero que algo funcione para usted :) – biinui

Respuesta

7

Estar en Windows es una limitación importante en el audio de Haskell. La mayoría de los paquetes son enlaces al código C, y tienden a ser centrados en Linux (JACK, Alsa) o, en el mejor de los casos, multiplataforma nominal, pero en la práctica son difíciles de construir y usar en Windows. Tendrá que compilar o instalar la biblioteca C primero antes de instalar el enlace Haskell.

¿Has probado OpenAL? Es probablemente el más adecuado para lo que quieres hacer. Si instala el C OpenAL libraries, el enlace Haskell debería ser un paso siguiente bastante simple. Hay algunos paquetes complementarios que están destinados a simplificar algunas tareas comunes, como ALUT y Alure.

De lo contrario, la mayoría de las otras soluciones en realidad implicarían varios paquetes que pueden no funcionar bien juntos. hsndfile y hsndfile-vector son buenos para leer archivos de audio (necesitará tener libsndfile instalado), pero no reproducen sonido. portaudio reproducirá audio (de nuevo, necesitará el C portaudio library), pero no se ha actualizado en mucho tiempo (y algunas actualizaciones son muy necesarias). También necesitará estar medianamente familiarizado con una cadena de compiladores de C (por ejemplo, MinGW o Cygwin) para instalar primero las bibliotecas C necesarias.

Otra forma podría ser enlazar a un lenguaje de audio dedicado como Supercollider o Csound. Esta sería una solución bastante pesada, pero las consolidaciones tienden a mantenerse mejor y al menos Csound debería poder instalarse fácilmente en Windows (información: escribí el paquete hCsound). Sox (C library/executable) también podría funcionar para usted (nunca lo he probado en Windows, pero dice que funciona).

+0

Buena lista, y muy completa. Lo único que agregaría es que ALUT está en desuso. http://connect.creativelabs.com/openal/Lists/OpenAL%20Development/Flat.aspx?RootFolder =% 2Fopenal% 2FLists% 2FOpenAL% 20Desarrollo% 2FDeprecated% 20Alut% 20Wav% 20Loading% 20Functions & FolderCTID = 0x01200200BB72FB7EEB38514F8CD1A9372A031174 – rtperson

+0

@rtperson - gracias por eso; Nunca he usado ALUT y, básicamente, lo he pensado como un audioanálogo de GLUT (que, aunque en su mayoría obsoleto, sigue siendo bastante común). –

+0

cuando intento instalar hsndfile o hCsound, caball grita que falta sndfile lib. Me doy cuenta de que no sé cómo instalarlo, ya que al copiar un dll dindt trabajo – Illiax

1

Todo lo que necesito es reproducir archivos de audio, independientemente de su formato.

Su mejor apuesta para esto será hsndfile, mencionado en la excelente respuesta de John L.. Pero es posible que desee hacer su vida más fácil inicialmente. El formato de archivo WAV es a very simple format, que consiste esencialmente en datos de PCM en bruto con un mínimo de encabezados. Intenta obtener un archivo WAV para jugar, y luego amplía tus horizontes desde allí.

será la lucha contra cuesta arriba contra una falta de código de ejemplo - y usted puede encontrar que necesita punteros de memoria externa y otras técnicas no tan sencillo - pero hay una muestra decente para abrir y leer un archivo WAV here.

Además, al desarrollar en Windows, aprenda a amar la bandera -fno-ghci-sandbox. Le dice a ghci que se está conectando a una biblioteca que usa su propio almacenamiento local de subprocesos. A menudo es la única forma de conseguir que ciertas bibliotecas externas funcionen en GHCi.