我在UWP应用程序中使用AudioGraph时遇到问题。我的麻烦是,当我添加一个Outgoing Connection添加到我的输入设备节点时,我得到了一个用HRESULT抛出的异常:0x88960001。
使用试验和错误我发现问题出在我在输入和输出节点上设置的MediaEncoding配置文件...但我现在有2个设置只能在一台机器上工作而另一个只能在另一台机器上工作。 ..我需要音频为单通道,16位采样,带有16K采样PCM。
我使用的代码相当简单,并且基于在线存在的样本,事情是它仅适用于某些麦克风而不是其他麦克风......我需要它是通用的并且始终具有相同的输出,以便我可以将其输入到我的服务端点。
我在那里留下了2个AudioEncodingProperties设置(其中一个已注释掉)
var result = await AudioGraph.CreateAsync(
new AudioGraphSettings(AudioRenderCategory.Media));
if (result.Status == AudioGraphCreationStatus.Success)
{
this.graph = result.Graph;
var microphone = await DeviceInformation.CreateFromIdAsync(
MediaDevice.GetDefaultAudioCaptureId(AudioDeviceRole.Default));
// Low gives us 1 channel, 16-bits per sample, 16K sample rate.
var outProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Low);
//outProfile.Audio = AudioEncodingProperties.CreatePcm(16000, 1, 16);
outProfile.Audio = AudioEncodingProperties.CreatePcm(44100, 2, 32);
var inProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Low);
//inProfile.Audio = AudioEncodingProperties.CreatePcm(16000, 1, 16);
inProfile.Audio = AudioEncodingProperties.CreatePcm(44100, 2, 32);
var outputResult = await this.graph.CreateFileOutputNodeAsync(file,
outProfile);
if (outputResult.Status == AudioFileNodeCreationStatus.Success)
{
this.outputNode = outputResult.FileOutputNode;
var inputResult = await this.graph.CreateDeviceInputNodeAsync(
MediaCategory.Speech,
inProfile.Audio,
microphone);
if (inputResult.Status == AudioDeviceNodeCreationStatus.Success)
{
//EXEPTION IS THROWN HERE
inputResult.DeviceInputNode.AddOutgoingConnection(
this.outputNode);
this.graph.Start();
}
}
}
else
{
throw new Exception("Could not create AudioGraph");
}
谢谢你们的帮助
答案 0 :(得分:0)
不要使用inputResult
对象构建inProfile.Audio
,而是尝试使用图表的默认编码属性:
var enc = graph.EncodingProperties;
CreateAudioDeviceInputNodeResult deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync(MediaCategory.Media, enc, this.outputNode);
我遇到了类似的问题,这样可以解决问题,并允许从任何设备输入音频,而无需指定编码配置文件。