public VoipCodecSpeex(BandMode bandMode, int sampleRate, string description, VoipCodecMode mode = VoipCodecMode.Both) { _bandMode = bandMode; _recordingFormat = new WaveFormat(sampleRate, 16, 1); _description = description; if (mode.HasFlag(VoipCodecMode.Decode)) _decoder = new SpeexDecoder(bandMode); if (mode.HasFlag(VoipCodecMode.Encode)) { _encoder = new SpeexEncoder(bandMode); _outputBufferTemp = new byte[_recordingFormat.AverageBytesPerSecond]; _encoderInputBuffer = new WaveBuffer(_recordingFormat.AverageBytesPerSecond); // more than enough } }
public VoipCodecOpus(int sampleRate, int bitrate, string description, VoipCodecMode mode = VoipCodecMode.Both) { _bitrate = bitrate; _segmentLength = sampleRate / 25;// 2 bytes per sample, 20ms per segment _recordingFormat = new WaveFormat(sampleRate, 16, 1); _description = description; if (mode.HasFlag(VoipCodecMode.Decode)) _decoder = OpusDecoder.Create(sampleRate, 1); if (mode.HasFlag(VoipCodecMode.Encode)) { _encoder = OpusEncoder.Create(sampleRate, 1, OpusAPI.Application.Voip); // 16kHz sample rate is 32kB/s raw. // Compressed bitrates: // 32768 is 4kB/s // 24800 is 3kB/s (3100B/s, same as Speex 16kHz) // 8192 is 1kB/s _encoder.Bitrate = bitrate; _encoderInputBuffer = new byte[_recordingFormat.AverageBytesPerSecond]; // more than enough } }