我正在尝试转换由AudioGraph API捕获的32位PCM音频数据,以用于DSharpPlus。 opus编码器需要一个16位字节的数组,而Opus编码器的除数和内存访问冲突均引发了问题。
这是我的代码:
private unsafe void OnQuantumStarted(AudioGraph sender, object args)
{
try
{
lock (_inputFrameLock)
{
AudioFrame frame = CaptureFrameNode.GetFrame();
using (AudioBuffer audioBuffer = frame.LockBuffer(AudioBufferAccessMode.Read))
{
var buffer = Windows.Storage.Streams.Buffer.CreateCopyFromMemoryBuffer(audioBuffer);
buffer.Length = audioBuffer.Length;
if (buffer.Length > 0)
{
byte[] newBuffer = new byte[audioBuffer.Length / 2];
using (var dataReader = DataReader.FromBuffer(buffer))
{
dataReader.ByteOrder = ByteOrder.LittleEndian;
int pos = 0;
while (dataReader.UnconsumedBufferLength > 0)
{
var singleTmp = dataReader.ReadSingle();
var int16Tmp = (Int16)(singleTmp * Int16.MaxValue);
byte[] chunkBytes = BitConverter.GetBytes(int16Tmp);
newBuffer[pos++] = chunkBytes[0];
newBuffer[pos++] = chunkBytes[1];
//newBuffer[pos++] = chunkBytes[0];
//newBuffer[pos++] = chunkBytes[1];
}
}
if (newBuffer.Any(v => v != 0))
{
voiceTransmitStream.WriteAsync(newBuffer, 0, newBuffer.Length);
}
buffer = null;
}
}
}
} catch (Exception ex)
{
var a = ex;
}
}
我的转换做错了吗?