tmp.clear();
tmp.resize(src.len(), 0);
}
- device.queue(&tmp);
+ device.queue(tmp);
}
fn output_vol_u8(device: &AudioDevice, tmp: &mut Vec<i16>, src: &[u8], mute: bool, volume: u8) {
tmp.clear();
tmp.resize(src.len() / 2, 0);
}
- device.queue(&tmp);
+ device.queue(tmp);
}
impl<'a> Decoder<'a> {
match out_buf {
NABufferType::AudioI16(abuf) => {
if !self.mute && self.volume == 100 {
- device.queue(&abuf.get_data());
+ device.queue(abuf.get_data());
} else {
- output_vol_i16(device, self.buf, &abuf.get_data(), self.mute, self.volume);
+ output_vol_i16(device, self.buf, abuf.get_data(), self.mute, self.volume);
}
self.samplepos += abuf.get_length() as u64;
},
NABufferType::AudioPacked(abuf) => {
if !self.mute && self.volume == 100 {
- device.queue_bytes(&abuf.get_data());
+ device.queue_bytes(abuf.get_data());
} else {
- output_vol_u8(device, self.buf, &abuf.get_data(), self.mute, self.volume);
+ output_vol_u8(device, self.buf, abuf.get_data(), self.mute, self.volume);
}
self.samplepos += abuf.get_length() as u64;
},
}
let (dsupp, decoder) = dec.unwrap();
- let ainfo = ainfo.unwrap().get_properties().get_audio_info().unwrap();
- let arate = if ainfo.sample_rate > 0 { ainfo.sample_rate } else { 44100 };
+ let info = ainfo.unwrap();
+ let ainfo = info.get_properties().get_audio_info().unwrap();
+ let sbr_hack = info.get_name() == "aac" && ainfo.sample_rate < 32000;
+ let arate = if ainfo.sample_rate > 0 {
+ if !sbr_hack {
+ ainfo.sample_rate
+ } else {
+ ainfo.sample_rate * 2
+ }
+ } else { 44100 };
let ch = ainfo.channels;
println!("Playing {} [{}Hz {}ch]", name, arate, ch);
}
}
std::io::stdout().flush().unwrap();
- if device.size() < underfill_limit && !self.paused && refill_limit < (1 << 20) {
+ if device.size() < underfill_limit && !self.paused && (refill_limit < (1 << 20)) & !eof {
if full_ms > 5000 {
println!("underrun!");
}