如何从默认音频设备录制和播放音频
How to record and playback audio from default audio device
我似乎无法从默认音频设备录制音频,并在其他音频设备上播放..
我不想录音麦克风,但音频设备..
当我播放电影时,我可以通过耳机听到声音,我想将该声音复制到我选择的任何音频设备..
如果你有任何建议,它不一定与 NAudio..
据我所知,NAudio 不能这样做..
这是我此时用于任务的代码,但它只需要从我的麦克风输入:带有 NAudio 的代码片段..
void playSoundCopy(int dv0)
{
disposeWave0();// stop previous sounds before starting
var waveOut0 = new WaveOut();
waveOut0.DeviceNumber = dv0;
wave0 = waveOut0;
Defaultwave0 = new WaveIn();
Defaultwave0.DeviceNumber = (int)GetDefaultDevice(Defaultdevice.FriendlyName);
var waveinReader0 = new WaveInProvider(Defaultwave0);
wave0.Init(waveinReader0);
play0 = false;
Thread.Sleep(1000);
play0 = true;
t0 = new Thread(() => { timeline0(); });
t0.IsBackground = true;
t0.Start();
Defaultwave0.StartRecording();
wave0.Play();
}
真正的问题实际上是我无法从 WaveOut 设备录制,只能从 WaveIn..
工作结果:
void playSoundCopy(int dv0)
{
disposeWave0();// stop previous sounds before starting
var waveOut0 = new WaveOut();
waveOut0.DeviceNumber = dv0;
wave0 = waveOut0;
var format0 = Defaultdevice.AudioClient.MixFormat;
buffer0 = new BufferedWaveProvider(format0);
wave0.Init(buffer0);
capture = new WasapiLoopbackCapture(Defaultdevice);
capture.ShareMode = AudioClientShareMode.Shared;
capture.DataAvailable += CaptureOnDataAvailable;
play0 = false;
Thread.Sleep(1000);
play0 = true;
t0 = new Thread(() => { timeline0(); });
t0.IsBackground = true;
t0.Start();
capture.StartRecording();
wave0.Play();
}
void CaptureOnDataAvailable(object sender, WaveInEventArgs waveInEventArgs)
{
try
{
var itm = new byte[waveInEventArgs.BytesRecorded];
Array.Copy(waveInEventArgs.Buffer, itm, waveInEventArgs.BytesRecorded);
buffer0.AddSamples(itm, 0, itm.Length);
}
catch { }
}
您可以使用 WasapiLoopbackCapture
捕获发送到设备的音频。然后您可以将其通过管道传输到 BufferedWaveProvider
并使用它来提供给另一个输出设备。但是会引入一些延迟,所以不要指望这两个设备同步。
我似乎无法从默认音频设备录制音频,并在其他音频设备上播放.. 我不想录音麦克风,但音频设备..
当我播放电影时,我可以通过耳机听到声音,我想将该声音复制到我选择的任何音频设备..
如果你有任何建议,它不一定与 NAudio..
据我所知,NAudio 不能这样做..
这是我此时用于任务的代码,但它只需要从我的麦克风输入:带有 NAudio 的代码片段..
void playSoundCopy(int dv0)
{
disposeWave0();// stop previous sounds before starting
var waveOut0 = new WaveOut();
waveOut0.DeviceNumber = dv0;
wave0 = waveOut0;
Defaultwave0 = new WaveIn();
Defaultwave0.DeviceNumber = (int)GetDefaultDevice(Defaultdevice.FriendlyName);
var waveinReader0 = new WaveInProvider(Defaultwave0);
wave0.Init(waveinReader0);
play0 = false;
Thread.Sleep(1000);
play0 = true;
t0 = new Thread(() => { timeline0(); });
t0.IsBackground = true;
t0.Start();
Defaultwave0.StartRecording();
wave0.Play();
}
真正的问题实际上是我无法从 WaveOut 设备录制,只能从 WaveIn..
工作结果:
void playSoundCopy(int dv0)
{
disposeWave0();// stop previous sounds before starting
var waveOut0 = new WaveOut();
waveOut0.DeviceNumber = dv0;
wave0 = waveOut0;
var format0 = Defaultdevice.AudioClient.MixFormat;
buffer0 = new BufferedWaveProvider(format0);
wave0.Init(buffer0);
capture = new WasapiLoopbackCapture(Defaultdevice);
capture.ShareMode = AudioClientShareMode.Shared;
capture.DataAvailable += CaptureOnDataAvailable;
play0 = false;
Thread.Sleep(1000);
play0 = true;
t0 = new Thread(() => { timeline0(); });
t0.IsBackground = true;
t0.Start();
capture.StartRecording();
wave0.Play();
}
void CaptureOnDataAvailable(object sender, WaveInEventArgs waveInEventArgs)
{
try
{
var itm = new byte[waveInEventArgs.BytesRecorded];
Array.Copy(waveInEventArgs.Buffer, itm, waveInEventArgs.BytesRecorded);
buffer0.AddSamples(itm, 0, itm.Length);
}
catch { }
}
您可以使用 WasapiLoopbackCapture
捕获发送到设备的音频。然后您可以将其通过管道传输到 BufferedWaveProvider
并使用它来提供给另一个输出设备。但是会引入一些延迟,所以不要指望这两个设备同步。