gpt4 book ai didi

audio - 使用 MediaStreamSource 解码音频

转载 作者:行者123 更新时间:2023-12-04 21:36:44 25 4
gpt4 key购买 nike

我有一个 UWP 项目,我想使用 Windows.Media.Audio API 来播放文件。我不想使用 FileInputNode,而是想流式传输我的文件,以便我可以精确地确定各种计时属性。

我找到了 MediaStreamSource API 并编写了以下代码以尝试解码 16 位 PCM 2 channel .wav 文件

 public async Task<Windows.Storage.Streams.Buffer> GetBuffer()
{
// check if the sample requested byte offset is within the file size

if (byteOffset + BufferSize <= mssStream.Size)
{
inputStream = mssStream.GetInputStreamAt(byteOffset);

// create the MediaStreamSample and assign to the request object.
// You could also create the MediaStreamSample using createFromBuffer(...)

MediaStreamSample sample = await MediaStreamSample.CreateFromStreamAsync(inputStream, BufferSize, timeOffset);
sample.Duration = sampleDuration;
sample.KeyFrame = true;
// increment the time and byte offset

byteOffset += BufferSize;
timeOffset = timeOffset.Add(sampleDuration);


return sample.Buffer;
}
else
{

return null;
}
}

我没有使用事件系统,而是创建了一个方法,每当我的 AudioFrameInputNode 需要一个新的 AudioFrame 时就会触发该方法。

现在看来,MediaStreamSample 中生成的字节数组与我使用 DataReader 读取 StorageFile 时完全相同。

MediaStreamSample.CreateFromStreamAsync 是否真的将音频文件解码为浮点字节数组?或者这是在播放样本时在 MediaElement 中完成的?

如果是这样,我如何解码音频文件,以便将生成的 AudioBuffer 提供回我的 FrameInputNode?

最佳答案

MediaStreamSample.CreateFromStreamAsync完成后,它将新文件作为 MediaStreamSample 返回。

如果我理解你在这里想要什么以及你可以做些什么来完成它的例子。

function sampleRequestedHandler(e) {
var request = e.request;
if (!MyCustomFormatParser.IsAtEndOfStream(randomAccessStream)) {
var deferral = request.getDeferral();
var inputStream = MyCustomFormatParser.getInputStream(randomAccessStream);
MediaStreamSample.createFromStreamAsync(inputStream, sampleSize, timeOffset).
then(function(sample) {
sample.duration = sampleDuration;
sample.keyFrame = true;
request.sample = sample;
deferral.complete();
});
}
}

When sample is requested, your custom parser extracts audio data from RandomAccessStream and returns an InputStream of only audio samples

关于audio - 使用 MediaStreamSource 解码音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084199/

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