(caf7e6a2e) Replaced Concentus NuGet package with csproj (ensures correct System.Runtime references)
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
Hi there, welcome to the Concentus package. You're about to ask me for sample code, so I'll get straight to it:
|
||||
|
||||
If you're already using something like P/Opus then your code probably looks like this:
|
||||
|
||||
[DllImport(OPUS_TARGET_DLL, CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern IntPtr opus_encoder_create(int Fs, int channels, int application, out IntPtr error);
|
||||
|
||||
[DllImport(OPUS_TARGET_DLL, CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern int opus_encode(IntPtr st, byte[] pcm, int frame_size, IntPtr data, int max_data_bytes);
|
||||
|
||||
// Initialize
|
||||
IntPtr error;
|
||||
IntPtr _encoder = opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, out error);
|
||||
opus_encoder_ctl(_encoder, OPUS_SET_BITRATE_REQUEST, 12000);
|
||||
|
||||
// Encoding loop
|
||||
byte[] inputAudioSamplesInterleaved; // 16-bit pcm data interleaved into a byte array
|
||||
byte[] outputBuffer[1000];
|
||||
int frameSize = 960;
|
||||
|
||||
unsafe
|
||||
{
|
||||
fixed (byte* benc = outputBuffer)
|
||||
{
|
||||
IntPtr encodedPtr = new IntPtr(benc);
|
||||
int thisPacketSizeOrSometimesAnErrorCode = opus_encode(_encoder, inputAudioSamplesInterleaved, frameSize, encodedPtr, outputBuffer.Length);
|
||||
}
|
||||
}
|
||||
|
||||
Here is what you can replace it with:
|
||||
|
||||
// Initialize
|
||||
OpusEncoder encoder = OpusEncoder.Create(48000, 1, OpusApplication.OPUS_APPLICATION_AUDIO);
|
||||
encoder.Bitrate = 12000;
|
||||
|
||||
// Encoding loop
|
||||
short[] inputAudioSamples
|
||||
byte[] outputBuffer[1000];
|
||||
int frameSize = 960;
|
||||
|
||||
int thisPacketSize = encoder.Encode(inputAudioSamples, 0, frameSize, outputBuffer, 0, outputBuffer.Length); // this throws OpusException on a failure, rather than returning a negative number
|
||||
|
||||
And here is the decoder path:
|
||||
|
||||
OpusDecoder decoder = OpusDecoder.Create(48000, 1);
|
||||
|
||||
// Decoding loop
|
||||
byte[] compressedPacket;
|
||||
int frameSize = 960; // must be same as framesize used in input, you can use OpusPacketInfo.GetNumSamples() to determine this dynamically
|
||||
short[] outputBuffer = new short[frameSize];
|
||||
|
||||
int thisFrameSize = _decoder.Decode(compressedPacket, 0, compressedPacket.Length, outputBuffer, 0, frameSize, false);
|
||||
Reference in New Issue
Block a user