mirror of
https://github.com/librespot-org/librespot.git
synced 2025-10-04 18:29:45 +02:00
Forgot to add some files in previous commit.
This commit is contained in:
parent
9274a6bfb3
commit
0973469120
2 changed files with 42 additions and 33 deletions
|
@ -1,4 +1,3 @@
|
||||||
use portaudio;
|
|
||||||
use std::io;
|
use std::io;
|
||||||
|
|
||||||
pub trait Sink {
|
pub trait Sink {
|
||||||
|
@ -7,9 +6,13 @@ pub trait Sink {
|
||||||
fn write(&self, data: &[i16]) -> io::Result<()>;
|
fn write(&self, data: &[i16]) -> io::Result<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct PortAudioSink<'a>(portaudio::stream::Stream<'a, i16, i16>);
|
mod portaudio_sink {
|
||||||
|
use audio_sink::Sink;
|
||||||
|
use std::io;
|
||||||
|
use portaudio;
|
||||||
|
pub struct PortAudioSink<'a>(portaudio::stream::Stream<'a, i16, i16>);
|
||||||
|
|
||||||
impl <'a> PortAudioSink<'a> {
|
impl <'a> PortAudioSink<'a> {
|
||||||
pub fn open() -> PortAudioSink<'a> {
|
pub fn open() -> PortAudioSink<'a> {
|
||||||
portaudio::initialize().unwrap();
|
portaudio::initialize().unwrap();
|
||||||
|
|
||||||
|
@ -21,9 +24,9 @@ impl <'a> PortAudioSink<'a> {
|
||||||
|
|
||||||
PortAudioSink(stream)
|
PortAudioSink(stream)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <'a> Sink for PortAudioSink<'a> {
|
impl <'a> Sink for PortAudioSink<'a> {
|
||||||
fn start(&self) -> io::Result<()> {
|
fn start(&self) -> io::Result<()> {
|
||||||
self.0.start().unwrap();
|
self.0.start().unwrap();
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -33,14 +36,24 @@ impl <'a> Sink for PortAudioSink<'a> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
fn write(&self, data: &[i16]) -> io::Result<()> {
|
fn write(&self, data: &[i16]) -> io::Result<()> {
|
||||||
self.0.write(&data).unwrap();
|
match self.0.write(&data) {
|
||||||
|
Ok(_) => (),
|
||||||
|
Err(portaudio::PaError::OutputUnderflowed) => eprintln!("Underflow"),
|
||||||
|
Err(e) => panic!("PA Error {}", e),
|
||||||
|
};
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <'a> Drop for PortAudioSink<'a> {
|
impl <'a> Drop for PortAudioSink<'a> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
portaudio::terminate().unwrap();
|
portaudio::terminate().unwrap();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type DefaultSink = portaudio_sink::PortAudioSink<'static>;
|
||||||
|
|
||||||
|
|
|
@ -107,14 +107,10 @@ fn main() {
|
||||||
let reusable_credentials = session.login(credentials).unwrap();
|
let reusable_credentials = session.login(credentials).unwrap();
|
||||||
reusable_credentials.save_to_file(credentials_path);
|
reusable_credentials.save_to_file(credentials_path);
|
||||||
|
|
||||||
portaudio::initialize().unwrap();
|
|
||||||
|
|
||||||
let player = Player::new(session.clone(), || DefaultSink::open());
|
let player = Player::new(session.clone(), || DefaultSink::open());
|
||||||
let spirc = SpircManager::new(session.clone(), player);
|
let spirc = SpircManager::new(session.clone(), player);
|
||||||
thread::spawn(move || spirc.run());
|
thread::spawn(move || spirc.run());
|
||||||
|
|
||||||
portaudio::terminate().unwrap();
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
session.poll();
|
session.poll();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue