我有一個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?