我正在尝试使用Nspeex对录制的音频进行编码,然后通过互联网进行传输并在另一端进行解码.我正在Windows Phone 7/8中完成所有这些工作.要编码和解码我正在使用以下代码.但是在解码时我没有正确地恢复结果,我可以再次播放.任何人都可以为我提供在WP7/8录制的音频上运行的编码和解码代码:
private static Microphone mic = Microphone.Default;
private static byte[] EncodeSpeech(byte[] buf, int len)
{
BandMode mode = GetBandMode(mic.SampleRate);
SpeexEncoder encoder = new SpeexEncoder(mode);
// set encoding quality to lowest (which will generate the smallest size in the fastest time)
encoder.Quality = 1;
int inDataSize = len / 2;
// convert to short array
short[] data = new short[inDataSize];
int sampleIndex = 0;
for (int index = 0; index < len; index += 2, sampleIndex++)
{
data[sampleIndex] = …Run Code Online (Sandbox Code Playgroud) 我正在使用Speex对原始数据进行编码,但在对数据进行解码后,音频以更快的速度播放,因为它会让您听起来像花栗鼠.我正在使用NSpeex和Silverlight 4.
8kHz Sampling
编码功能:
JSpeexEnc encoder = new JSpeexEnc();
int rawDataSize = 0;
public byte[] EncodeAudio(byte[] rawData)
{
var encoder = new SpeexEncoder(BandMode.Narrow);
var inDataSize = rawData.Length / 2;
var inData = new short[inDataSize];
for (var index = 0; index < rawData.Length; index += 2)
{
inData[index / 2] = BitConverter.ToInt16(rawData, index);
}
inDataSize = inDataSize - inDataSize % encoder.FrameSize;
var encodedData = new byte[rawData.Length];
var encodedBytes = encoder.Encode(inData, 0, inDataSize, encodedData, 0, encodedData.Length);
byte[] encodedAudioData = …Run Code Online (Sandbox Code Playgroud)