2016-10-10 2 views
0

Je n'arrive pas à enregistrer l'audio du périphérique audio par défaut et à le lire sur un autre périphérique audio. Je ne souhaite pas enregistrer le microphone, mais l'audio appareil ..Comment enregistrer et lire du son à partir d'un périphérique audio par défaut

Quand je joue un film, je peux entendre le son, dans mes écouteurs, je veux copier ce son à tout appareil audio .. Je choisis

Si vous avez des suggestions, il n'a pas doit être avec NAudio ..

Pour autant que je sache, NAudio ne peut pas faire cela ..

C'est le code que j'utilise pour la tâche à ce moment, mais il ne prend entrée de mon microphone: Extrait de code avec 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(); 
} 

Le vrai problème est en fait que je ne peux pas enregistrer à partir d'un dispositif WaveOut, seulement WaveIn ..

Résultat de travail:

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 { } 
} 
+0

Avec cette petite information, je pense que personne ne peut vous aider. S'il vous plaît expliquer plus en détail et ajouter si nécessaire du code/plus de contexte. –

+0

Je demande des suggestions, pas de code réel à moins, c'est un extrait de code .. – ArchAngel

+0

Peut-être que vous devez d'abord activer l'appareil d'enregistrement nécessaire pour cela. Voir cette page d'audacity par exemple: http://manual.audacityteam.org/man/tutorial_recording_computer_playback_on_windows.html –

Répondre

1

Vous pouvez capturer l'audio envoyé à un appareil à l'aide WasapiLoopbackCapture. Ensuite, vous pouvez le mettre dans un BufferedWaveProvider et l'utiliser pour alimenter un autre périphérique de sortie. Il y aurait cependant un peu de latence, alors ne vous attendez pas à ce que les deux appareils soient synchronisés.

+0

Ça sonne bien, mais le WasapiLoopbackCapture, ça marche avec mon appareil audio et pas avec mon micro? Un extrait de code serait bien. – ArchAngel

+0

oui WasapiLoopbackCapture va enregistrer la sortie d'une carte son. Vous pouvez trouver un exemple de code dans le projet de démonstration NAudio WPF –

+0

Est-il possible pour vous de me donner un lien? – ArchAngel