1#![cfg_attr(not(feature = "std"), no_std)]
2
3extern crate alloc;
4
5use alloc::vec::Vec;
6use decoder::SeaDecoder;
7use encoder::{EncoderSettings, SeaEncoder};
8
9mod codec;
10mod cursor;
11pub mod decoder;
12pub mod encoder;
13pub mod resample;
14#[cfg(all(target_arch = "wasm32", feature = "wasm-api"))]
15pub mod wasm_api;
16
17#[cfg(feature = "c-api")]
18pub mod c_api;
19
20pub fn sea_encode(
21 input_samples: &[i16],
22 sample_rate: u32,
23 channels: u32,
24 settings: EncoderSettings,
25) -> Vec<u8> {
26 let mut sea_encoded = Vec::<u8>::with_capacity(input_samples.len());
27 let mut sea_encoder = SeaEncoder::from_slice(
28 channels as u8,
29 sample_rate,
30 Some(input_samples.len() as u32 / channels),
31 settings,
32 input_samples,
33 )
34 .unwrap();
35
36 while sea_encoder.encode_frame(&mut sea_encoded).unwrap() {}
37 sea_encoder.finalize().unwrap();
38
39 sea_encoded
40}
41
42pub struct SeaDecodeInfo {
43 pub samples: Vec<i16>,
44 pub sample_rate: u32,
45 pub channels: u32,
46}
47
48pub fn sea_decode(encoded: &[u8]) -> SeaDecodeInfo {
49 let mut sea_decoded = Vec::<i16>::with_capacity(encoded.len() * 8);
50
51 let mut sea_decoder = SeaDecoder::from_slice(encoded).unwrap();
52
53 while sea_decoder.decode_frame(&mut sea_decoded).unwrap() {}
54
55 let header = sea_decoder.get_header();
56
57 SeaDecodeInfo {
58 samples: sea_decoded,
59 sample_rate: header.sample_rate,
60 channels: header.channels as u32,
61 }
62}