web-dev-qa-db-ja.com

MP3ファイルの読み取り

私はC++でMP3ファイルを読みたいのですが、このために独自のコードを書くことを好みます。基本的に、ファイルタイプがどのように機能するかを学びます。 MP3ファイルの16進データのすべてのビットを読み取り、スピーカーに再生させたい。 :)データが実際にMP3ファイルにどのように保存されているかまだわからないので、どこから始めればよいのかわかりません。

ご協力いただきありがとうございます

18
Midas

mp3ファイルの構造 を読むことから始めます。次に、まだ興味がある場合は、 各フレームのオーディオデータをデコードする方法 に関する優れたチュートリアルを見つけてください。かなり複雑なので、最初から行うにはかなりの時間が必要です。

19
jball

MP3形式の仕様は ここ から購入できます。約160EURです。

ちなみに、これは「16進データ」ではありません。人間以外の読み取り可能なデータを「16進数」(記数法)と呼ぶ段階にある場合は、複雑なデコード/エンコードアルゴリズムを含むバイナリデータ形式を真っ先に掘り下げるのは少し難しいかもしれません。とりあえずあなたには多すぎます。

.wavファイルを再生できるプレーヤーを作成することから始めてみませんか? (ファイル形式とさまざまなオーディオ形式を考慮に入れて、妥当な.wavファイルを作成してください)

19
Matti Virkkunen

私は少し調査をしました、多分それはあなたを助けるでしょう。

ファイル構造

enter image description here MP3ファイルは、ヘッダーとデータブロックで構成される複数のMP3フレームで構成されています。この一連のフレームは、エレメンタリストリームと呼ばれます。フレームは独立したアイテム(「バイトリザーバー」)ではないため、任意のフレーム境界で抽出することはできません。 MP3データブロックには、周波数と振幅に関する(圧縮された)オーディオ情報が含まれています。この図は、MP3ヘッダーが、有効なフレームの開始を識別するために使用される同期ワードで構成されていることを示しています。この後に、これがMPEG標準であることを示すビットと、レイヤー3が使用されていることを示す2ビットが続きます。したがって、MPEG-1オーディオレイヤー3またはMP3。この後、MP3ファイルによって値が異なります。 ISO/IEC 11172-3は、ヘッダーの仕様とともに、ヘッダーの各セクションの値の範囲を定義します。今日のほとんどのMP3ファイルには、MP3フレームの前後にあるID3メタデータが含まれています。図に示されているように。

LAMEのソースコード

LAMEはMP3ライブラリですが、オープンソースでもあります。つまり、ソースコードをダウンロードして調べることができます。 http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download 自分で調べたところ、 CまたはC++で書かれているので、ラッキーです。 LAMEのソースコードを調べて、その仕組みを理解すれば、独自のMP3ライブラリを作成できるかもしれません。 LAMEはMP3ファイルを再生するためのライブラリではなく、それらをエンコードするためのライブラリであることに注意してください。しかし、MP3を読み取る代わりに作成するため、他のMP3プレーヤーライブラリよりも構造が少し明確になるはずです。

MP3ファイル形式の説明

これはMP3がどのようにうまく機能するかも説明しているようですが、それは純粋な理論なので、多くの忍耐が必要になります。 http://www.mp3-converter.com/mp3codec/

9
RobinJ

まあ、それは難しいでしょう:)

とにかく、アプリケーションは2つの部分で構成されている必要があります解凍ライブラリ/ルーチンとメインバックエンド、解凍されたデータブロックを取り、実際には再生

"Data Compression" book by David Salomonは、デコーダーが実際にどのようにすべきかを理解することをお勧めしますdo it。残念ながら、2番目の部分のバリエーションは広すぎて、1つの文でカバーできません。

オープンソースを調査することもできますmp3デコーダー/デコードライブラリ like this one。

5
M. Williams

あなたが自分でそれをすることを主張するならば、あなたはほとんどスペックから始めなければなりません:

http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html

0
Neil N

タスクには、 http://sourceforge.net/projects/mpg123net/ のようなデコーダライブラリを使用することをお勧めします。

MADデコーダーもあります... http://www.underbit.com/products/mad/

Mp3ファイルを正しく読み取るには、多くの計算が必要です。実際には、そのファイルには入りたくないと思います...

0