Difference between revisions of "Sound data structures"

From HaskellWiki
Jump to navigation Jump to search
(synthesizer library)
(links)
Line 21: Line 21:
 
| <hask>[[Double]]</hask>
 
| <hask>[[Double]]</hask>
 
|-
 
|-
| ALUT
+
| [[ALUT]]
 
| <hask>OpenAL.AL.Buffer</hask>
 
| <hask>OpenAL.AL.Buffer</hask>
 
|-
 
|-
Line 35: Line 35:
 
! Sound file format
 
! Sound file format
 
|-
 
|-
| OpenAL
+
| [[OpenAL]]
 
| <hask>Ptr UInt8</hask>, <hask>Ptr Int16</hask>, 1-N channels
 
| <hask>Ptr UInt8</hask>, <hask>Ptr Int16</hask>, 1-N channels
 
|-
 
|-
Line 49: Line 49:
 
! Sound file format
 
! Sound file format
 
|-
 
|-
| dsp
+
| [[DSP|dsp]]
 
| <hask>Array a, [a]</hask>
 
| <hask>Array a, [a]</hask>
 
|-
 
|-
| [[Synthesizer]]
+
| [[Synthesizer|synthesizer]]
 
| <hask>[a], StorableVector.Lazy a, (StateT s Maybe a, s)</hask>
 
| <hask>[a], StorableVector.Lazy a, (StateT s Maybe a, s)</hask>
 
|-
 
|-
| jack
+
| [[JACK|jack]]
 
| Operates via mapping functions<br /><hask>mainMono :: (CFloat -> IO CFloat) -> IO ()</hask><br /><hask>mainStereo :: ((CFloat, CFloat) -> IO (CFloat, CFloat)) -> IO ()</hask>
 
| Operates via mapping functions<br /><hask>mainMono :: (CFloat -> IO CFloat) -> IO ()</hask><br /><hask>mainStereo :: ((CFloat, CFloat) -> IO (CFloat, CFloat)) -> IO ()</hask>
 
|}
 
|}
   
=== MIDI-based ===
+
=== [[MIDI]]-based ===
   
 
{| border="1"
 
{| border="1"
Line 69: Line 69:
 
| Reads and writes MIDI files
 
| Reads and writes MIDI files
 
|-
 
|-
| midi
+
| [[MIDI|midi]]
 
| Reads and writes MIDI files
 
| Reads and writes MIDI files
 
|-
 
|-
| alsa-midi
+
| [[ALSA|alsa-midi]]
 
| Uses midi library
 
| Uses midi library
 
|-
 
|-
Line 89: Line 89:
 
! Sound file format
 
! Sound file format
 
|-
 
|-
| hCsound
+
| [[CSound|hCsound]]
 
| <hask>CsoundPtr</hask>
 
| <hask>CsoundPtr</hask>
 
|-
 
|-
Line 95: Line 95:
 
| <hask>OrcExp</hask>
 
| <hask>OrcExp</hask>
 
|-
 
|-
| hsc3
+
| [[SuperCollider|hsc3]]
 
| <hask>UGen</hask>
 
| <hask>UGen</hask>
 
|}
 
|}

Revision as of 20:48, 4 September 2008

At the request of Don Stuart, here is some information about the formats supported by different sound libraries.

In-memory data formats

In-memory sound formats are fairly diverse.

Reading and writing sound files

Library Sound file format
HCodecs (Audible a) => DiffUArray Int a
hsndfile MArray with Float and Double
HSoundFile [[Double]]
ALUT OpenAL.AL.Buffer
WAVE [[Int32]]

Playing sounds

Library Sound file format
OpenAL Ptr UInt8, Ptr Int16, 1-N channels
SDL-mixer ForeignPtr ChunkStruct, ForeignPtr MusicStruct

Sound processing libraries

Library Sound file format
dsp Array a, [a]
synthesizer [a], StorableVector.Lazy a, (StateT s Maybe a, s)
jack Operates via mapping functions
mainMono :: (CFloat -> IO CFloat) -> IO ()
mainStereo :: ((CFloat, CFloat) -> IO (CFloat, CFloat)) -> IO ()

MIDI-based

Library Sound file format
HCodecs Reads and writes MIDI files
midi Reads and writes MIDI files
alsa-midi Uses midi library
Haskore Uses midi library
YampaSynth Stand-alone program

Special-purpose APIs only (FFIs, etc.)

Library Sound file format
hCsound CsoundPtr
HasSound / Haskore OrcExp
hsc3 UGen

No public sound-buffer API

Library Sound file format
hbeat The relevant source files are missing!
hogg Very low-level API for Ogg internals only
libmpd No sound buffer API
sonic-visualizer No sound buffer API
truelevel Stand-alone program (uses WAVE)
wavconvert Stand-alone program