Audio and MIDI library for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

65 lines
2.0 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NAudio.Wave;
using NSpeex;
namespace NAudioDemo.NetworkChatDemo
{
class SpeexChatCodec : INetworkChatCodec
{
private WaveFormat recordingFormat;
private SpeexDecoder decoder;
private SpeexEncoder encoder;
public SpeexChatCodec()
{
this.decoder = new SpeexDecoder(BandMode.Narrow);
this.encoder = new SpeexEncoder(BandMode.Narrow);
this.recordingFormat = new WaveFormat(8000, 16, 1);
}
public string Name
{
get { return "Speex Narrow Band"; }
}
public int BitsPerSecond
{
// don't know yet
get { return 8000; }
}
public WaveFormat RecordFormat
{
get { return recordingFormat; }
}
public byte[] Encode(byte[] data, int offset, int length)
{
byte[] outputBufferTemp = new byte[length]; // easily big enough
WaveBuffer wb = new WaveBuffer(data);
int bytesWritten = encoder.Encode(wb.ShortBuffer, offset / 2, length / 2, outputBufferTemp, 0, length);
byte[] encoded = new byte[bytesWritten];
Array.Copy(outputBufferTemp, 0, encoded, 0, bytesWritten);
return encoded;
}
public byte[] Decode(byte[] data)
{
byte[] outputBufferTemp = new byte[data.Length * 16]; // easily big enough
WaveBuffer wb = new WaveBuffer(outputBufferTemp);
int samplesWritten = decoder.Decode(data, 0, data.Length, wb.ShortBuffer, 0, false);
int bytesWritten = samplesWritten * 2;
byte[] decoded = new byte[bytesWritten];
Array.Copy(outputBufferTemp, 0, decoded, 0, bytesWritten);
return decoded;
}
public void Dispose()
{
// nothing to do
}
}
}