我有一个UWP项目,我想使用Windows.Media.Audio API播放文件。我不想使用FileInputNode,而想流式传输我的文件,以便我可以精确地确定各种时序属性。使用MediaStreamSource解码音频
我发现媒体流API和以试图解码16位PCM 2通道作了如下代码.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是否实际将audiofile解码为浮点字节数组?或者当MediaElement在播放样本时完成这项工作?
如果是这样,我怎么能解码一个audiofile所以我可以提供产生的AudioBuffer回到我的FrameInputNode?