UWP MediaCapture-以16000,16位,单声道采样率录制wav音频

问题描述 投票:0回答:1

我想将录音包含到我的UWP应用中。录音应保存到wav文件,并且必须具有属性采样率16000(16位,单声道)(语音识别任务需要)。由于CSCore和NAudio之类的库似乎不适用于UWP应用,因此我尝试使用MediaCapture API。

这是我的代码:

MediaCapture mediaCapture = new MediaCapture();

var settings = new MediaCaptureInitializationSettings
{
  AudioDeviceId = device.Id,
  StreamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.Audio,
};
await mediaCapture.InitializeAsync(settings);

var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile file = await localFolder.CreateFileAsync("audio.wav", CreationCollisionOption.GenerateUniqueName);
await mediaCapture.StartRecordToStorageFileAsync(MediaEncodingProfile.CreateWav(AudioEncodingQuality.Auto), file);

我尝试使用以下代码设置AudioEncodingProperties,但始终会出错:

var controller = mediaCapture.AudioDeviceController;
var properties = controller.GetMediaStreamProperties(MediaStreamType.Audio) as AudioEncodingProperties;
properties.SampleRate = 16000;
properties.BitsPerSample = 16;
properties.ChannelCount = 1;

// the following line fails with System.Exception "The request is invalid in the current state."
await controller.SetMediaStreamPropertiesAsync(MediaStreamType.Audio, properties);

非常感谢您的帮助!

c# audio uwp mediarecorder
1个回答
0
投票

尝试如下配置MediaEncodingProfile.Audio。

var profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Auto);
profile.Audio = AudioEncodingProperties.CreatePcm(16000, 1, 16);

await mediaCapture.StartRecordToStorageFileAsync(profile, file);

btw,尝试更改捕获设备端的音频质量可能不会成功,因为它不支持太多格式。

var controller = mediaCapture.AudioDeviceController;
var encoding_properties_supported = controller.GetAvailableMediaStreamProperties(MediaStreamType.Audio).ToArray();
© www.soinside.com 2019 - 2024. All rights reserved.