質問

私が作っているコンピューターゲームでは、明らかにサウンドを再生したいです。これまで、AudioClipを使用してWAVファイルを再生してきました。このアプローチはうまく機能しますが、WAVファイルは巨大になる傾向があります。数秒の音は数百キロバイトになります。 95%の音声でゲームをダウンロードすることに直面しています!

ここでの明らかなオプションは、MP3またはOgg Vorbisを使用することです。しかし、私はこれで限られた成功しか収めていません-JLayerを使用してMP3を再生できます(ただし、同じスレッドで再生されます)。 Oggについては、まったく運がありませんでした。さらに悪いことに、JLayerの法的地位は少し疑わしい側です。

だから私の質問は、Java開発者と、音について何かを実際に知っている一般的な人々の両方に対するものです。どうにか「脂肪をトリミング」できますか? WAVをオフにしますか? JavaでOggをプレイする方法はありますか?代わりに使用すべき他のサウンド形式はありますか?

役に立ちましたか?

解決

JOrbis ライブラリを使用して、OGG音楽を再生できます。実用的なサンプルの使用法については、これらのファイルをご覧くださいこちら

また、16ビットのモノラルサウンドなど、ロスレスオーディオ圧縮の実験も行いました。各サンプルの上位バイトと下位バイトを分離し、それらを次々に配置しました。次に、各バイトが最後のバイトとの差で置き換えられる差分置換を適用しました。そして最後にGZIPを使用してデータを圧縮しました。データサイズを元のサイズの50〜60%に減らすことができました。残念ながら、これでは十分ではなかったため、OGG形式に切り替えました。

8ビット音楽で気づいたことの1つは、音量を変更すると、再生が非常にうるさくなることです。 SourceDataLine.write()の直前にオーディオデータを16ビットにアップサンプリングすることで、この問題を解決しました。

他のヒント

これらは古くなっている可能性がありますが、Xiph.orgチーム(公式にはOggとVorbisを保守しているチーム)によって公式に認識されています。 http://www.vorbis.com/software/#java

説明する問題は、Javaでのサウンドのサービスプロバイダーインターフェイス(SPI)によって解決されます。その結果、クラスパスにJARファイルを追加するだけで、デフォルトのJava Sound APIに機能が追加されます。したがって、コードを変更せずに、より多くのサウンド形式を処理できます。

前回、これを試した Javazoom の人々は、動作するMP3 SPI JARを提供しました。あなたが言及したJLayerに基づいています。

Vorbis OGGには、SPIライブラリもあるようです。 Javazoomの Vorbis SPI のドキュメントをご覧ください。

wav形式のままにする場合...

高品質のサウンドファイルを用意することは、おそらくそれほど重要ではありません。お気に入りのwavエディターを使用して、ビットレートを下げる、モノラルに切り替える、またはその両方を行うことができます。これにより、スペースが大幅に節約され、ゲームのプレイ中に品質の違いに気付くことはありません。

これがお役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top