From af9a0befbd7f07111d2323fc102752a164a5641b Mon Sep 17 00:00:00 2001 From: mii443 Date: Wed, 14 Feb 2024 18:34:33 +0900 Subject: [PATCH] virtual device input output --- src/device/virtual_device.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/device/virtual_device.rs b/src/device/virtual_device.rs index 33a80b0..07bfd91 100644 --- a/src/device/virtual_device.rs +++ b/src/device/virtual_device.rs @@ -32,4 +32,35 @@ impl VirtualDevice { self.output_index.push(self.get_min_index()); self.output_index.len() - 1 } + + pub fn take_output(&mut self, index: usize, channel: u8, take_size: usize) -> Option> { + let mut buffer = Vec::with_capacity(take_size); + let start = self.output_index[index]; + let end = start + take_size; + + if end > self.output_buffer[channel as usize].len() { + return None; + } + + for i in start..end { + buffer.push(self.output_buffer[channel as usize][i]); + } + self.output_index[index] = end; + + let min = self.get_min_index(); + if min != 0 { + for i in 0..self.channels as usize { + self.output_buffer[i].drain(0..min); + } + for i in 0..self.output_index.len() { + self.output_index[i] -= min; + } + } + + Some(buffer) + } + + pub fn write_input(&mut self, channel: u8, buffer: Vec) { + self.output_buffer[channel as usize].extend(buffer); + } } \ No newline at end of file