私はとOracleのJDKからコードをインポートしていOpenJDKの(Javaの8)。解決するために残された唯一の問題は、Javaの音量変更する方法であるクリップ (java.sound.sampled.Clipを)?でも、検索の時間後に私はクリップの音量を変更する方法を見つけることができませんでした。
OracleのJDK私はそれをやった使用:
FloatControl floatControl = (FloatControl) myClip.getControl(FloatControl.Type.MASTER_GAIN);
floatControl.setValue(myVolume);
私も試してみましたFloatControl.Type.VOLUME
が、それはサポートされていません。
私はだけではなく、別のクラス/パッケージを使用して私の全体のオーディオシステムを書き換えるのクリップの音量を変更するのが大好きです。
私が持っているアイデアはと着信オーディオデータ乗算することでfloat
どちらかのボリュームを下げたり上げます。欠点は、として、それはおそらく高価になるだろうということです私は、オーディオを再生しながら音量を変更する必要があるプログラムが起動されたときに一度それをやってするのではなく。
編集:私はそれをしている単純ではないことを推測しClip
、単一の回答やコメントがありませんよう。私はさておき、その後他に何を使用することができますClip
(一度に私が遊んでトップ30の音をアップしている可能性がありますように)簡単にセットアップすることができ、軽量であること?
Linuxの5.0.0-27上のKubuntu 19.04
OpenJDKの1.8.0_222
私が書いたAudioCueを、この非常に目的のために。それは自由だし、ライセンスはBSD(オープンソース)です。Java-Gaming.orgでゲームプログラマーの数は良い結果でそれを使用しています。
余分な機能を備えた、かなり密接クリップのAPIに従うように設定されています。これは、リアルタイムのボリューム、パン、および周波数能力を持っており、同じキューの重なり合うコピーをプレイするユーザーに許可します。
それはかなり小さいので、唯一の5つのクラスファイルは、あります。これらのうち、AudioMixerクラスの使用はオプションですが、一度に30の音を持っている場合、それは各サウンドの出力ラインを実行しているのではなく、単一のSourceDataLineにすべてを漏斗として、それはおそらく、参考になります。
私はそれを設定すると、ヘルプに満足している、または任意の質問に答えます。
はい、Javaはクリップを提供コントロールが問題となっています。多くは、彼らが実装されているかどうかのように、関係するコンピュータシステム/ハードウェアに依存します。そしてコントロールは、貧しい粒度を持っている唯一のバッファ境界で音量を変更する傾向があります。AudioCueは「CD品質」.WAVとして内部オーディオを格納し、単一のオーディオフレームのダウン粒状です。
考慮すべきもう一つの選択肢は、githubのプロジェクトですTinySound。それはAudioCueより大きなプロジェクトですが、それでもかなり小さく、よく働きます。それはボリュームのリアルタイムのフェーダーを持っている場合、私は思い出すことができません。それはないかもしれません。これの主な利点は、それが圧縮された.oggファイルを扱うことができるということです。あなたが圧縮を使用する必要がある場合しかし、私は助けることができるかもしれません。