Ich habe ein UWP-Projekt und möchte die Windows.Media.Audio API verwenden, um eine Datei abzuspielen. Anstatt den FileInputNode zu verwenden, möchte ich meine Datei streamen, damit ich verschiedene Timing-Eigenschaften genau bestimmen kann.Audio mit MediaStreamSource decodieren
I die Mediastreamsource API und aus dem folgenden Code in einem Versuch gefunden .wav-Datei
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;
}
}
Anstatt das Ereignissystem verwendet wird, einen 16-Bit-PCM 2-Kanal zu dekodieren, habe ich eine Methode, die, wenn ausgelöst, Mein AudioFrameInputNode benötigt einen neuen AudioFrame.
Jetzt scheint es, dass das resultierende Byte-Array in der MediaStreamSample ist genau das gleiche wie wenn ich einfach meine StorageFile mit einem DataReader auslesen.
Dekodiert MediaStreamSample.CreateFromStreamAsync die Audiodatei tatsächlich in ein Float-Byte-Array? Oder wird das im MediaElement gemacht, wenn das Sample abgespielt wird?
Und wenn ja, wie kann ich ein Audiofile dekodieren, damit ich den resultierenden AudioBuffer wieder in meinen FrameInputNode liefern kann?