2017-03-16 1 views
0

I 캡처 및 디스크에 기록 할 naudio을 초기화하는 코드를 naudio.Following이다 사용 UWP에 기록 사용자 연설에 노력하고 있습니다 :녹음 연설 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(); 

그러나 실행은

에 관해서
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으로 설정하여 작동시키고 있습니다.하지만 어떻게 든 Windows 용 uwp에서는 오디오 녹음이 작동하지 않습니다. 파일은 저장되지만 아무 것도 녹음되지 않습니다. – Dipumon

+0

@Dipumon, 내 답장에 대한 업데이트를 시도했습니다. –