私は4入力と4出力のasioドライバをサポートするUSBオーディオボードを持っています。 私は同時にデータを送受信したいです。 しかし、現在は一度に1つのチャンネルにしかデータを送受信できません。私はNaioのC#ライブラリからasioOutクラスに設定する方法を理解できません。Naudio Asio複数のチャンネルで同時に録音と再生を行います
各チャネルに1つのAudioAvailableイベントを持つことが可能でしょうか? waveIn/waveOutクラスと似ています。 どうすればこの問題を解決できますか?以下のための入力バッファにアクセスする方法はあり
public void OnAsioOutAudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
if (speakersOn && e.InputBuffers.Length != 0 && !monitorRequest)
{
byte[] buf = new byte[e.SamplesPerBuffer*4];
for (int i = 0; i < e.InputBuffers.Length; i++)
{
Marshal.Copy(e.InputBuffers[i], buf, 0, e.SamplesPerBuffer*4);
}
e.WrittenToOutputBuffers = true;
udp4VoiceSend.Send(buf, buf.Length);
}
}
:私は別のマルチキャストアドレスに、各入力チャンネルのための入力ストリームを送信する必要がAudioAvailableイベントの
int sampleRate = 44100;
int channels = 4;
buffWaveProvider = new BufferedWaveProvider(new NAudio.Wave.WaveFormat(sampleRate, 32, channels));
asioOut = new AsioOut(radioForm.driverName);
asioOut.ChannelOffset = OUTdevID;
asioOut.InputChannelOffset = INdevId;
asioOut.AudioAvailable += OnAsioOutAudioAvailable;
asioOut.InitRecordAndPlayback(buffWaveProvider, channels, sampleRate);
asioOut.Play();
:ここ
は私のコードです各チャンネル?出力用にnaudioソースコードを確認しました。出力チャンネル数をwaveProvider.WaveFormat.Channelsに設定できます。ですから、InitRecordAndPlaybackメソッドを呼び出すときに、IWaveProviderバッファには4つのチャネルが必要です。
この件に関するお問い合わせはまだありません。私はそれらをすべて試しました。
NAudio Asio Record and Playback
How to record and playback with NAudio using AsioOut
ありがとう!
UPDATE:
私はNaudioデモプロジェクト、ASIOレコーディングパネルをチェックし、私は一度に一つのチャンネルを聞くことができると思われました:
naudioドライバクラスが4を作成し、入力バッファーと4つの出力バッファーは期待通りにアクセスできません。
asioOutオブジェクトが1チャンネルをリッスンし、チャンネルを変更したい場合は、オブジェクトが配置されます。
ライブラリの制限やドライバの制限ですか?
サンプルをasioバッファに追加すると、データを出力チャネルに直接送信できますか?
if (Main.buffWaveProvider != null)
Main.buffWaveProvider.AddSamples(data, 0, dataLen);
ありがとう!!
HI、Mark。あなたの例をありがとう。出力チャンネルにサンプルを追加することは可能ですか?たとえば、track1をoutput1に、track2をoutput2に一度に1回送信したいとします。また、buffWaveProvider.AddSamples(data、0、dataLen)では、すべての出力に対してサンプルを追加できます。私はasioOut.ChannelOffsetを目的のチャンネルに設定しようとしましたが、バッファにサンプルを追加しましたが、このハックを動作させていないようです。それが可能だ? –
はい、これはサンプルの動作です。入力からの読み取り、出力への書き込み –
ありがとう、ありがとう。したがって、音声ストリームが入力からではなくネットワークから来ている場合は、どのように管理できますか?より具体的に言えば、ディスパッチャがネットワーク上で音声を送信し、ストリーム送信チャネルを指定する音声アプリケーションがあります。私はイベントudp4VoiceRecv_OnNewDataRecv(byte [] data、int dataLen)を持っています。だから私はストリームを特定の出力にルーティングする必要があります。ありがとうございました! –