Performans yapmak için ses uygulamasında VolumeShaper
kullanabilirsiniz
Kararma, kararma, çapraz geçiş, alçalma ve diğer kısa otomatik ses düzeyi
oluşturabilirsiniz. VolumeShaper
sınıfı, Android 8.0 (API düzeyi 26) sürümünde kullanılabilir.
oluşturabilirsiniz.
Şu örneğin bir örneğinde createVolumeShaper()
işlevini çağırarak bir VolumeShaper
oluşturursunuz:
AudioTrack
veya MediaPlayer
. İlgili içeriği oluşturmak için kullanılan
VolumeShaper
yalnızca AudioTrack veya MediaPlayer tarafından üretilen seste çalışır
harekete geçti.
VolumeShaper.Yapılandırması
VolumeShaper
davranışı şu şekilde tanımlanır:
VolumeShaper.Configuration
. Yapılandırma,
*ses eğrisi, interpolator türü ve süre.*
Hacim eğrisi
Hacim eğrisi, zaman içinde genlik değişimini temsil eder. Bir çiftle tanımlanır
bir dizi kontrol noktasını tanımlayan x[] ve y[] kayan dizileri. Her biri (x, y)
çifti sırasıyla zamanı ve hacmi temsil eder. Dizilerin uzunluğu eşit olmalıdır
ve en az 2, en fazla 16 değer içermelidir. (Maksimum eğri uzunluğu
getMaximumCurvePoints()
içinde tanımlanır.)
Zaman koordinatları, [0,0, 1,0] aralığı üzerinden verilir. İlk kez punto 0,0, son değer 1,0 ve saatler tekdüze olmalıdır. artıyor.
Hacim koordinatları, aralık üzerindeki doğrusal ölçekte belirtilir [0,0, 1,0] olarak değiştirildi.
İnterpolatör türü
Hacim eğrisi her zaman belirtilen kontrol noktalarından geçer. Değerler
kontrol noktaları arasındaki kontrol noktalarına göre bir eğriyle türetilir
belirleyicidir. Kullanılabilir
VolumeShaper
interpolator türü:
- VolumeShaper.Yapılandırma.INTERPOLATOR_TYPE_STEP
- VolumeShaper.Yapılandırma.INTERPOLATOR_TYPE_LINEAR
- VolumeShaper.Yapılandırma.INTERPOLATOR_TYPE_CUBIC
- VolumeShaper.Yapılandırma.INTERPOLATOR_TYPE_CUBIC_MONOTONIC
Süre
[0,0, 1,0] aralığında belirtilen zaman koordinatları milisaniye cinsinden belirttiğiniz süre. Bu, toplamda şekillendirici çalışırken ve eğriyi çembere uygularken hacim eğrisinin zamanı ses çıkışını kullanın.
VolumeShaper Kullanma
Yapılandırma oluşturma
Bir VolumeShaper
derlemeden önce VolumeShaper.Configuration
örneği oluşturmanız gerekir. Bunu bir
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})
Oynatmayı ve şekil oluşturucuyu aynı anda başlatın. Bu, oynatmanın ses sessizden başlar ve ses en üst düzeye çıkarılır. Bunun açıklaması ele alacağız.
VolumeShaper Çalıştırma
İlk kontrol noktasının ses düzeyi, ses yoluna uygulansa da
Şekillendirici oluşturulduğunda, şekillendirici eğri boyunca ilerlemez
siz VolumeShaper.Operation.PLAY
ile apply()
yöntemini çağırıncaya kadar. Şu tarihten sonra:
şekillendirici oluşturuluyorsa, apply()
ilk çağrısında PLAY
belirtilmelidir
işlemini başlatacağım. Bu, eğriyi ilkinden başlayıp
son kontrol noktaları:
Kotlin
Shar.apply(VolumeShaper.Operation.PLAY)
Java
Shar.apply(VolumeShaper.Operation.PLAY);
Şekillendirici çalışırken, alternatif apply()
çağrılarını belirten bir ileti oluşturabilirsiniz.
REVERSE ve PLAY işlemleri. Bu,
kontrol noktaları anlamına gelir.
Şekillendirici, ses düzeyini sürekli olarak ayarlar ve tüm kontrol noktalarından geçer. kullanım süresi dolana kadar bekleyin. Bu, şekil şekli sonuncuya ulaştığında gerçekleşir (PLAY için işlemi) veya ilk (GERİ ALMA işlemi için) denetim noktasını seçin.
Şekillendiricinin süresi dolduğunda, ses düzeyi son ayarda kalır. Bu değer,
kontrol noktası
olabilir. VolumeShaper.getVolume()
numaralı telefonu arayabilirsiniz:
mevcut ses düzeyini istediğiniz zaman değiştirebilirsiniz.
Şekillendiricinin süresi dolduktan sonra, eğriyi çalıştırmak için başka bir apply()
çağrısı yayınlayabilirsiniz
yönde görüyorum. Örneğin, şekillendiricinin süresi çalışırken
PLAY
, sonraki apply()
REVERSE
olmalıdır. PLAY
şu süre geçtikten sonra PLAY
aranacak:
süresi dolduktan sonra veya REVERSE
süresi dolduktan sonra REVERSE
ürününün herhangi bir etkisi olmaz.
PLAY
ve REVERSE
işlemlerini değiştirmeniz gerekir. Burada hiçbir şekilde
öncekinden son kontrol noktalarına kadar eğimli olup daha sonra
ilk denetim noktasıdır. Sonraki adımda açıklanan replace()
yöntemini kullanabilirsiniz
bölümünde, eğriyi kendisinin bir kopyasıyla değiştirin. Bu, şekillendiriciyi sıfırlar.
PLAY
işleminin yeniden başlatılması gerekiyor.
Eğriyi değiştirme
VolumeShaper
eğrisini değiştirmek için replace()
yöntemini kullanın. Bu yöntem
bir yapılandırma, işlem ve birleştirme parametresidir. Örneğin,
replace()
yöntemini istediğiniz zaman değiştirebilirsiniz: Şekillendirici çalışırken veya süresi dolduktan sonra:
Kotlin
val newConfig = VolumeShaper.Configuration.Builder() .setDuration(1000) .setCurve(floatArrayOf(0f; 0,5f); floatArrayOf(0f; 1f)) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .build() val Join = doğru Shar.replace(newConfig, VolumeShaper.Operation.PLAY, birleştirme)
Java
VolumeShaper.Configuration newConfig = yeni VolumeShaper.Configuration.Builder() .setDuration(1000) .setCurve(yeni kayan noktalı[] {0.f, 0.5f}, yeni kayan nokta[] {0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .build(); boolejoin = true; Shar.replace(newConfig, VolumeShaper.Operation.PLAY, join);
Şekillendirici çalışırken replace()
işlevini çağırdığınızda,
ve şu anki değerinde kalır. Ardından şekillendirici, yeni yapıya başlamaya çalışır.
eğrisini oluşturabilirsiniz. Yani, işlem bağımsız değişkeni
Şekillendiricinin çağrıdan sonra çalışıp çalışmayacağını kontrol eder. Şunu belirtmek için PLAY
değerini belirtin:
yeni eğriyi hemen başlatın, şekillendiriciyi duraklatılmış durumda bırakmak için REVERSE
değerini belirtin
yeni eğrideki ilk kontrol noktasının hacmi. Şekillendiriciyi oluşturmaya başlayabilirsiniz
daha sonra apply(VolumeShaper.Operation.PLAY)
ile devam edin.
join = false
ile replace()
çağrısı yaptığınızda, şekillendiricinin eğrisinin başlangıç noktası:
ilk kontrol noktası tarafından belirtilen seviye. Bu durum,
verilerin kesilmesine
ses düzeyinde kontrol edin. join = true
üzerinden replace()
numaralı telefonu arayarak bu durumdan kaçınabilirsiniz.
Bu, yeni eğrinin ilk kontrol noktasını
kontrol noktalarının hacmini
olarak ölçeklendirir.
Yeni eğrinin göreceli şeklini korumak için son kontrol noktası (son kontrol noktası
değiştirilebilir. Ölçeklendirme işlemi,
yeni eğrisi üzerinde çalışıyorum.
VolumeShaper'ı Kaldırma
AudioTrack
veya şu durumlarda sistem kapatılır ve atık VolumeShaper
toplanır:
MediaPlayer
yayınlandı veya artık kullanılmıyor. close()
yöntemini çağırabilirsiniz
hemen imha etmeye çalışır. Sistem, şekil oluşturucuyu
ses ardışık düzenine yaklaşık 20 ms. VolumeShaper
öğesini kapatırken dikkatli olun
yardımcı olur. Aradığınızda şekillendiricinin sesi 1,0'dan azsa
close()
, şekillendiricinin ses ölçeği 1,0 olarak değişir. Bu durum aniden
yardımcı olabilir.