Difference between revisions of "Sound data structures"
Jump to navigation
Jump to search
(synthesizer library) |
(Adding in the RIFF library which only parses a container format, not actual audio.) |
||
(9 intermediate revisions by 2 users 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 21: | Line 21: | ||
| <hask>[[Double]]</hask> |
| <hask>[[Double]]</hask> |
||
|- |
|- |
||
− | | ALUT |
+ | | [[ALUT]] |
| <hask>OpenAL.AL.Buffer</hask> |
| <hask>OpenAL.AL.Buffer</hask> |
||
|- |
|- |
||
| 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]] |
||
+ | |- |
||
+ | | [http://hackage.haskell.org/package/riff riff] |
||
+ | | <hask>Data.ByteString.Lazy</hask> |
||
|} |
|} |
||
Line 35: | Line 44: | ||
! 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 58: | ||
! 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]</hask>, [[Storable Vector|StorableVector.Lazy a]], <hask>(StateT s Maybe a, s)</hask> (like {{HackagePackage|id=stream-fusion}}) |
|- |
|- |
||
− | | 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> |
||
|} |
|} |
||
− | === MIDI-based === |
+ | === [[MIDI]]-based === |
{| border="1" |
{| border="1" |
||
Line 69: | Line 84: | ||
| 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 |
||
|- |
|- |
||
| [[Haskore]] |
| [[Haskore]] |
||
| Uses midi library |
| Uses midi library |
||
+ | |- |
||
+ | | [[ALSA|alsa-seq]] |
||
+ | | Custom midi structures |
||
|- |
|- |
||
| YampaSynth |
| YampaSynth |
||
Line 89: | Line 107: | ||
! Sound file format |
! Sound file format |
||
|- |
|- |
||
− | | hCsound |
+ | | [[CSound|hCsound]] |
| <hask>CsoundPtr</hask> |
| <hask>CsoundPtr</hask> |
||
|- |
|- |
||
Line 95: | Line 113: | ||
| <hask>OrcExp</hask> |
| <hask>OrcExp</hask> |
||
|- |
|- |
||
− | | hsc3 |
+ | | [[SuperCollider|hsc3]] |
| <hask>UGen</hask> |
| <hask>UGen</hask> |
||
|} |
|} |
Latest revision as of 23:01, 29 April 2014
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]]
|
Sox | Lists, Storable Vector, whatever you have a hPut and hGetContents function for.
|
libsox | Storable Vector |
riff | Data.ByteString.Lazy
|
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) (like stream-fusion)
|
jack | Operates via mapping functionsmainMono :: (CFloat -> IO CFloat) -> IO () mainStereo :: ((CFloat, CFloat) -> IO (CFloat, CFloat)) -> IO () , StorableArray
|
alsa-pcm | (SampleFrame a) => Ptr a
|
Hommage | [a]
|
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 |
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 |