2

次のコードは、AMRおよびAAC形式を使用して、WindowsPhone8デバイスから分離されたストレージに録音されたオーディオを正しく録音します。ただし、PCM形式を記録しようとすると、アプリが次のエラーでクラッシュします。

    Value does not fall within the expected range.
Windows.Phone.Media.Capture.AudioVideoCaptureDevice.StartRecordingToStreamAsync(IRandomAccessStream stream)
       at WP8.Classes.AudioCaptureController.<StartRecordingAsync>d__3.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
       at WP8.ViewModels.CameraPageViewModel.<capture>d__13.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
       at WP8.ViewModels.CameraPageViewModel.<TakePictureAsync>d__6.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state)

私が作業しているコードは次のとおりです。

private AudioVideoCaptureDevice mic;
    private IRandomAccessStream sst;
    private string path;

    public async Task MicStartAsync()
    {
      mic = await AudioVideoCaptureDevice.OpenForAudioOnlyAsync();
      mic.AudioEncodingFormat = CameraCaptureAudioFormat.Pcm;
    }

    public async Task StartRecordingAsync()
    {
      IsolatedStorageAccess iso = new IsolatedStorageAccess();
      sst = await iso.SetUpFileStreamForSavingAudioAsync("123.pcm");
      await mic.StartRecordingToStreamAsync(sst);
      path = iso.Path;
    }

    public async Task StopRecordingAsync()
    {
      await mic.StopRecordingAsync();
      sst.AsStream().Dispose();
      new MediaPlayerLauncher()
      {
        Media = new Uri(path, UriKind.Relative)
      }.Show();
    }
  }
}

フォーマットをpcm以外に変更すると機能します!

更新:何らかの理由でクラッシュを回避しているように見えますが、これは出力に表示されます:

A first chance exception of type 'System.ArgumentException' occurred in WP8.DLL
An exception of type 'System.ArgumentException' occurred in WP8.DLL and wasn't handled before a managed/native boundary

(WP8は私のdllの名前です)この後もコードは通常どおり続行され、記録が開始されなかったと表示され、AudioVideoCaptureDeviceが正しくない状態になっている場合にのみ、記録を停止するとクラッシュします。

また、varAudioVideoCaptureDevice.SupportedAudioEncodingFormats;を使用して、Pcmが使用可能であることを確認してみました。

4

1 に答える 1

1

XNAフレームワークを使用してマイクから録音できます(データをファイルに書き込むときに、Microsoftがフレームワークにエラーを持っているようです!)

データを wav 形式で保存する方法については、このコードマイク サンプルとこの記事を参照してください。Nokia開発者ポータルからWindows Phone でマイク ストリームを Wave 形式に保存します。

于 2013-02-05T13:01:28.050 に答える