martindevans / MumbleSharp

An implementation of the mumble voice chat protocol in C#
http://martindevans.me
MIT License
93 stars 28 forks source link

Audio Source other than Mic results in distorted audio #57

Open pboyd04 opened 4 years ago

pboyd04 commented 4 years ago

I'm trying to take a PCM stream from another source and pipe it to Mumble. However, I get weird sort of sped up audio when I do this despite the fact that the audio is in 48kHz format. I've managed to get sample code pretty small:

WaveFileReader wfr = new WaveFileReader("c:\\temp\\mumble.wav");
byte[] data = new byte[wfr.Length];
wfr.Read(data, 0, data.Length);
protocol.LocalUser.Channel.SendVoice(new ArraySegment<byte>(data, 0, data.Length));
wfr.Close();

The source file is here: http://pboyd.org/mumble.wav What it sounds like when I get it out of another mumble client is this: http://pboyd.org/result.wav

According to the data in the wav file it's PCM, 16-bit samples, 48000 Hz, and 1 channel which seems to match all the defaults in the Constants file. So what am I doing wrong?

martindevans commented 4 years ago

I'm not sure how mumble will handle trying to send a large amount of audio in a single packet - usually it's sent in small packets (960 samples at a time, or 20ms). It might be that causing the issue.

pboyd04 commented 4 years ago

If I try dividing it up into 20ms segments it doesn't help. Any other ideas?

martindevans commented 4 years ago

Possibly the file is in the wrong endianness. I'm not sure what byte order WaveFileReader provides or what Mumble needs, but it should be easy enough to just try swapping the 2 bytes in each 16 bit sample to see if it makes a difference.