4

IMFSourceReaderユーザーの音楽ライブラリから.mp3ファイルを取得し、Windows Media Foundationを使用して、エキサイティングなDSPアクション用のPCM値を含む配列に変換できるプログラムを作成しようとしています。しかし、私は問題を抱えています。

私のソリューションには2つのプロジェクトがあります。UIコードを含むC#/XAMLライブラリとMediaFoundationおよびXAudio2を操作するためのネイティブコードを含むC++ライブラリに加えpublic refて、C#コードが対話できるいくつかのクラス。

MFCreateSourceReaderFromURLアプリマニフェストに音楽ライブラリ機能がある場合でも、ACCESS DENIED HRESULTが返されるため、使用できません。したがって、またはのいずれかを使用する必要があるようMFCreateSourceReaderFromByteStreamですMFCreateSourceReaderFromMediaSource。さて、を使用して音楽ファイルにアクセスし、他のいくつかのストリームタイプと一緒にまたはWindows.Storage.KnownFolders.MusicLibraryを取得するのは簡単ですが、これをまたはまたは何らかの方法でPCM値を持つバイト配列にデコードするにはどうすればよいですか?StreamIInputStreamIMFByteStreamIMFMediaSource

また、音楽ファイルをアプリフォルダーに再保存して使用できるようMFCreateSourceReaderFromURLにするか、Media Foundationでの作業を直接バイパスしてWindows.Media.Transcoding、PCMへの変換などを使用することもできます。ただし、これがトランスコーディング名前空間の目的であるかどうかはわかりません。

Media Foundationのドキュメントを何時間も読んでいて、MFCreateMFByteStreamOnStreamCOMからIStreamバイトストリームに変換できる希望がちらりと見えましたが、.netストリームをIStreamに変換するラッパーを見つけて作成する必要があります。このタスクに着手する前に、自分が正しい方向に進んでいることを確認したいだけですか、それともこれを行うためのより良い方法がありますか?

前もって感謝します。また、私が愚かな間違いを犯したり、これらのライブラリを操作する上で重要な側面を見逃したりした場合は、事前にお詫び申し上げます。

4

3 に答える 3

5

OK、皆さん、この質問に答えることを強く望んでいることは知っていますが、2日間の頭を悩ませた後、私は解決策を見つけました。次のようにキャストすることで、Windows::Storage::Streams::IRandomAccessStream^オブジェクトをMFCreateMFByteStreamOnStreamExhttp://msdn.microsoft.com/en-us/library/windows/desktop/hh162754(v=vs.85).aspx )に渡すことができます。(IUnknown*)

ComPtr<IMFByteStream> spMFByteStream = nullptr; 

MFCreateMFByteStreamOnStreamEx((IUnknown*)streamHandle, &spMFByteStream);

//remember to add your own HRESULT error handling code

ComPtr<IMFSourceReader> _sourceReader = nullptr;

MFCreateSourceReaderFromByteStream(spMFByteStream.Get(),nullptr,&_sourceReader);

あなたstreamHandleIRandomAcessStream^ソースリーダーに与えたいものであることで。 これが実行中のコードサンプルです

乾杯の時間です。

于 2012-07-02T11:32:21.380 に答える
0

あなたがそれからコンポーネントを作ることができるなら(ライセンスされているかどうかにかかわらず)、私は興味があります。WinRTでMP4、WMA、またはM4AオーディオファイルをPCMにトランスコードできるコンポーネントを知りません。残念ながら、Windows8はオーディオファイルをPCMとして録音することをサポートしていません。

于 2012-07-13T17:40:37.227 に答える
0

IStreamパーティーの後半に、元の回答を補足して、管理されたストリームをCOMインターフェイスでラップするルートを取りたい人のために、ここに良い実装があります。

于 2020-05-05T15:58:55.777 に答える