2017-03-16 2 views
0

Ich versuche Rekord Benutzersprache in UWP naudio.Following mit dem Code wird die NAudio zu initialisieren auf der Festplatte zu erfassen und schreiben:Aufnahme Rede in UWP mit NAudio

sourcestream = new WasapiCaptureRT(); 
sourcestream.WaveFormat = new WaveFormat(8000, 8, 1); 

sourcestream.DataAvailable += OnDataAvailable; 
sourcestream.RecordingStopped += OnRecordingStopped; 

sourcestream.StartRecording(); 

file = await KnownFolders.MusicLibrary.CreateFileAsync("audio.wav", CreationCollisionOption.ReplaceExisting); 
MediaEncodingProfile.CreateWav(AudioEncodingQuality.Auto); 

memorystream = await file.OpenStreamForWriteAsync(); 

writer = new WaveFileWriterRT(memorystream, sourcestream.WaveFormat); 

sourcestream.StartRecording(); 

Aber wenn die Ausführung kommt zu

memorystream = await file.OpenStreamForWriteAsync(); 

eine Ausnahme ausgelöst und die Ausführung geht zu folgenden Code:

DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION 
     UnhandledException += (sender, e) => 
     { 
      if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break(); 
     }; 

    } 

Die excepti der Code auf in ist

Nicht unterstützte Wave Format

Ich habe versucht, das gleiche in Konsolenanwendung und alles funktionierte gut zu tun. Aber wenn ich versuche, es in UWP zu tun, wird der obige Fehler gezeigt.

Was ist die Ursache für diesen Fehler?

Antwort

0

Der Fehler "Nicht unterstütztes Wave Format" wird durch das folgende Code-Snippet der Datei WasapiCaptureRT.cs innerhalb des NAudio Pakets ausgelöst.

if (!audioClient.IsFormatSupported(AudioClientShareMode.Shared, waveFormat)) 
{ 
    throw new ArgumentException("Unsupported Wave Format"); 
} 

So wie es scheint, dass das Wave-Format Sie von Codezeile bieten sourcestream.WaveFormat = new WaveFormat(8000, 8, 1); wird nicht unterstützt. Ein Wave-Format wie 44 kHz kann gut funktionieren.

sourcestream.WaveFormat = new WaveFormat(44100, 16, 1); 

Update:

die Datei gespeichert wird, aber nichts wird aufgezeichnet.

Da Sie nicht den Code für OnDataAvailable Verfahren vorsah, versuchen Sie bitte die folgenden:

private async void btnrecord_Click(object sender, RoutedEventArgs e) 
{ 
    sourcestream = new WasapiCaptureRT(); 
    sourcestream.RecordingStopped += OnRecordingStopped; 
    sourcestream.DataAvailable += OnDataAvailable; 
    file = await KnownFolders.MusicLibrary.CreateFileAsync("audio2.wav", CreationCollisionOption.GenerateUniqueName); 
    var radomsteam = await file.OpenAsync(FileAccessMode.ReadWrite); 
    streamwriter = radomsteam.AsStreamForWrite();(); 
    sourcestream.StartRecording(); 
} 
private void OnDataAvailable(object sender, WaveInEventArgs e) 
{ 
    writer = new WaveFileWriterRT(streamwriter, sourcestream.WaveFormat); 
    writer.Write(e.Buffer, 0, e.BytesRecorded); 
    writer.Flush();  
} 
+0

Dank. Ich habe es funktioniert, indem ich die Samplerate als 48000 eingestellt habe. Aber irgendwie funktioniert die Audioaufnahme nicht in uwp für Windows 10. Die Datei wird gespeichert, aber nichts wird aufgezeichnet. – Dipumon

+0

@Dipumon, versuchte die Updates auf meine Antwort. –