Android SoundPool은 얼마나 나쁜가요? 어떤 대안을 사용합니까?
저는 SoundPool
제 일반 게임 개발 라이브러리에서 음향 효과를 구현하는 메커니즘으로 Android를보고 있었습니다. 그것은 보였다 이상적입니다.
그러나 연구의 조금 나타냅니다가 모든 종류의 의 버그 에서 SoundPool
. 의 버그가 SoundPool
여전히 관련이 있습니까?
내가 라이브러리를 개발 중이기 때문에 모든 버그 SoundPool
는 내 라이브러리의 버그가되며 사용자를 그로부터 격리하고 싶습니다.
그래서 제 질문은 기본적으로 오디오에 어떤 API를 사용해야합니까?
AudioTrack
내 믹서를 사용 하고 작성하는 것은 의문의 여지가 없습니다. 그러나 분명히 그것을 피하는 것이 좋습니다. 저에게 디코딩을 제공하는 API가 있습니까?
나는 합리적인 수의 동시 음향 효과 (최소 16 개)를 재생할 수 있어야하며 더 많이 개방 할 수 있어야합니다. 낮은 지연 시간으로 사운드 재생을 시작해야합니다. WAV
파일을 지원해야합니다 (MP3 / Ogg는 중요하지 않음). 음향 효과는 원활한 루핑과 동적 개별 볼륨 조정을 지원해야합니다. Android 앱 수명주기가 제대로 지원되어야합니다.
에 대해 어딘가에 1MB 제한이 있다고 들었습니다 SoundPool
. 이것은 아마도 각 개별 사운드 효과에 대해 허용되지만 모든 버퍼 / 사운드에 대해서는 허용되지 않습니다. 누군가 제한이 정확히 무엇인지 말해 줄 수 있습니까?
마지막으로 낮은 CPU 부하로 압축 된 형식으로 배경 음악도 재생할 수 있어야합니다. 나는 MediaPlayer
이것에 이상적 이라고 생각 합니다. 다른 API와 병행하여 사용할 수 있습니까?
나는 몇 사람이 사용하고 알고 MediaPlayer
에 대한 채우기 위해 SoundPool
. 하지만 필요한 기능을 지원합니까?
내가 놓친 다른 오디오 API가 있습니까?
이 문제에 대한 최신 피드백을 추가하기 위해. 저는 키 누름 소리에 대해 상당히 많은 사용자 기반을 가진 앱에서 얼마 동안 SoundPool을 사용해 왔습니다. 사용 사례 :
- 즉시 재생해야 함
- 병렬로 최대 3 개 이상의 사운드
- 우리는
setRate
전체 범위를 활용합니다.[0.5f-2.0f]
이제 두 가지 주요 장치 관련 문제가 발생했으며 손실을 줄이고 SoundPool에서 전환하기로 결정했습니다.
- 많은 수의 4.4 LG 장치 (대부분 LG G2 / G3 라인)가 SoundPool 구현과 함께 네이티브 충돌을 경험했습니다. 이 문제는 (결국) 업데이트에서 수정되었지만 아직 업그레이드되지 않은 기기를 사용하는 사용자가 많습니다.
- Sony Xperia 장치에는 현재 다른 사람들이보고 한 것처럼 SoundPool과 관련된 모든 종류의 문제 가 있습니다 . 내 경우, 나는 발견했습니다 당신이 사용하는 경우
setRate
에rate > 1.0f
(그 과정에서 배터리의 무리를 통해 구울) 앱 종료 될 때까지 시작 던지는 예외를 제외하고 SoundPool.
TL; DR; 나는 더 이상 SoundPool 디버깅의 위험 / 번거 로움의 가치가 없다고 생각합니다.
OGG 파일을 고수하면 SoundPool이 잘 처리됩니다. 프로그래머가 아무리 부지런히 노력하더라도 모든 중요한 프로그램에서 작동하지 않는 하드웨어 구성이 있다는 것은 Android 인 다중 플랫폼 야수의 특성입니다.
이 프로젝트가 규모가 크고 자금이 충분한 프로젝트 인 경우 테스트를 위해 각 주요 전화 중 하나에 자금을 추가하십시오. 실제로 프로그래머가 성능을 조사하고 추측하는 데 소요되는 시간보다 훨씬 저렴합니다.
죄송합니다. 이것이 당신이 찾고 있던 답이 아닌 것 같습니다. 행운을 빕니다!
면책 조항 : MediaPlayer에 대한 경험이 적고 제가 언급 한 다른 API에 대한 성공적인 경험이 없습니다. 다음 정보는 제가 DOC에서 읽은 내용과 Google 검색에서 읽은 내용을 기반으로합니다.
MediaPlayer (배경 음악 용)를 다른 오디오 API와 함께 사용할 수 있습니다. MediaPlayer가 자체 스레드에서 자동으로 실행되기 때문입니다.하지만 CPU 부하가 높고 압축 된 비트를 잘 사용하지 않을 것 같습니다. 하지만 잘 모르겠습니다.
JetPlayer http://developer.android.com/reference/android/media/JetPlayer.html 도 있습니다. 효과적으로 사용 하기에는 많은 작업처럼 보이지만 배경 음악을 재생 한 다음 필요에 따라 다른 사운드를 재생하는 데 매우 효과적입니다. 게임에서. 내가 읽은 DOC에서 MIDI 파일 (내 생각에?)이 필요하며 트랙을 음소거 및 음소거 해제하여 원하는대로 작동합니다.
저는 AudioTrack을 좋아합니다. 그 이유는 사운드의 주파수를 변경하여 런타임에 사운드를 편집 할 수있는 기능을 제공하고 SoundPool도 똑같이 할 수 있기 때문입니다.
귀하의 상황에서는 AudioTrack이 잘 작동하지 않는 것 같습니다. AudioTrack이 차단되기 때문에 두 개의 사운드를 재생하려면 두 개의 스레드가 필요하기 때문입니다 (확실합니다).
그리고 SoundPool을 사용하면 16 개의 사운드가 있으므로 각 스레드에 하나의 SoundPool이있는 두 개의 스레드를 가져와 각 SoundPool에 8 개의 사운드를 적용 할 수 있습니다. SoundPool을 사용해 본 적이 없기 때문에 잘 모르겠습니다.
그리고 다시 말하지만, 내 정보는 경험에 근거한 것이 아니라 내가 읽은 내용에서 나타나는 것뿐입니다. 그래서 나는 완전히 또는 어쩌면 약간 틀렸거나 도대체 누가 알겠습니까?
그리고 저는 SoundPool 버그에 대해 전혀 알지 못합니다. 연구하지 않았기 때문입니다.
참고 URL : https://stackoverflow.com/questions/6484574/how-bad-is-android-soundpool-what-alternative-to-use
'development' 카테고리의 다른 글
특정 SPTimeZone 인스턴스 생성 또는 가져 오기 (0) | 2020.10.22 |
---|---|
Android에서 알림에 버튼을 추가하는 방법은 무엇입니까? (0) | 2020.10.22 |
여러 github 프로젝트에 동일한 배포 키 사용 (0) | 2020.10.22 |
Microsoft.Bcl.Build NuGet 패키지의 기능은 무엇입니까? (0) | 2020.10.22 |
C #의 인터페이스에서 XML 주석 상속 (0) | 2020.10.22 |