stdout.rs 745 B

123456789101112131415161718192021222324252627282930313233
  1. use super::{Open, Sink};
  2. use std::io::{self, Write};
  3. use std::slice;
  4. use std::mem;
  5. pub struct StdoutSink;//Option<PCM>, String);
  6. impl Open for StdoutSink {
  7. fn open(_: Option<&str>) -> StdoutSink {
  8. StdoutSink
  9. }
  10. }
  11. impl Sink for StdoutSink {
  12. fn start(&mut self) -> io::Result<()> {
  13. Ok(())
  14. }
  15. fn stop(&mut self) -> io::Result<()> {
  16. Ok(())
  17. }
  18. fn write(&mut self, data: &[i16]) -> io::Result<()> {
  19. // http://stackoverflow.com/questions/30838358/writing-vecu16-to-a-file
  20. let slice_u8: &[u8] = unsafe { slice::from_raw_parts(data.as_ptr() as *const u8, data.len() * mem::size_of::<i16>()) };
  21. try!(io::stdout().write_all(slice_u8));
  22. try!(io::stdout().flush());
  23. Ok(())
  24. }
  25. }