wave: Work with WAVE and RF64 files

[ audio, bsd3, codec, library ] [ Propose Tags ]

Work with WAVE and RF64 files.


[Skip to Readme]

Modules

[Index]

Flags

Manual Flags

NameDescriptionDefault
dev

Turn on development settings.

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.2.0, 0.2.1
Change log CHANGELOG.md
Dependencies base (>=4.7 && <5.0), bytestring (>=0.2 && <0.11), cereal (>=0.3 && <0.6), containers (>=0.5 && <0.6), data-default-class, transformers (>=0.4 && <0.6) [details]
License BSD-3-Clause
Author Mark Karpov <markkarpov@openmailbox.org>
Maintainer Mark Karpov <markkarpov@openmailbox.org>
Category Codec, Audio
Home page https://github.com/mrkkrp/wave
Bug tracker https://github.com/mrkkrp/wave/issues
Source repo head: git clone https://github.com/mrkkrp/wave.git
Uploaded by mrkkrp at 2016-12-27T22:37:34Z
Distributions LTSHaskell:0.2.1, NixOS:0.2.1, Stackage:0.2.1
Reverse Dependencies 3 direct, 2 indirect [details]
Downloads 5510 total (50 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2016-12-28 [all 1 reports]

Readme for wave-0.1.2

[back to package description]

Wave

License BSD3 Hackage Stackage Nightly Stackage LTS Build Status Coverage Status

This module provides a safe interface that allows to manipulate WAVE files in their “classic” form as well as files in the RF64 format. RF64 adds the ability to store files larger than 4 Gb.

What

The main feature of the API is that it does not allow the user to duplicate information and introduce errors in that way. For example, block align may be calculated from other parameters of audio stream, thus we do not store it in the Wave record and do not allow user to specify it. We provide, however, a way to calculate it given Wave record, see waveBlockAlign. The same is done for channels. Channel mask is a more general means of providing information about number of channels and corresponding speaker positions, thus we only store channel mask in user-friendly form, but number of channels can be derived from that information.

Another feature of the library is that it does not dictate how to read/write audio data. What we give is the information about audio data and offset in file where it begins. To write data user may use a callback that receives a Handle as argument. Size of data block is deduced automatically for you. Exclusion of audio data from consideration makes the library pretty fast and open to different ways to handle audio data itself, including using foreign code (such as C).

The library provides control over all parts of WAVE file that may be of interest. In particular, it even allows to write arbitrary chunks between fmt and data chunks, although it's rarely useful (and may actually confuse buggy applications that don't know how to skip unknown chunks).

Please read the Haddocks for a more detailed documentation, the usage should be trivial.

Why

I needed a way to work with WAVE files to finish my flac package and for analyzing input data in WAVE format in general. The existing solutions (WAVE, wavy) are not maintained and poorly designed. It suffices to say that they read samples of audio stream and put them into a linked list, like [[Sample]] (the inner linked list is to store multi-channel data, yeah).

This wave package is the first serious solution in Haskell that allows to work with WAVE data safely and efficiently.

Limitations

The library only supports PCM format with samples represented as integers and floating point values. Support for other formats will be added on request, please contact me at https://github.com/mrkkrp/wave/issues.

Contribution

Issues, bugs, and questions may be reported in the GitHub issue tracker for this project.

Pull requests are also welcome and will be reviewed quickly.

License

Copyright © 2016 Mark Karpov

Distributed under BSD 3 clause license.