다음을 통해 공유


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

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

에 대한 android.media.SoundPoolJava 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

생성자

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

생성자입니다.

SoundPool(IntPtr, JniHandleOwnership)

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

속성

Class

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

(다음에서 상속됨 Object)
Handle

기본 Android 인스턴스에 대한 핸들입니다.

(다음에서 상속됨 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()

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

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

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

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

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 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 클래스는 애플리케이션에 대한 오디오 리소스를 관리하고 재생합니다.

적용 대상