Aby wykonać czynność, możesz użyć: VolumeShaper
w aplikacji do odtwarzania dźwięku
zanikania, zanikanie, przenikanie, wyciszanie i inne automatyczne woluminy
przejścia. Klasa VolumeShaper
jest dostępna w Androidzie 8.0 (poziom API 26)
i później.
Tworzysz VolumeShaper
, wywołując funkcję createVolumeShaper()
w instancji
AudioTrack
lub MediaPlayer
.
VolumeShaper
wykorzystuje wyłącznie dźwięk wygenerowany przez funkcję AudioTrack lub MediaPlayer
który jest jego autorem.
VolumeSHA-Configurationr.
Działanie elementu VolumeShaper
jest określone przez
VolumeShaper.Configuration
Konfiguracja określa parametr
*krzywa głośności, typ interpolatora i czas trwania*.
Krzywa objętości
Krzywa objętości przedstawia zmianę amplitudy w czasie. Jest ona określana przez parę
tablic zmiennoprzecinkowych, x[] i y[], które definiują serię punktów kontrolnych. Każda (x, y)
reprezentuje odpowiednio czas i objętość. Tablice muszą mieć taką samą długość
oraz zawierają od 2 do 16 wartości. (Maksymalna długość krzywej to
zdefiniowane w zasadzie getMaximumCurvePoints()
).
Współrzędne czasowe są podawane dla przedziału [0,0, 1,0]. Pierwszy raz punkt musi mieć wartość 0,0, ostatni musi mieć wartość 1,0, a czasy muszą być monotonicznie rośnie.
Współrzędne objętości są podawane za pomocą skali liniowej w danym przedziale czasu [0,0;1,0].
Typ interpolatora
Krzywa głośności zawsze przechodzi przez określone punkty sterujące. Wartości
między punktami kontrolnymi są wysuwane przez krzywkę zgodnie z
typu interpolatora konfiguracji. Dostępne są 4 stałe
Typy interpolatora (VolumeShaper
):
- Kształtowanie woluminów.Konfiguracja.INTERPOLATOR_TYPE_STEP
- Rozszerzenie woluminu.Konfiguracja.INTERPOLATOR_TYPE_LINEAR
- Kształtowanie woluminów.Konfiguracja.INTERPOLATOR_TYPE_CUBIC
- Kształtowanie woluminów.Konfiguracja.INTERPOLATOR_TYPE_CUBIC_MONOTONIC
Czas działania
Określone współrzędne czasowe z przedziału [0,0, 1,0] są skalowane do przez określony czas w milisekundach. Określa faktyczną długość w czas, gdy krzywa objętości jest uruchomiona, a krzywa jest stosowana do na wyjściu audio.
Korzystanie z narzędzia VolumeVolumer
Tworzenie konfiguracji
Przed utworzeniem obiektu VolumeShaper
musisz utworzyć instancję VolumeShaper.Configuration
. Zrób to za pomocą
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})
Rozpocznij odtwarzanie i szkicownik jednocześnie. Dzięki temu odtwarzanie zaczyna się od ciszy, a głośność narasta do pełnej głośności. Wyjaśnienie: przejdź do następnej sekcji.
Uruchamianie narzędzia VolumeVolumer
Mimo że poziom głośności pierwszego punktu kontrolnego jest stosowany do ścieżki audio
po utworzeniu krzywej kształtera nie przesuwa się wzdłuż krzywej
dopóki nie wywołasz metody apply()
za pomocą VolumeShaper.Operation.PLAY
. Po
podczas tworzenia modelu kształtującego, pierwsze wywołanie funkcji apply()
musi określać PLAY
aby uruchomić modelowanie. Powoduje to uruchomienie krzywej od punktu początkowego do
ostatnie punkty kontrolne:
Kotlin
kształtur.apply(Volume shaper.Operation.PLAY)
Java
kształtur.apply(Volume shaper.Operation.PLAY);
Gdy narzędzie do kształtu jest uruchomione, możesz wykonywać naprzemienne wywołania apply()
określające
ODTWARZANIE i ODTWARZANIE. Zmienia to kierunek odczytu
punkty kontrolne za każdym razem.
Kształtarka stale reguluje głośność i przechodzi przez wszystkie punkty kontrolne aż wygasa. Dzieje się tak, gdy kształtująca dobiega końca (w przypadku PLAY lub pierwszym (w przypadku operacji ODWRÓĆ) punkt kontrolny na krzywej.
Po wygaśnięciu narzędzia kształtujące głośność pozostanie na ostatnim ustawieniu, które może być
pierwszy lub ostatni punkt kontrolny. Możesz zadzwonić pod numer VolumeShaper.getVolume()
za
aktualnego poziomu głośności.
Po wygaśnięciu krzywej możesz uruchomić kolejne wywołanie apply()
, aby uruchomić krzywą
w przeciwnym kierunku. Na przykład jeśli kształter wygasł w trakcie działania
PLAY
, następny apply()
musi mieć wartość REVERSE
. Dzwonię pod PLAY
po PLAY
wygasła lub REVERSE
po upływie REVERSE
nie ma skutku.
Musisz naprzemienne operacje PLAY
i REVERSE
. Nie ma możliwości odtworzenia
od pierwszego do ostatniego punktu kontrolnego, a następnie ponownie ją uruchom
pierwszego punktu kontrolnego. Możesz użyć metody replace()
opisanej w następnej sekcji
aby zastąpić krzywą swoją kopią. Resetuje kształt,
wymaga wykonania operacji PLAY
do ponownego uruchomienia.
Zmiana krzywej
Aby zmienić krzywą VolumeShaper
, użyj metody replace()
. Ta metoda wymaga
konfiguracji, operacji i parametru złączenia. Możesz wywołać funkcję
replace()
w dowolnym momencie, gdy narzędzie kształtujące jest uruchomione lub po jego wygaśnięciu:
Kotlin
wartość newConfig = Volume shaper.Configuration.Builder() .setDuration(1000) .setCurve(floattablicaOf(0f; 0.5f); floattablicaOf(0f; 1f)) .setInterpolatorType(VolumeStatusr.Configuration.INTERPOLATOR_TYPE_LINEAR) .build() złączenie wartości = prawda kształtr.replace(newConfig, Volume shaper.Operation.PLAY, Join)
Java
Volume Conditionr.Configuration newConfig = nowy model VolumeVolumer.Configuration.Builder() .setDuration(1000) .setCurve(new float[] {0.f, 0.5f}, nowa liczba zmiennoprzecinkowa[] {0.f, 1.f}) .setInterpolatorType(VolumeStatusr.Configuration.INTERPOLATOR_TYPE_LINEAR) .build(); boolean Join = true; kształtr.replace(newConfig, Volume shaper.Operation.PLAY, Join);
Gdy wywołasz funkcję replace()
, gdy narzędzie do kształtowania zostanie uruchomione, przestaje zmieniać
przy obecnej wartości. Następnie maszyna do kształtowania spróbuje uruchomić nowy,
od pierwszego punktu kontrolnego. Oznacza to, że argument operacji
decyduje o tym, czy narzędzie kształtujące ma działać po zakończeniu rozmowy. Podaj wartość PLAY
do
natychmiast rozpocznij nową krzywą, wpisz REVERSE
, aby kształtować kontrolkę wstrzymaną na
objętość pierwszego punktu kontrolnego na nowej krzywej. Możesz włączyć modelowanie
później w apply(VolumeShaper.Operation.PLAY)
.
Gdy wywołasz funkcję replace()
za pomocą funkcji join = false
, krzywa kształtująca się od momentu
do poziomu określonego przez jego pierwszy punkt kontrolny. Może to powodować brak ciągłości
w głośności. Możesz tego uniknąć, dzwoniąc do firmy replace()
pod numer join = true
.
Pierwszy punkt kontrolny nowej krzywej zostanie ustawiony na bieżący poziom krzywej
kształtowania i skaluje głośność wszystkich punktów kontrolnych między pierwszym
aby zachować względny kształt nowej krzywej (ostatni punkt kontrolny to
bez zmian). Operacja skalowania trwale zmienia punkty kontrolne w
nowej krzywej kształtującego.
Usuwanie obiektu VolumeVolumer
System zostanie zamknięty, a klasa VolumeShaper
odbędzie się w ramach czyszczenia pamięci, gdy jej stan: AudioTrack
lub
Usługa MediaPlayer
została wycofana lub nie jest już używana. Możesz wywołać metodę close()
na szpilce, aby natychmiast ją zniszczyć. System usuwa szlifierkę z
potok audio w ciągu około 20 ms. Zachowaj ostrożność, zamykając VolumeShaper
podczas odtwarzania dźwięku. Jeśli kształter ma głośność niższą niż 1,0 podczas połączenia
close()
, skala głośności narzędzia do kształtowania zmieni się na 1,0. Może to spowodować nagłe
głośniej.