4

いくつかの.m4aファイルを再生しようとしていますが、JAADはAACのデコードのみをサポートしていることを理解していますが、sourceDataLineを取得できる曲があり、それらを再生しようとすると、次のような動作が発生します。これ:

読み取り:1024バイト。

読み取り:512バイト。

読み取り:-1バイト。

これを実行する場合:

// read from the input
bytesRead = audioInputStream.read(tempBuffer, 0, tempBuffer.length);

System.out.println("We read: " + bytesRead + " bytes.");

bytesRead==-1まで

この特定のファイルの場合、AudioFormatベースフォーマットは次のようになります:MPEG1L1 48000.0 Hz、サンプルあたりの不明なビット、モノラル、不明なフレームサイズ、125.0フレーム/秒。

次に、AudioFormatのdecodeFormatは次のようになります:PCM_SIGNED 48000.0 Hz、16ビット、モノラル、2バイト/フレーム、リトルエンディアン

次のコード行を使用して変換を行います。

AudioFormat baseFormat = audioInputStream.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 
                baseFormat.getSampleRate(),
                16,
                baseFormat.getChannels(),
                baseFormat.getChannels() * 2,
                baseFormat.getSampleRate(),
                false);

私はここで何か間違ったことをしていますか?その2行目が実際に機能することを完全には理解していませんが、MP3SPIを使用してMP3ファイルをデコードするために問題なく機能しています。

ここでのガイダンスを本当にいただければ幸いです。

4

1 に答える 1

2

ファイルの長さが 1024 + 512 バイトしか表示されないのは問題ですか? (これはオーディオ ファイルとしては非常に短いものです!) それとも、ファイル形式に関する質問ですか? Java でサポートされている一連の wav ファイル形式と互換性のない .wav ファイルの mp3 をデコードしようとすると、問題に遭遇する人もいます。

あなたが参照している「2行目」は、新しいFileFormatの作成だと思いますよね?これは単に、入力ストリームからデコードされたものに基づいて新しい Format を作成する行為です。おそらく、再生時に新しいフォーマットを使用することになるでしょう。

新しいフォーマットのポイントは、おそらく、システムと互換性のあるフォーマットでデータが再生されるようにすることです。それは次のように述べています:(1)着信エンコーディング形式に関係なく、署名付きPCMが使用されます。(2) 同じサンプルレートが使用されます (私のシステムは 44100 しかサポートしていませんが、あなたのシステムが 48000 を許可していることに驚きました)。(3) 16 ビットは、元の元のファイルで使用されているビット数に関係なく、サンプルあたりの新しいビット数になります。(4) 元のファイルと同じ数のチャンネルが使用されます。(5) チャネル数 * 2 がフレーム サイズと見なされます (1 サンプルあたり 16 ビットの場合、理にかなっています) (6) 同じ 1 秒あたりのフレーム数 (7) バイト オーダーはリトルエンディアンになります。入力ファイルの順序。

このリンクの「コンストラクターの詳細」の下で、このコンストラクターの API (いくつかの優れたドキュメント) を調べることができます: http://docs.oracle.com/javase/6/docs/api/javax/sound/sampled/AudioFormat.html

再生できるようにするためにオーディオ データの一部を変換する必要がある場合は、さらに複雑になります。オーディオ ファイルと形式の変換に関するこのチュートリアルを読みましたか? http://docs.oracle.com/javase/tutorial/sound/converters.html

これが少なくとも部分的な助けになることを願っています。私自身は JAAD を使用したことがないので、この投稿があまり役に立たないかどうかは理解できます。

于 2012-05-07T03:16:28.250 に答える