Sound data structures
From HaskellWiki
(Difference between revisions)
m (Applications and libraries/Music and sound/Formats moved to Sound data structures) |
(→MIDI-based: alsa-seq only MIDI data) |
||
| (6 intermediate revisions not shown.) | |||
| Line 15: | Line 15: | ||
| <hask>(Audible a) => DiffUArray Int a</hask> | | <hask>(Audible a) => DiffUArray Int a</hask> | ||
|- | |- | ||
| - | | hsndfile | + | | [[hsndfile]] |
| <hask>MArray</hask> with <hask>Float</hask> and <hask>Double</hask> | | <hask>MArray</hask> with <hask>Float</hask> and <hask>Double</hask> | ||
|- | |- | ||
| Line 26: | Line 26: | ||
| WAVE | | WAVE | ||
| <hask>[[Int32]]</hask> | | <hask>[[Int32]]</hask> | ||
| + | |- | ||
| + | | [[Sox]] | ||
| + | | Lists, [[Storable Vector]], whatever you have a <hask>hPut</hask> and <hask>hGetContents</hask> function for. | ||
| + | |- | ||
| + | | [[Sox|libsox]] | ||
| + | | [[Storable Vector]] | ||
|} | |} | ||
| Line 53: | Line 59: | ||
|- | |- | ||
| [[Synthesizer|synthesizer]] | | [[Synthesizer|synthesizer]] | ||
| - | | <hask>[a], StorableVector.Lazy a, (StateT s Maybe a, s)</hask> | + | | <hask>[a]</hask>, [[Storable Vector|StorableVector.Lazy a]], <hask>(StateT s Maybe a, s)</hask> (like {{HackagePackage|id=stream-fusion}}) |
|- | |- | ||
| [[JACK|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>, <br /><hask>StorableArray</hask> |
| + | |- | ||
| + | | [[ALSA|alsa-pcm]] | ||
| + | | <hask>(SampleFrame a) => Ptr a</hask> | ||
| + | |- | ||
| + | | [[Hommage]] | ||
| + | | <hask>[a]</hask> | ||
|} | |} | ||
| Line 77: | Line 89: | ||
| [[Haskore]] | | [[Haskore]] | ||
| Uses midi library | | Uses midi library | ||
| + | |- | ||
| + | | [[ALSA|alsa-seq]] | ||
| + | | Custom midi structures | ||
|- | |- | ||
| YampaSynth | | YampaSynth | ||
Current revision
At the request of Don Stuart, here is some information about the formats supported by different sound libraries.
Contents |
1 In-memory data formats
In-memory sound formats are fairly diverse.
1.1 Reading and writing sound files
| Library | Sound file format |
|---|---|
| HCodecs | (Audible a) => DiffUArray Int a |
| hsndfile | MArray Float Double |
| HSoundFile | [[Double]] |
| ALUT | OpenAL.AL.Buffer |
| WAVE | [[Int32]] |
| Sox | Lists, Storable Vector, whatever you have a hPut hGetContents |
| libsox | Storable Vector |
1.2 Playing sounds
| Library | Sound file format |
|---|---|
| OpenAL | Ptr UInt8 Ptr Int16 |
| SDL-mixer | ForeignPtr ChunkStruct ForeignPtr MusicStruct |
1.3 Sound processing libraries
| Library | Sound file format |
|---|---|
| dsp | Array a, [a] |
| synthesizer | [a] (StateT s Maybe a, s) |
| jack | Operates via mapping functions mainMono :: (CFloat -> IO CFloat) -> IO () mainStereo :: ((CFloat, CFloat) -> IO (CFloat, CFloat)) -> IO () StorableArray |
| alsa-pcm | (SampleFrame a) => Ptr a |
| Hommage | [a] |
1.4 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 |
| alsa-seq | Custom midi structures |
| YampaSynth | Stand-alone program |
1.5 Special-purpose APIs only (FFIs, etc.)
| Library | Sound file format |
|---|---|
| hCsound | CsoundPtr |
| HasSound / Haskore | OrcExp |
| hsc3 | UGen |
1.6 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 |
