|
@@ -67,7 +67,11 @@ impl Sink for PulseAudioSink {
|
|
|
|
|
|
fn write(&mut self, data: &[i16]) -> io::Result<()> {
|
|
|
if let Some(s) = &self.s {
|
|
|
- let d: &[u8] = unsafe { std::mem::transmute(data) };
|
|
|
+ // SAFETY: An i16 consists of two bytes, so that the given slice can be interpreted
|
|
|
+ // as a byte array of double length. Each byte pointer is validly aligned, and so
|
|
|
+ // is the newly created slice.
|
|
|
+ let d: &[u8] =
|
|
|
+ unsafe { std::slice::from_raw_parts(data.as_ptr() as *const u8, data.len() * 2) };
|
|
|
|
|
|
match s.write(d) {
|
|
|
Ok(_) => Ok(()),
|