2011-12-25 16 views
0

私が使用したのは、javax.sound.sampledパッケージを初めて使用したため、私が使用していたオーディオをよりコントロールするためでしたAudioClipなどの簡単なサウンドソリューションコントロールを使用せずに線の音量を調整する方法

私が通じ読んだ:Oracle's Sound Tutorial (または少なくとも同じくらい私が把握できたとして)が、私は、彼らが与えるように見えたClipインタフェースを使用してLineでの再生のレベル/音量を調節する方法が表示されませんあなたがサウンドを作成することができるパッケージの部分にこれらの種類のオプションがありますが、これらの調整を私のLineまたは私のAudioInputStreamを通して行う方法が見つかりません。

Iは

フロートコントロール、テキストを[これ]ページを見つけたが、一方、パン、バランス、または体積などの連続可変制御を表すためによく適しています。

が、私のコンピュータに何行は(Line.getControls()を使用して)すべてのコントロールを返さない

(私はthisに似FloatControl.Type.VOLUMEを受け入れるためにラインを強制しようとしたが、私は、「サポートされていない制御型の例外」を取得)

Lineのコントロールを使用して、Line(Clipインターフェイスを使用)のボリューム/レベルを変更する唯一の方法はありますか?または、AudioInputStreamのボリュームを変更することは可能ですか?

また、既存の行にコントロールを追加する方法はありますか?

答えて

1

FloatControl.Type.VOLUMEを使用する代わりに、FloatControl.Type.MASTER_GAINを使用します。

0

少なくとも1つの方法が他にあります。 (私はコントロールラインを取得するのにも苦労していましたが、Travis Meyersの推薦によると、マスターラインが働いていたことを知りました。あらゆるフレームのオーディオ値をボリューム係数で表します。 Javaチュートリアルでは、このテクニックを渡すリファレンスを作成しますが、そのドキュメントの他の部分と同様、明示的な例は提供していません。

したがって、バッファのバッファを取得するときは、バッファをループしてバイトを集めてオーディオ値を取得する必要があります。次に、音量係数(たいていは0〜1.0の浮動小数点数)を掛けて、オーディオ値を逆数分解してバイトに戻します。

これは機能します。私は粗いJavaのThereminで試してみることができます。私はまた、そのプログラムでフレームごとに自分のピッチを操作します。しかし、プログラムにはまだ問題があります!私はGUIイベントデータをオーディオループにパイプする方法を改善するために今作業しています。また、バッファごとにではなく、フレームごとの変化に対応しています。しかし、ほとんどの用途では、バッファごとに問題ありません。

つまり、聞き取るべきことは、不連続を引き起こす音量変化を送信することに注意して、大きな音を発生させることです。クリックの原因となる量は、異なるボリューム範囲で異なる場合があります。また、音量係数を0から1.0にすると、音量が直線的に低下することはありません。

関連する問題