Share via


SoundPool 클래스

정의

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

[Android.Runtime.Register("android/media/SoundPool", DoNotGenerateAcw=true)]
public class SoundPool : Java.Lang.Object
[<Android.Runtime.Register("android/media/SoundPool", DoNotGenerateAcw=true)>]
type SoundPool = class
    inherit Object
상속
SoundPool
특성

설명

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

SoundPool은 APK 내의 리소스 또는 파일 시스템의 파일에서 메모리에 로드할 수 있는 사운드 샘플의 컬렉션입니다. SoundPool 라이브러리는 MediaCodec 서비스를 사용하여 오디오를 원시 16비트 PCM으로 디코딩합니다. 이렇게 하면 애플리케이션이 재생 중에 CPU 부하 및 압축 해제 대기 시간을 겪지 않고 압축된 스트림과 함께 제공될 수 있습니다.

사운드풀 소리는 메모리로 미리 코딩되므로 짧을 것으로 예상됩니다. 디코딩된 각 사운드는 내부적으로 1메가바이트 스토리지로 제한되며, 이는 44.1kHz 스테레오에서 약 5.6초를 나타냅니다(기간은 샘플 속도가 낮거나 모노 채널 마스크에서 비례적으로 길다). 디코딩된 오디오 사운드는 소리당 1메가바이트 스토리지 공간을 초과하는 경우 잘립니다.

대기 시간이 짧은 재생 외에도 SoundPool은 한 번에 렌더링되는 오디오 스트림 수를 관리할 수 있습니다. SoundPool 개체가 생성되면 maxStreams 매개 변수는 이 단일 SoundPool에서 한 번에 재생할 수 있는 최대 스트림 수를 설정합니다. SoundPool은 활성 스트림 수를 추적합니다. 최대 스트림 수를 초과하는 경우 SoundPool은 우선 순위에 따라 이전에 재생한 스트림을 자동으로 중지한 다음, 해당 우선 순위 내의 연령별로 중지합니다. 최대 스트림 수를 제한하면 CPU 로드를 제한하고 오디오 혼합이 시각적 개체 또는 UI 성능에 영향을 줄 가능성을 줄이는 데 도움이 됩니다.

0이 아닌 루프 값을 설정하여 소리를 반복할 수 있습니다. 값이 -1이면 소리가 영원히 반복됩니다. 이 경우 애플리케이션은 소리를 중지하기 위해 stop() 함수를 명시적으로 호출해야 합니다. 0이 아닌 다른 값으로 인해 소리가 지정된 횟수를 반복합니다. 예를 들어 값이 3이면 소리가 총 4번 재생됩니다.

재생 속도도 변경할 수 있습니다. 재생 속도가 1.0이면 사운드가 원래 주파수에서 재생됩니다(필요한 경우 하드웨어 출력 빈도로 다시 샘플링됨). 재생 속도가 2.0이면 사운드가 원래 주파수의 두 배로 재생되고 재생 속도가 0.5이면 원래 주파수의 절반으로 재생됩니다. 재생 속도 범위는 0.5~2.0입니다.

우선 순위는 낮음에서 높은 값으로 실행됩니다. 즉, 숫자가 높을수록 우선 순위가 높습니다. Play()를 호출하면 SoundPool을 만들 때 maxStreams 매개 변수에서 설정한 값을 초과하는 활성 스트림 수가 발생할 때 우선 순위가 사용됩니다. 이 경우 스트림 할당자는 가장 낮은 우선 순위 스트림을 중지합니다. 우선 순위가 동일한 여러 스트림이 있는 경우 중지할 가장 오래된 스트림을 선택합니다. 새 스트림의 우선 순위가 모든 활성 스트림보다 낮은 경우 새 소리가 재생되지 않고 play() 함수가 streamID를 0으로 반환합니다.

일반적인 사용 사례를 살펴보겠습니다. 게임은 여러 수준의 플레이로 구성됩니다. 각 수준에 대해 해당 수준에서만 사용되는 고유한 소리 집합이 있습니다. 이 경우 게임 논리는 첫 번째 수준이 로드될 때 새 SoundPool 개체를 만들어야 합니다. 수준 데이터 자체에는 이 수준에서 사용할 소리 목록이 포함될 수 있습니다. 로드 논리는 적절한 SoundPool.load() 함수를 호출하는 소리 목록을 반복합니다. 이 작업은 일반적으로 재생에 필요하기 전에 오디오를 원시 PCM 형식으로 압축 해제하는 시간을 허용하기 위해 프로세스 초기에 수행해야 합니다.

소리가 로드되고 재생이 시작되면 애플리케이션은 SoundPool.play()를 호출하여 소리를 트리거할 수 있습니다. 재생 스트림을 일시 중지하거나 다시 시작할 수 있으며, 애플리케이션은 도플러 또는 합성 효과에 대한 재생 속도를 실시간으로 조정하여 피치를 변경할 수도 있습니다.

리소스 제약 조건으로 인해 스트림을 중지할 수 있으므로 streamID는 스트림의 특정 instance 대한 참조입니다. 더 높은 우선 순위 스트림을 재생할 수 있도록 스트림이 중지되면 스트림이 더 이상 유효하지 않습니다. 그러나 애플리케이션은 오류 없이 streamID에서 메서드를 호출할 수 있습니다. 이렇게 하면 애플리케이션이 스트림 수명 주기와 관련될 필요가 없으므로 프로그램 논리를 간소화하는 데 도움이 될 수 있습니다.

이 예제에서 플레이어가 레벨을 완료하면 게임 논리는 SoundPool.release()를 호출하여 사용 중인 모든 네이티브 리소스를 해제한 다음 SoundPool 참조를 null로 설정해야 합니다. 플레이어가 다른 레벨을 시작하면 새 SoundPool이 생성되고, 소리가 로드되고, 재생이 다시 시작됩니다.

에 대한 Java 설명서입니다 android.media.SoundPool.

이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.

생성자

SoundPool(Int32, Stream, Int32)
사용되지 않음.

생성자입니다.

SoundPool(IntPtr, JniHandleOwnership)

JNI 개체의 관리되는 표현을 만들 때 사용되는 생성자입니다. 런타임에서 호출합니다.

속성

Class

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
Handle

기본 Android instance 대한 핸들입니다.

(다음에서 상속됨 Object)
JniIdentityHashCode

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
JniPeerMembers

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

PeerReference

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
ThresholdClass

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

ThresholdType

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

메서드

AutoPause()

모든 활성 스트림을 일시 중지합니다.

AutoResume()

이전에 활성 상태였던 모든 스트림을 다시 시작합니다.

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
Dispose()

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
Dispose(Boolean)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
GetHashCode()

개체의 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
JavaFinalize()

가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다.

(다음에서 상속됨 Object)
Load(AssetFileDescriptor, Int32)

자산 파일 설명자에서 소리를 로드합니다.

Load(Context, Int32, Int32)

지정된 APK 리소스에서 소리를 로드합니다.

Load(FileDescriptor, Int64, Int64, Int32)

FileDescriptor에서 소리를 로드합니다.

Load(String, Int32)

지정된 경로에서 소리를 로드합니다.

LoadAsync(AssetFileDescriptor, Int32)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

LoadAsync(Context, Int32, Int32)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

LoadAsync(FileDescriptor, Int64, Int64, Int32)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

LoadAsync(String, Int32)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

Notify()

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 Object)
NotifyAll()

이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다.

(다음에서 상속됨 Object)
Pause(Int32)

재생 스트림을 일시 중지합니다.

Play(Int32, Single, Single, Int32, Int32, Single)

소리 ID에서 소리를 재생합니다.

Release()

SoundPool 리소스를 해제합니다.

Resume(Int32)

재생 스트림을 다시 시작합니다.

SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

(다음에서 상속됨 Object)
SetLoop(Int32, Int32)

루프 모드를 설정합니다.

SetOnLoadCompleteListener(SoundPool+IOnLoadCompleteListener)

OnLoadCompleteListener에 대한 콜백 후크를 설정합니다.

SetPriority(Int32, Int32)

스트림 우선 순위를 변경합니다.

SetRate(Int32, Single)

재생 속도를 변경합니다.

SetVolume(Int32, Single, Single)

스트림 볼륨을 설정합니다.

Stop(Int32)

재생 스트림을 중지합니다.

ToArray<T>()

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
ToString()

개체의 문자열 표현을 반환합니다.

(다음에서 상속됨 Object)
Unload(Int32)

소리 ID에서 소리를 언로드합니다.

UnregisterFromRuntime()

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
Wait()

현재 스레드가 각성될 때까지 대기하도록 합니다. 일반적으로 <알림을<> 받>거나<<> 중단/em>합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)

이벤트

LoadComplete

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

명시적 인터페이스 구현

IJavaPeerable.Disposed()

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
IJavaPeerable.DisposeUnlessReferenced()

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
IJavaPeerable.Finalized()

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
IJavaPeerable.JniManagedPeerState

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

GetJniTypeName(IJavaPeerable)

SoundPool 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

적용 대상