Files
Liberium-1.8-Source-Code/Server.Helper/G722ChatCodec.cs
T
2026-08-27 11:21:58 -06:00

62 lines
1.4 KiB
C#

using System;
using NAudio.Codecs;
using NAudio.Wave;
namespace Server.Helper;
public class G722ChatCodec
{
private readonly int bitrate;
private readonly G722CodecState encoderState;
private readonly G722CodecState decoderState;
private readonly G722Codec codec;
public string Name => "G.722 16kHz";
public int BitsPerSecond => bitrate;
public WaveFormat RecordFormat { get; }
public bool IsAvailable => true;
public G722ChatCodec()
{
bitrate = 64000;
encoderState = new G722CodecState(bitrate, G722Flags.None);
decoderState = new G722CodecState(bitrate, G722Flags.None);
codec = new G722Codec();
RecordFormat = new WaveFormat(16000, 1);
}
public byte[] Encode(byte[] data, int offset, int length)
{
if (offset != 0)
{
throw new ArgumentException("G722 does not yet support non-zero offsets");
}
WaveBuffer waveBuffer = new WaveBuffer(data);
byte[] array = new byte[length / 4];
codec.Encode(encoderState, array, waveBuffer.ShortBuffer, length / 2);
return array;
}
public byte[] Decode(byte[] data, int offset, int length)
{
if (offset != 0)
{
throw new ArgumentException("G722 does not yet support non-zero offsets");
}
byte[] array = new byte[length * 4];
WaveBuffer waveBuffer = new WaveBuffer(array);
codec.Decode(decoderState, waveBuffer.ShortBuffer, data, length);
return array;
}
public void Dispose()
{
}
}