#broadcast #multimedia #smpte

bwavfile

Rust Wave File Reader/Writer with Broadcast-WAV, MBWF and RF64 Support

2 stable releases

2.0.1 Jun 3, 2023
2.0.0 May 23, 2023
1.1.0 Sep 28, 2021
1.0.0 Jun 23, 2021
0.1.5 Nov 28, 2020

#144 in Audio

Download history 8/week @ 2024-01-22 10/week @ 2024-02-12 49/week @ 2024-02-19 41/week @ 2024-02-26 148/week @ 2024-03-04 111/week @ 2024-03-11 21/week @ 2024-03-18

323 downloads per month
Used in 2 crates (via ness_stretch_lib)

MIT license

1MB
2K SLoC

Crates.io Crates.io GitHub last commit GitHub Workflow Status

bwavfile

Wave File Reader/Writer library in Rust, with Broadcast-WAV, RF64 and production metadata support

Features

bwavfile provides a reader WaveReader and writer type WaveWriter for reading and creating new wave audio files.

WaveReader and WaveWriter support:

  • A unified interface for standard RIFF and RF64/BW64 64-bit Wave files.
  • When using WaveWriter, wave files are transparently upgraded from RIFF to RF64 when required.
  • Unpacked reading and writing of Integer PCM and IEEE float audio data formats.
  • A unified interface for standard WaveFormat and extended WaveFormatEx wave data format.

The library has extensive metadata support, with emphasis on film and video production metadata:

  • Broadcast-Wave metadata extension, including long description, originator, SMPTE UMID and coding history.
  • Reading and writing of embedded iXML and axml/ADM metadata.
  • Reading and writing of timed cues and and timed cue regions.
  • Multichannel, surround, and ambisonic audio data description including surround channel maps, ADM AudioTrackFormat, AudioChannelFormatRef and AudioPackRef data structures.

Feature Roadmap

Some features that may be included in the future include:

  • Broadcast-Wave levl waveform overview data reading and writing.
  • Sampler and Instrument metadata.
  • Performance improvements.

Use Examples

  • blits shows how to use WaveWriter to create a new file with BLITS alignment tones.
  • wave-inter uses WaveReader and WaveWriter to interleave several input Wave files into a single polyphonic Wave file.
  • wave-deinter uses WaveReader and WaveWriter to de-interleave an input Wave file into several monoarual Wave files.

Note on Testing

All of the media for the integration tests is committed to the respository in zipped form. Before you can run tests, you need to cd into the tests directory and run the create_test_media.sh script. Note that one of the test files (the RF64 test case) is over four gigs in size.

Dependencies

~3MB
~43K SLoC