2017-03-16 78 views
0

我使用naudio.Following是代码初始化n音讯试图记录用户的语音中UWP捕获并写入到磁盘:录音讲话n音讯

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(); 

但是,当执行涉及到

memorystream = await file.OpenStreamForWriteAsync(); 

则抛出异常并执行进到下面的代码:

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

    } 

的excepti在代码是

不支持的波形格式

我试图做的控制台应用程序相同的,一切工作正常。但是当我尝试在UWP中完成时,会显示上述错误。

这个错误的原因是什么?

回答

0

NAudio包内的文件WasapiCaptureRT.cs的以下代码段抛出错误“不支持的波形格式”。

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

所以它似乎不支持您通过代码行sourcestream.WaveFormat = new WaveFormat(8000, 8, 1);提供的波形格式。像44kHz这样的波形格式可能正常工作。

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

更新:

该文件被保存,但没有被记录下来。

既然你没有为OnDataAvailable方法提供代码,请尝试以下:

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

感谢。我通过设置采样率为48000工作。但不知何故音频录制在uwp for windows 10中不起作用。文件被保存但没有任何记录。 – Dipumon

+0

@Dipumon,在我的回复中尝试了更新。 –