オーディオ アプリの VolumeShaper
を使用すると、以下を実行できます。
フェードイン、フェードアウト、クロスフェード、ダッキング、その他の短い自動音量
使用できます。VolumeShaper
クラスは Android 8.0(API レベル 26)で使用できます。
以降のバージョンです。
VolumeShaper
を作成するには、インスタンスの createVolumeShaper()
を呼び出します。
AudioTrack
または MediaPlayer
。「
VolumeShaper
は、AudioTrack または MediaPlayer によって生成されたオーディオでのみ動作します。
作成しました。
VolumeShaper.Configuration
VolumeShaper
の動作は、
VolumeShaper.Configuration
。この構成では、
*ボリューム カーブ、インターポレーターのタイプ、時間*
音量カーブ
音量カーブは、振幅(音量)の経時的な変化を表します。次のペアで定義されます。
一連の制御点を定義する浮動小数点配列の x[] と y[] です。各 (x, y)
ペアはそれぞれ時間とボリュームを表します。配列は同じ長さでなければなりません
2 ~ 16 個の値を含めます(カーブの最大長は
getMaximumCurvePoints()
で定義)
時間座標の区間は [0.0, 1.0] です。初めて 点は 0.0、最後の点は 1.0、時間は単調でなければなりません 増え続けています
音量座標は、区間の線形スケールで指定します [0.0, 1.0]。
補間タイプ
音量カーブは指定されたコントロール ポイントを必ず通ります。値
に従って、スプラインによって導き出されます。
interpolator タイプを指定します。使用可能なパラメータには 4 つの定数が
VolumeShaper
interpolator タイプ:
- VolumeShaper.Configuration.INTERPOLATOR_TYPE_STEP
- VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR
- VolumeShaper.Configuration.INTERPOLATOR_TYPE_CUBIC
- VolumeShaper.Configuration.INTERPOLATOR_TYPE_CUBIC_MONOTONIC
所要時間
区間 [0.0, 1.0] で指定された時間座標は、 ミリ秒単位で指定する期間です。これにより、広告の実際の長さが シェーパーが実行されてカーブが適用されるときのボリューム カーブの時間 調整します。
VolumeShaper を使用する
設定を作成する
VolumeShaper
を構築する前に VolumeShaper.Configuration
のインスタンスを作成する必要があります。これを行うには、
VolumeShaper.Configuration.Builder()
:
Kotlin
val config: VolumeShaper.Configuration = VolumeShaper.Configuration.Builder() .setDuration(3000) .setCurve(floatArrayOf(0f, 1f), floatArrayOf(0f, 1f)) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .build()
Java
VolumeShaper.Configuration config = new VolumeShaper.Configuration.Builder() .setDuration(3000) .setCurve(new float[] {0.f, 1.f}, new float[] {0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .build();
With no arguments the VolumeShaper.Configuration.Builder
constructor returns a
builder that creates a configuration with default settings:
INTERPOLATOR_TYPE_CUBIC, a one second duration, and no curve. You must add a
curve to the builder before calling build()
.
The framework provides constants for configurations with pre-built curves, each with one second duration:
VolumeShaper.Configuration.LINEAR_RAMP
VolumeShaper.Configuration.CUBIC_RAMP
VolumeShaper.Configuration.SINE_RAMP
VolumeShaper.Configuration.SCURVE_RAMP
Creating a VolumeShaper
To create a VolumeShaper
, call createVolumeShaper()
on an instance of the
appropriate class, passing in a VolumeShaper.Configuration
:
Kotlin
volumeShaper = myMediaPlayer.createVolumeShaper(config) volumeShaper = myAudioTrack.createVolumeShaper(config)
Java
volumeShaper = myMediaPlayer.createVolumeShaper(config); volumeShaper = myAudioTrack.createVolumeShaper(config);
A single track or media player can have many shapers attached to it, and you can
control each shaper separately. The outputs of all the shapers on a track or
player are multiplied together. A VolumeShaper
cannot be shared between
AudioTracks
or MediaPlayers
, but you can use the same configuration in calls
to createVolumeShaper
to build identical shapers on multiple AudioTracks
or
MediaPlayers
.
When you create the shaper, its first control point (at t = 0) is applied to the
audio stream. If the initial volume is not 1.0 and your app is playing material
at create time, your audio might have an abrupt change in volume. Best practice
is to start playing audio from silence and use a VolumeShaper
to implement a
fade-in when playback starts. Create a VolumeShaper
that starts at 0 volume
and fades up. For example:
setCurve(new float[] {0.f, 1.f}, new float[] {0.f, 1.f})
再生とこのシェイパーを同時に開始します。そうすれば 無音から始まり、音量が最大まで上がります。これについては 説明します。
VolumeShaper を実行する
ただし、最初のコントロール ポイントの音量レベルが音声パスに適用されます。
シェイパーが作成されると、シェイパーは曲線に沿って進行しません。
VolumeShaper.Operation.PLAY
で apply()
メソッドを呼び出すまで続きます。変更後
シェーパーを作成するので、apply()
の最初の呼び出しで PLAY
を指定する必要があります。
シェイパーを開始する必要があります。これにより、曲線の始点から終点、
最後のコントロール ポイント:
Kotlin
shaper.apply(VolumeShaper.Operation.PLAY)
Java
shaper.apply(VolumeShaper.Operation.PLAY);
シェーパーの実行中に、apply()
呼び出しを交互に発行して、
REVERSE オペレーションと PLAY オペレーション。これにより、読み上げの方向が
自動的に適用されます。
シェイパーは継続的に音量を調整し、すべてのコントロール ポイントを通過します。 有効期限は期限になります。これは、シェイパーが最後の または 1 番目の制御ポイント(REVERSE 操作の場合)です。
シェイパーが終了しても音量は最後の設定のまま(
最初のコントロール ポイントか最後のコントロール ポイントかを指定できます。VolumeShaper.getVolume()
に発信して、
現在の音量に変更できます。
シェーパーが期限切れになったら、別の apply()
呼び出しを発行して曲線を実行できます。
移動しますたとえば、シェイパーが実行中に期限切れになった場合などは、
PLAY
。次の apply()
は REVERSE
にする必要があります。PLAY
の後に PLAY
に発信:
期限切れになった、または REVERSE
が経過した後の REVERSE
が有効にならない。
PLAY
オペレーションと REVERSE
オペレーションは交互に行う必要があります。コンテンツの再生や
最初のコントロール ポイントから最後のコントロール ポイントまで移動し、その後もう一度
最初のコントロール ポイントになります。replace()
メソッドを使用できます。これについては、次の
セクションを使用して、曲線をそのコピーに置き換えます。シェイパーがリセットされ
PLAY
オペレーションを再起動する必要があります。
カーブを変更する
VolumeShaper
のカーブを変更するには、replace()
メソッドを使用します。このメソッドは、
構成、演算、結合パラメータが含まれますこの関数を呼び出すには、
シェイパーの実行中または期限切れ後に、いつでも replace()
メソッドにアクセスできます。
Kotlin
Val newConfig = VolumeShaper.Configuration.Builder() .setDuration(1,000) .setCurve(floatArrayOf(0f, 0.5f), floatArrayOf(0f, 1f)) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .build() 値結合 = true shaper.replace(newConfig, VolumeShaper.Operation.PLAY, join)
Java
VolumeShaper.Configuration newConfig = 新しい VolumeShaper.Configuration.Builder() .setDuration(1,000) .setCurve(new float[] {0.f, 0.5f}, new float[] {0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .build(); ブール値結合 = true; shaper.replace(newConfig, VolumeShaper.Operation.PLAY, join);
シェイパーの実行中に replace()
を呼び出すと、
現在の値のままとなります。その後、シェイパーは新しい
最初のコントロール ポイントから開始できます。つまり、操作の引数は
シェイパーを呼び出し後に実行するかどうかを制御します。PLAY
の指定先
すぐに新しいカーブを開始します。シェーパーを次の場所で一時停止する場合は REVERSE
を指定します。
新しいカーブの最初のコントロール ポイントの音量です。シェイパーと
後で apply(VolumeShaper.Operation.PLAY)
を使用します。
join = false
を指定して replace()
を呼び出すと、シェイパーは曲線の開始位置で曲線を開始します。
最初のコントロール ポイントで指定されたレベル。これにより 不連続性や不連続性の
表示されます。これを回避するには、join = true
を指定して replace()
を呼び出します。
これにより、新しい曲線の最初の制御点が、
最初のシェーパーと最初の地点間のすべてのコントロール ポイントの音量を
最後に、新しい曲線の相対的な形状を維持します(最後のコントロール ポイントは
変更はありません)。スケーリング オペレーションでは、オブジェクトのコントロール ポイントが永続的に変更され、
新しい曲線を作成します。
VolumeShaper を削除する
AudioTrack
または実行時に VolumeShaper
が終了し、ガベージ コレクションが行われる
MediaPlayer
はリリースされたか、使用されなくなりました。close()
メソッドを呼び出すことができます。
シェイパーを使ってすぐに破棄できます。シェイパーが
約 20 ミリ秒以内に完了できます。VolumeShaper
を閉じるときは注意する
。呼び出し時にシェイパーの音量が 1.0 未満の場合は、
close()
: シェイパーの音量スケールが 1.0 に変更されます。これにより、
検出します。