#c# #wpf #naudio
#c# #wpf #naudio
Вопрос:
Кажется, я не могу записать звук с аудиоустройства по умолчанию и воспроизвести его на другом аудиоустройстве.. Я хочу записывать не микрофон, а аудиоустройство..
Когда я проигрываю фильм, я слышу звук через наушники, я хочу скопировать этот звук на любое аудиоустройство, которое я выберу..
Если у вас есть какие-либо предложения, это не обязательно должно быть с 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 { }
}
Комментарии:
1. С этой небольшой информацией, я думаю, никто не сможет вам помочь. Пожалуйста, объясните более подробно и добавьте, если необходимо, некоторый код / дополнительный контекст.
2. Я прошу предложений, а не фактического кода, если только это не фрагмент кода..
3. Возможно, вам сначала нужно включить записывающее устройство, необходимое для этого. Смотрите, например, эту страницу из audacity: manual.audacityteam.org/man /…
4. Извините, но этот пример не работает .. Нулевой звук…
Ответ №1:
Вы можете записывать аудио, отправляемое на устройство с помощью WasapiLoopbackCapture
. Затем вы можете передать это в a BufferedWaveProvider
и использовать для передачи другому устройству вывода. Однако может возникнуть некоторая задержка, поэтому не ожидайте, что два устройства будут синхронизированы.
Комментарии:
1. Звучит неплохо, но работает ли WasapiLoopbackCapture с моим аудиоустройством, а не с моим микрофоном?? Фрагмент кода был бы хорош..
2. да, WasapiLoopbackCapture будет записывать выходные данные со звуковой карты. Вы можете найти некоторые примеры кода в демонстрационном проекте NAudio WPF
3. Возможно ли, чтобы вы дали мне ссылку??