#file-format #audio-video #chunks #io #file-io #reading #wave

riff

This crate provides utilities for reading and writing RIFF formatted files

5 releases (3 stable)

2.0.0 Jun 15, 2023
1.0.1 Jul 29, 2020
1.0.0 Apr 26, 2020
0.1.1 Jul 3, 2018
0.1.0 Jul 3, 2018

#26 in Multimedia

Download history 61830/week @ 2024-11-18 51210/week @ 2024-11-25 70360/week @ 2024-12-02 89443/week @ 2024-12-09 105470/week @ 2024-12-16 21152/week @ 2024-12-23 44138/week @ 2024-12-30 118060/week @ 2025-01-06 149720/week @ 2025-01-13 149265/week @ 2025-01-20 196179/week @ 2025-01-27 190072/week @ 2025-02-03 222398/week @ 2025-02-10 125546/week @ 2025-02-17 110060/week @ 2025-02-24 432289/week @ 2025-03-03

899,613 downloads per month
Used in 52 crates (5 directly)

MIT license

12KB
217 lines

riff

Crate for doing IO on RIFF-formatted files

This crate provides utility methods for reading and writing formats such as Microsoft Wave, Audio Video Interleave or Downloadable Sounds.

Examples

Reading chunks:

let mut file = File::open("somefile.wav")?;
let chunk = riff::Chunk::read(&mut file, 0)?;

for child in chunk.iter(&mut file) {
  println!(child.id());
}

Writing chunks:

// Some ids to use while creating chunks
let smpl_id: ChunkId = ChunkId { value: [0x73, 0x6D, 0x70, 0x6C] };
let test_id: ChunkId = ChunkId { value: [0x74, 0x65, 0x73, 0x74] };
let tst1_id: ChunkId = ChunkId { value: [0x74, 0x73, 0x74, 0x31] };
let tst2_id: ChunkId = ChunkId { value: [0x74, 0x73, 0x74, 0x32] };

let str1 = "hey this is a test".as_bytes().to_vec();
let str2 = "hey this is another test".as_bytes().to_vec();
let str3 = "final test".as_bytes().to_vec();

let contents = ChunkContents::Children(
  riff::RIFF_ID,
  smpl_id,
  vec![
    ChunkContents::Children(
      riff::LIST_ID,
      tst1_id,
      vec![
        ChunkContents::Data(test_id, str1),
        ChunkContents::Data(test_id, str2)
      ]),
    ChunkContents::Children(
      riff::LIST_ID,
      tst2_id,
      vec![
        ChunkContents::Data(test_id, str3)
      ]
    )
  ]);

let mut file = File::create("somefile.riff")?;
contents.write(&mut file)?;

No runtime deps