2012-09-16 15 views
5

私の質問を読んでくれてどうもありがとう。Windows Media FoundationをWindows 7で使用しているAACへのRawオーディオファイル

私はQtとWindows APIを使用してC++アプリケーションを開発しています。

マイクの出力を小さな10sオーディオファイルにRAW形式で録音していますが、これをaac形式に変換したいとします。

私は可能な限り多くのことを読もうとしましたが、Windows Media FoundationのトランスコードAPIから始めることは素晴らしいアイデアだと思っていました。

問題は、 "CreateObjectFromUrl"関数で.rawまたは.pcmファイルを使用することができないため、ここではかなり詰まっています。それは失敗し続けます。 hrリターンコードは3222091460と同じです。私は関数に.mp3ファイルを渡そうとしましたが、もちろん動作しますので、url-human-failureは含まれません。

MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID; 

IMFSourceResolver* pSourceResolver = NULL; 
IUnknown* pUnkSource = NULL; 

// Create the source resolver. 
hr = MFCreateSourceResolver(&pSourceResolver); 
if (FAILED(hr)) 
{ 
    qDebug() << "Failed !"; 
} 


// Use the source resolver to create the media source. 


hr = pSourceResolver->CreateObjectFromURL(
     sURL,      // URL of the source. 
     MF_RESOLUTION_MEDIASOURCE, // Create a source object. 
     NULL,      // Optional property store. 
     &ObjectType,    // Receives the created object type. 
     &pUnkSource     // Receives a pointer to the media source. 
     ); 

MFCreateSourceResolverが正常に動作しますが、CreateObjectFromURLは成功しません:(

をだから私はあなたの人々のための2つの質問があります。

  1. を使用してAACファイルに生のオーディオファイルをエンコードすることが可能ですがWindowsメディアの基礎?
  2. はいの場合、私が望むものを達成するために何を読むべきですか?

ffmpegまたはlibavを使用することはできません。私は自分のソフトウェアのライセンスを購入する余裕がなく、GPLライセンスのもとにいないようにしたいからです。しかし、Windowsのメディア基盤の代わりに生のオーディオファイルをaacにエンコードする方法があれば、それを聞いてうれしいです。

最後に、私の悪い英語のために申し訳ありませんが、これは明らかに私の母国語ではありません。 (と私はあなたが笑わせた場合に幸せ)

が素敵な一日

答えて

3

を持っている時間の戻りコードが3222091460

ものに等しいHRESULTコードです。それらを便利にあなたのために解読するにはthis "ShowHresult" toolを使用してください。コード手段0xC00D36C4MF_E_UNSUPPORTED_BYTESTREAM_TYPE "指定されたURLのバイトストリームタイプはサポートされていません。"

問題は基本的にはこれらのRAWファイルをサポートしていないことです.WAVはRAWオーディオの良いソースです。このファイルには、フォーマット記述子とペイロードの両方が格納されています。

生のオーディオファイルからデータを読んで、AAC EncoderIMFTransformインターフェイスを使用してAACに圧縮できます。これは合理的に簡単で、あなたは出力にAACデータを持っています。生の.AACに書き込む。メディア財団へ

代替オプションはDirectShowの(私は起動するのは簡単ではないかもしれないと思ったのに、適切なコーデックが存在する)、libfaac、FFmpegののlibavcodec(LGPLの下で利用可能ではなく、GPL)です。

+1

こんにちは、ありがとうございました。それは事をきわめて明瞭にしました。私はあなたの時間に十分にあなたに感謝することができません。 WMFのAACエンコーダを使って生AACを取得し、そこから何ができるかを見ていきます。pcmを次のように変換するためにどの手順を実行する必要があるかを私に教えてくれるコード例は見つかりませんでした。 aac。 私は今、あなたに感謝してIMFTransformインターフェイスを作成し、入力rawと出力aacを設定し、サンプル期間を設定し、ProcessOutputを呼び出す必要があります。それは簡単ですか? –

+1

残念ながら私は良い参考資料のサンプルコードを認識していません。しかし、私は以前はそれがいくつかの時間を働かせていたので、それはうまく動作することを知っています。はい、基本的に必要なのは、[AAC Encoder](http://msdn.microsoft.com/library/dd742785%28v=vs.85%29.aspx)に従って、MFTクラスをインスタンス化し、入力メディアの種類を設定し、出力を設定することです(注意深く!)、次に 'ProcessInput'でPCMデータをプッシュし、' ProcessOutput'でAACデータをプルします。 –

関連する問題