gpt4 book ai didi

c# - 是否可以在UWP应用程序中提供原始音频(字节流)数据?

转载 作者:行者123 更新时间:2023-12-03 00:30:28 28 4
gpt4 key购买 nike

我有一个自定义音频DAC设备。它内部有自己的 Controller ,并且知道如何处理特定的字节流。我正在尝试使用一个库:
Audio Graph。我在内存中生成一些数据,并像这样发送:

private unsafe AudioFrame GenerateAudioData(byte[] data)
{
uint bufferSize = 7000000;
AudioFrame frame = new Windows.Media.AudioFrame(bufferSize);
using (AudioBuffer buffer = frame.LockBuffer(AudioBufferAccessMode.Write))
using (IMemoryBufferReference reference = buffer.CreateReference())
{
byte* dataInBytes;
uint capacityInBytes;
((IMemoryBufferByteAccess)reference).GetBuffer(out dataInBytes, out capacityInBytes);
for (int i = 0; i < bufferSize; i += 4)
{
dataInBytes[i] = data[i];
dataInBytes[i + 1] = data[i + 1];
dataInBytes[i + 2] = data[i + 2];
dataInBytes[i + 3] = data[i + 3];
}
}
return frame;
}

这是我的音频图表设置:
AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Other)
{
EncodingProperties = AudioEncodingProperties.CreatePcm(44100, 2, 16),
AudioRenderCategory = AudioRenderCategory.Other,
DesiredRenderDeviceAudioProcessing = AudioProcessing.Raw
};

问题在于,某些修改我的流并且物理设备无法接收完全相同的数据。在声音上并不明显,但是我需要 将相同的字节传递给端点设备。使用 WASAPI我没有这样的问题。如果我获得设备的 独占访问,也会更好。将系统声音/警报/通知与我的音频流混合在一起是非常不希望的。

提前致谢!

最佳答案

我注意到您的音频数据使用44.1 kHz采样率。许多音频设备支持48 kHz,这是用作设备“混合格式”的采样率。在这种情况下,AudioGraph将对音频数据重新采样以匹配“混合格式”,以便您的数据可以与系统声音和其他应用程序的声音混合。

AudioGraph无法按原样将数据发送到音频设备,因为这将需要以独占模式打开音频设备,这会阻塞任何系统声音,会干扰Cortana等。AudioGraph不支持以独占模式打开音频设备。

作为一种可能的解决方法,如果您可以强制音频设备仅支持44.1 kHz,则它将成为新的“混合格式”,并且AudioGraph不会对音频进行重新采样。某些音频设备通过控制低级音频设置的属性页面支持此功能。
另一个解决方法是使用IAudioClient API(WASAPI)以独占模式打开音频设备。

关于c# - 是否可以在UWP应用程序中提供原始音频(字节流)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49600791/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com