Sound data structures
From HaskellWiki
(Difference between revisions)
(Sox, Hommage, StorableVector) |
(→MIDI-based: alsa-seq only MIDI data) |
||
| (3 intermediate revisions not shown.) | |||
| Line 29: | Line 29: | ||
| [[Sox]] | | [[Sox]] | ||
| Lists, [[Storable Vector]], whatever you have a <hask>hPut</hask> and <hask>hGetContents</hask> function for. | | Lists, [[Storable Vector]], whatever you have a <hask>hPut</hask> and <hask>hGetContents</hask> function for. | ||
| + | |- | ||
| + | | [[Sox|libsox]] | ||
| + | | [[Storable Vector]] | ||
|} | |} | ||
| Line 56: | Line 59: | ||
|- | |- | ||
| [[Synthesizer|synthesizer]] | | [[Synthesizer|synthesizer]] | ||
| - | | <hask>[a]</hask>, [[Storable Vector|StorableVector.Lazy a]], <hask>(StateT s Maybe a, s)</hask> (like | + | | <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]] | | [[Hommage]] | ||
| Line 84: | Line 90: | ||
| Uses midi library | | Uses midi library | ||
|- | |- | ||
| - | | [[ALSA|alsa]] | + | | [[ALSA|alsa-seq]] |
| - | | Custom midi | + | | 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 |
