AudioDevice:使用WinRT / WP 8.1中的MediaCapture录制声音

时间:2015-07-24 13:27:19

标签: c# windows-runtime windows-phone

我目前正在构建一个使用WinRT MediaCapture API记录音频并拍照的应用。

我初始化MediaCapture并选择正确设备的代码如下所示:

try
  {
    _captureManager = new MediaCapture();
    string camera = "";
    foreach (var device in await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture))
    {
      switch (device.EnclosureLocation.Panel)
      {
        case Windows.Devices.Enumeration.Panel.Back:
          camera = device.Id;
          continue;
      }
    }

    var mics = await DeviceInformation.FindAllAsync(DeviceClass.AudioCapture);

    var settings = new MediaCaptureInitializationSettings
    {
      PhotoCaptureSource = PhotoCaptureSource.Auto,
      StreamingCaptureMode = StreamingCaptureMode.AudioAndVideo,
      VideoDeviceId = camera,
      AudioDeviceId = mics.First().Id
    };

    await _captureManager.InitializeAsync(settings);

我认为,错误的是,第一个麦克风是默认的。但是,我发现的一个设备并未授予您使用此麦克风的权限,但它可以访问第二个设备。显然,这不是选择麦克风的可靠方法。

相反,我现在尝试了这段代码:

try
  {
    _captureManager = new MediaCapture();
    var camera = "";
    foreach (var device in await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture))
    {
      switch (device.EnclosureLocation.Panel)
      {
        case Windows.Devices.Enumeration.Panel.Back:
          camera = device.Id;
          continue;
      }
    }

    var settings = new MediaCaptureInitializationSettings
    {
      PhotoCaptureSource = PhotoCaptureSource.Auto,
      StreamingCaptureMode = StreamingCaptureMode.AudioAndVideo,
      VideoDeviceId = camera,
    };

    await _captureManager.InitializeAsync(settings);

没有设置AudioDevice似乎仍然可以使用这些设置,但会导致我的设备出现问题(崩溃)。

这可能是设备特定的,但我想知道是否有更好的或建议的方式来设置除上述之外的MediaCapture?

1 个答案:

答案 0 :(得分:1)

尝试使用Windows.Media.Devices.MediaDevice.DefaultAudioCaptureDeviceChanged API选择音频设备。

我还强烈建议您订阅new List<Integer>() { ... }事件,以处理更改默认音频捕获设备(如果它适用于您的方案)。