interstice_sdk_core/host_calls/
audio.rs1use crate::host_calls::{host_call, unpack};
2use interstice_abi::{AudioCall, AudioResponse, AudioStreamConfig, HostCall};
3
4pub fn open_output_stream(config: AudioStreamConfig) -> Result<u64, String> {
5 let pack = host_call(HostCall::Audio(AudioCall::OpenOutputStream(config)));
6 let response: AudioResponse = unpack(pack);
7 match response {
8 AudioResponse::StreamOpened { stream_id } => Ok(stream_id),
9 AudioResponse::Err(err) => Err(err),
10 other => Err(format!("Unexpected audio response: {:?}", other)),
11 }
12}
13
14pub fn open_input_stream(config: AudioStreamConfig) -> Result<u64, String> {
15 let pack = host_call(HostCall::Audio(AudioCall::OpenInputStream(config)));
16 let response: AudioResponse = unpack(pack);
17 match response {
18 AudioResponse::StreamOpened { stream_id } => Ok(stream_id),
19 AudioResponse::Err(err) => Err(err),
20 other => Err(format!("Unexpected audio response: {:?}", other)),
21 }
22}
23
24pub fn close_stream(stream_id: u64) -> Result<(), String> {
25 let pack = host_call(HostCall::Audio(AudioCall::CloseStream { stream_id }));
26 let response: AudioResponse = unpack(pack);
27 match response {
28 AudioResponse::Ok => Ok(()),
29 AudioResponse::Err(err) => Err(err),
30 other => Err(format!("Unexpected audio response: {:?}", other)),
31 }
32}
33
34pub fn write_frames_f32_planar(
35 stream_id: u64,
36 frames: u32,
37 channels: u16,
38 data: Vec<Vec<f32>>,
39) -> Result<(), String> {
40 let pack = host_call(HostCall::Audio(AudioCall::WriteFramesF32Planar {
41 stream_id,
42 frames,
43 channels,
44 data,
45 }));
46 let response: AudioResponse = unpack(pack);
47 match response {
48 AudioResponse::Ok => Ok(()),
49 AudioResponse::Err(err) => Err(err),
50 other => Err(format!("Unexpected audio response: {:?}", other)),
51 }
52}
53
54pub struct Audio;
55
56impl Audio {
57 pub fn open_output_stream(&self, config: AudioStreamConfig) -> Result<u64, String> {
58 open_output_stream(config)
59 }
60
61 pub fn close_stream(&self, stream_id: u64) -> Result<(), String> {
62 close_stream(stream_id)
63 }
64
65 pub fn open_input_stream(&self, config: AudioStreamConfig) -> Result<u64, String> {
66 open_input_stream(config)
67 }
68
69 pub fn write_frames_f32_planar(
70 &self,
71 stream_id: u64,
72 frames: u32,
73 channels: u16,
74 data: Vec<Vec<f32>>,
75 ) -> Result<(), String> {
76 write_frames_f32_planar(stream_id, frames, channels, data)
77 }
78}