오디오 앱에서 VolumeShaper
를 사용하여
페이드 인, 페이드 아웃, 크로스 페이드, 볼륨 낮추기 및 기타 짧은 자동 볼륨
사용할 수 있습니다. VolumeShaper
클래스는 Android 8.0 (API 수준 26)에서 사용할 수 있습니다.
및 나중에 확인할 수 있습니다.
인스턴스에서 createVolumeShaper()
를 호출하여 VolumeShaper
를 만듭니다.
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]과 일치해야 합니다.
보간기 유형
볼륨 곡선은 항상 지정된 제어점을 통과합니다. 값
스플라인에 의해 파생됩니다.
보간기 유형입니다. 이 속성은
VolumeShaper
보간기 유형:
- 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()
메서드를 호출할 때까지 후(After)
셰이퍼를 만드는 경우 apply()
의 첫 번째 호출은 PLAY
를 지정해야 합니다.
연산을 완료해야 합니다. 그러면 곡선이 첫 번째 지점에서 시작 지점까지
마지막 컨트롤 포인트:
Kotlin
Shaper.apply(VolumeShaper.Operation.PLAY)
자바
Shaper.apply(VolumeShaper.Operation.PLAY);
셰이퍼가 실행되는 동안 다음을 지정하는 apply()
호출을 번갈아 실행할 수 있습니다.
REVERSE 및 PLAY 연산을 실행합니다. 이렇게 하면
반복해 나갈 수 있습니다.
셰이퍼가 지속적으로 볼륨을 조정하고 모든 컨트롤 포인트를 통과합니다. 만료될 때까지 셰이퍼가 마지막에 도달하면 발생합니다 (PLAY의 경우). 곡선의 첫 번째 제어점 (역방향 연산의 경우)입니다.
셰이퍼가 만료되면 볼륨은 마지막 설정으로 유지되며,
첫 번째 또는 마지막 제어점에 전달합니다. VolumeShaper.getVolume()
에 전화하여 다음 작업을 할 수 있습니다.
언제든지 현재 볼륨 레벨을 변경할 수 있습니다.
셰이퍼가 만료된 후 apply()
호출을 다시 실행하여 곡선을 실행할 수 있습니다.
반대 방향으로 돌리세요 예를 들어 셰이퍼가 실행 중에 만료되고
PLAY
, 다음 apply()
는 REVERSE
여야 합니다. PLAY
이후에 PLAY
에 전화를 겁니다
만료되거나 REVERSE
만료 후 REVERSE
가 만료되지 않습니다.
PLAY
와 REVERSE
연산을 번갈아 수행해야 합니다. 에코를 연주할 방법이 없습니다.
마지막 제어점에서 곡선을 그리며 거기에서 다시 시작합니다.
첫 번째 기준점에 도달할 수 있습니다 replace()
메서드를 사용할 수 있습니다. 자세한 내용은 다음 도움말을 참고하세요.
곡선 자체의 사본으로 대체합니다. 이렇게 하면 셰이퍼가 재설정되고
PLAY
작업을 다시 시작해야 합니다.
곡선 변경
VolumeShaper
의 곡선을 변경하려면 replace()
메서드를 사용합니다. 이 메서드는
구성, 연산, 조인 매개변수가 있습니다. 다음과 같이 호출할 수 있습니다.
replace()
메서드를 호출할 수 있습니다.
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 = true Shaper.replace(newConfig, VolumeShaper.Operation.PLAY, join)
자바
VolumeShaper.Configuration newConfig = 새 VolumeShaper.Configuration.Builder() .setDuration(1000) .setCurve(new float[] {0.f, 0.5f}, new float[] {0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .build() boolean join = true; Shaper.replace(newConfig, VolumeShaper.Operation.PLAY, join);
셰이퍼가 실행되는 동안 replace()
를 호출하면 셰이퍼가
현재 값으로 유지됩니다 그런 다음 셰이퍼는 새로운
곡선 아래에 있습니다. 즉, 연산 인수는
셰이퍼가 호출 후 실행될지 여부를 제어합니다. PLAY
지정 대상:
바로 새 곡선을 시작하고 REVERSE
를 지정하여 셰이퍼를 일시중지한 상태로 둡니다.
새 곡선의 첫 번째 제어점의 볼륨입니다. 셰이퍼를 시작하고
나중에 apply(VolumeShaper.Operation.PLAY)
로.
join = false
로 replace()
를 호출하면 셰이퍼는 다음 위치에서 곡선을 시작합니다.
첫 번째 컨트롤 포인트에서 지정한 레벨입니다. 이로 인해
확인할 수 있습니다 이를 방지하려면 replace()
로 설정한 상태에서 join = true
를 호출하면 됩니다.
그러면 새 곡선의 첫 번째 제어점이
셰이퍼를 만들고 첫 번째와
새 곡선의 상대적 모양을 유지하기 위한 마지막 지점입니다. 마지막 제어점은
변경되지 않음). 확장 작업은
셰이퍼의 새 곡선입니다.
VolumeShaper 제거
VolumeShaper
가 AudioTrack
또는
MediaPlayer
버전이 출시되었거나 더 이상 사용되지 않습니다. close()
메서드를 호출할 수 있습니다.
즉시 파괴할 것입니다. 시스템은 셰이퍼를
매우 짧은 시간 안에 오디오 파이프라인을
만들어 보겠습니다 VolumeShaper
를 닫을 때 주의
사용할 수 있습니다. 호출 시 셰이퍼의 볼륨이 1.0 미만인 경우
close()
이면 셰이퍼의 볼륨 스케일이 1.0으로 변경됩니다. 이로 인해 갑작스러운
규모 증가