2017-03-25 23 views
7

버튼이 하나 뿐인 Android 앱이 있습니다. 버튼을 클릭하면 앱이 SoundPool에로드 된 사운드를 재생 (루핑)하기 시작합니다. 버튼을 다시 클릭하면 사운드가 중지 된 다음 다시 시작됩니다.SoundPool "AudioFlinger가 트랙을 만들지 못했습니다. 상태 : -12"

하지만 문제는 소리가 격주에만 재생된다는 것입니다.

  • 클릭 1 시간 -> 사운드는
  • 클릭 2 재생 시간 시작 -> 사운드 정지 그러나 다시 시작되지 않습니다
  • 클릭 3 시간 -> 소리가
  • 클릭 4 시간 재생을 시작 - > 소리가 중지하지만, 등등
  • 와 ... 재생 시작되지 않는 소리가 재생되지 않는 경우

이 오류는 로그 캣에 나타납니다

E/AudioTrack: AudioFlinger could not create track, status: -12 
E/SoundPool: Error creating AudioTrack 

루핑 (-1에서 0으로 변경)을 제거하면 모든 것이 완벽하게 작동합니다!

제가 연주하는 소리는 MP3 파일, 크기 71.6 KiB입니다.

Android 4.1.2 (작동하지 않음)를 실행하는 Sony Xperia U에서 테스트했습니다. 하지만 내 Huawei Honor 6 (Android 6.0)에서는 루핑을 포함하여 모든 것이 작동합니다!

내가 뭘 잘못하고 있니?


여기 내 코드입니다 :

import android.media.AudioManager; 
import android.media.SoundPool; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 

    private int lastStreamId = 0; 
    private int soundID; 
    private SoundPool soundPool; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 

     soundID = soundPool.load(this, R.raw.sound01, 1); 


     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       soundPool.stop(lastStreamId); 
       lastStreamId = soundPool.play(soundID, 1, 1, 1, -1, 1); 
      } 
     }); 
    } 
} 

편집 :

내가 여기에 원래 소리를 업로드 할 수 아니지만, 여기에 같은 일을 또 다른 소리입니다. 을 제외하고 이제는 첫 번째 클릭에서만 의 사운드가 재생됩니다.; 다음과 같은 클릭 만하면 자동으로 위와 같은 오류가 발생합니다.

소리

은 여기에 있습니다 : sound01.mp3

+0

'sound01'을 게시 할 수 있습니까? – azizbekian

+0

질문 편집 : – TuomasK

답변

1

당신이 here, 에러 코드를 리눅스 환경에서 Out of memory에 대한 12 스탠드를 볼 수 있듯이. 분명히 Jelly Bean의 메모리 할당과 관련된 몇 가지 문제가 있습니다 (전 사탕과 같이 생각합니다).

원래 파일을 177808kbps에서 32000kbps로 다운 샘플링했으며, 사탕 생산 전 장치에서 예상대로 작동하기 시작했습니다.

그래서 롤리팝 이전 장치 용 오디오 파일을 다운 샘플링해야합니다. 원본 오디오 파일의 경우 raw-v21을 사용하고 raw에 다운 샘플링하는 것이 좋습니다. 따라서 API 21에서 시작하는 기기는 원래 버전을 사용합니다.

enter image description here

Here's 다운 샘플 파일.

+0

파일 크기에 대한 정확한 제한 사항이나 이에 대한 다른 문서가 있는지 알고 계십니까? – TuomasK

+0

@TuomasK, 아니, 그런 식으로 만난 적이 없어. – azizbekian

+0

네, 생각합니다. 고맙습니다! – TuomasK