AudioDevice:在 WinRT/WP 8.1 中使用 MediaCapture 录制声音
AudioDevice: recording sound using MediaCapture in WinRT/WP 8.1
我目前正在构建一个使用 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 的方法?
尝试使用 Windows.Media.Devices.MediaDevice.GetDefaultAudioCaptureId
API 选择您的音频设备。
我还强烈建议您订阅 Windows.Media.Devices.MediaDevice.DefaultAudioCaptureDeviceChanged
事件,以处理默认音频捕获设备的更改(如果它适用于您的场景)。
我目前正在构建一个使用 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 的方法?
尝试使用 Windows.Media.Devices.MediaDevice.GetDefaultAudioCaptureId
API 选择您的音频设备。
我还强烈建议您订阅 Windows.Media.Devices.MediaDevice.DefaultAudioCaptureDeviceChanged
事件,以处理默认音频捕获设备的更改(如果它适用于您的场景)。