0
こんにちは、システムのマイクオーディオを外部のサウンドカードスピーカーと外部サウンドカードのマイクオーディオをシステムスピーカーにマッピングしようとしています。コードを使用してnaudioを使用してスピーカーとマイクのマッピングを遅らせるC#
public void MapForManualCall()
{
try
{
if (db.getResultOnQuery("SELECT [Value] FROM [dbo].[SystemProperties] where property='RecordingEnabled'").Rows[0][0].ToString().Equals("YES"))
{
SystemMic = new NAudio.Wave.WaveInEvent();
SystemMic.DeviceNumber = 0;
SystemMic.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(SystemMic.DeviceNumber).Channels);
SoundcardMic = new NAudio.Wave.WaveInEvent();
SoundcardMic.DeviceNumber = 1;
SoundcardMic.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(SoundcardMic.DeviceNumber).Channels);
//NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream);
// used to set listen property of mic on
var waveOutReceiver = new NAudio.Wave.WaveOut();
waveOutReceiver.DeviceNumber = 0;
// used to wavout caller voice on receiver speaker
NAudio.Wave.WaveInProvider waveInProviderCaller = new NAudio.Wave.WaveInProvider(SystemMic);
waveOutReceiver.Init(waveInProviderCaller);
waveOutReceiver.Play();
var waveOutCaller = new NAudio.Wave.WaveOut();
waveOutCaller.DeviceNumber = 1;
// used to wavout receiver voice on caller speaker
NAudio.Wave.WaveInProvider waveInProviderReceiver = new NAudio.Wave.WaveInProvider(SoundcardMic);
waveOutCaller.Init(waveInProviderReceiver);
waveOutCaller.Play();
//sourceStream.StartRecording();
//waveOut.Play();
// SoundcardMic.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(waveIn_DataAvailable1);
// writer1 = new NAudio.Wave.WaveFileWriter(outputFilenameReceiver, SoundcardMic.WaveFormat);
SoundcardMic.StartRecording();
//SystemMic.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(waveIn_DataAvailable);
//writer = new NAudio.Wave.WaveFileWriter(outputFilenameCaller, SystemMic.WaveFormat);
SystemMic.StartRecording();
// MapSpeakerNMic();
}
}
catch (Exception ex)
{
MessageBox.Show("Please Check Headphone and Device Cable Connected Properly!");
}
}
上記のコードは完璧ですが、マッピングの間に3-4秒の遅延があります。私はWindows 7のリッスン機能を使用して上記の作業をしようとしているとき、それは完璧に動作します。私によれば、それは書き込みバッファを読むことの問題になる可能性があります。それを行う方法がわからない...
古代のAPIを使用しています。 WasapiCapture/WasapiOut(Vista以上)を使用してみてください。遅延を避けるため、バッファーサイズを小さく設定してください。 – apocalypse
低いバッファサイズを設定する方法。 –
In WasapiOutコンストラクタ。これは「レイテンシ」と呼ばれています(私は思っています)。 – apocalypse