我已經使用NAudio在C#中編寫了一種方法,可以成功輸出2聲道聲音,但在6聲道聲音時失敗。NAudio的六聲道輸出? (或其他支持它的.NET庫的建議?)
當使用waveout的,我得到「MmException是未處理的:無效參數調用waveOutOpen」
這裏是我的代碼:
public class AudioOutput {
private WaveOut latestAudioOut = null;
private WaveMemoryStream latestMemoryStream = null;
public void PlayAudio (byte[][] buffers, WaveFormat format) {
if (latestAudioOut != null) {
latestAudioOut.Stop();
latestAudioOut.Dispose();
}
latestAudioOut = new WaveOut();
if (latestMemoryStream != null) {
latestMemoryStream.Dispose();
}
int longestChannelLength = 0;
foreach (byte[] b in buffers) {
if (b != null) if (b.Length > longestChannelLength) longestChannelLength = b.Length;
}
byte[][] finalisedbuffers = new byte[buffers.Length][];
for (int i = 0; i < buffers.Length; i ++) {
finalisedbuffers[i] = new byte[longestChannelLength];
if (buffers[i] != null) buffers[i].CopyTo(finalisedbuffers[i], 0);
}
buffers = finalisedbuffers;
byte[] interLeavedBuffer = new byte[longestChannelLength * buffers.Length];
int bytesPerSample = format.BitsPerSample/8;
int frameLength = buffers.Length * bytesPerSample;
int numberOfFrames = longestChannelLength/bytesPerSample;
int position = 0;
int frameStart = 0;
for (int f = 0; f < numberOfFrames; f ++) {
for (int c = 0; c < buffers.Length; C++) {
for (int b = 0; b < bytesPerSample; b ++) {
interLeavedBuffer[position] = buffers[c][frameStart + b];
position ++;
}
}
frameStart += bytesPerSample;
}
MemoryStream bufferStream = new MemoryStream(interLeavedBuffer);
latestMemoryStream = new WaveMemoryStream(bufferStream, format);
latestAudioOut.Init(latestMemoryStream);
latestAudioOut.Play();
}
我嘗試用WaveFormatExtensible替換WaveFormat。它似乎已經解決了,謝謝! –