#wave #pcm #riff #sample

riff-wave

Simple methods for reading and writing PCM wave files

7 releases

Uses old Rust 2015

0.1.3 Jun 22, 2022
0.1.2 May 26, 2016
0.0.3 May 25, 2016

#1272 in Parser implementations

Download history 166/week @ 2024-06-19 120/week @ 2024-06-26 18/week @ 2024-07-03 174/week @ 2024-07-10 222/week @ 2024-07-17 158/week @ 2024-07-24 189/week @ 2024-07-31 213/week @ 2024-08-07 151/week @ 2024-08-14 147/week @ 2024-08-21 154/week @ 2024-08-28 136/week @ 2024-09-04 210/week @ 2024-09-11 146/week @ 2024-09-18 145/week @ 2024-09-25 173/week @ 2024-10-02

690 downloads per month
Used in 74 crates (3 directly)

Apache-2.0

68KB
1.5K SLoC

riff-wave

Simple methods for reading and writing PCM wave files.

Examples

Reading a wave file

extern crate riff_wave;

use std::fs::File;
use std::io::BufReader;

use riff_wave::{ReadResult, WaveReader};

fn read_wave() -> ReadResult<()> {
	let file = File::open("examples/hello.wav")?;
	let reader = BufReader::new(file);
	let mut wave_reader = WaveReader::new(reader)?;

	loop {
		wave_reader.read_sample_i16()?;
	}	
}

Writing a wave file

extern crate riff_wave;

use std::f32::consts::PI;
use std::fs::File;
use std::io::BufWriter;

use riff_wave::{WaveWriter, WriteResult};

fn write_wave() -> WriteResult<()> {		
	const SAMPLE_RATE: u32 = 44100;
	const FREQUENCY: f32 = 2.0 * PI * 440.0; // radian per second

	let file = File::create("examples/hello.wav")?;
	let writer = BufWriter::new(file);

	let mut wave_writer = WaveWriter::new(1, SAMPLE_RATE, 16, writer)?;

	for n in 0..SAMPLE_RATE {
		let phase = FREQUENCY * n as f32 / SAMPLE_RATE as f32;
		let sample = (phase.sin() * 0.8 * i16::MAX as f32) as i16;

		wave_writer.write_sample_i16(sample)?;
	}

	Ok(())
}

Documentation

Documentation is available via cargo doc or via this link.

Dependencies

~165KB