我正在尝试制作一个程序,该程序可以从用户的音乐库中获取 .mp3 文件,并使用 Windows Media Foundation 将其转换IMFSourceReader
为包含 PCM 值的数组,以进行一些令人兴奋的 DSP 操作。但是,我遇到了问题。
我的解决方案有两个项目;一个 C#/XAML 包含 UI 代码和一个 C++ 库,其中包含一些用于使用 Media Foundation 和 XAudio2 的本机代码以及一些public ref
C# 代码可以与之交互的类。
我无法使用MFCreateSourceReaderFromURL
,因为即使您在应用程序清单中具有音乐库功能,它也会返回 ACCESS DENIED HRESULT。所以看起来我将不得不使用MFCreateSourceReaderFromByteStream
or 或MFCreateSourceReaderFromMediaSource
. 现在,很容易使用Windows.Storage.KnownFolders.MusicLibrary
并获取 aStream
或 anIInputStream
以及其他一些流类型来访问音乐文件,但是如何将其转换为 anIMFByteStream
或 anIMFMediaSource
或仅以某种方式将 mp3 解码为具有 PCM 值的字节数组?
我还考虑了将音乐文件重新保存在应用程序文件夹中的想法,以便我可以使用MFCreateSourceReaderFromURL
或者可能可以绕过直接使用 Media Foundation 并使用类似Windows.Media.Transcoding
转换为 PCM 的方法。我不确定这是 Transcoding 命名空间的用途。
我花了几个小时阅读媒体基金会文档,发现了一线希望,MFCreateMFByteStreamOnStream
可以将 COM 转换IStream
为字节流,但我需要找到/编写一个包装器来将我的 .net 流转换为 IStream。在我开始这项任务之前,我只想确保我朝着正确的方向前进,或者有更好的方法吗?
提前致谢。如果我犯了一个愚蠢的错误或错过了使用这些库的一些关键方面,也请提前道歉。