SoundPool“AudioFlinger无法创建曲目,状态:-12”

问题描述:

我有一个单一按钮的Android应用程序。当点击该按钮时,该应用程序开始播放(循环)加载了SoundPool的声音。当再次点击该按钮时,声音停止,然后再次启动。SoundPool“AudioFlinger无法创建曲目,状态:-12”

但问题在于声音每隔一段时间才会播放。

  • 点击第1次 - >声音开始播放
  • 点击第二次 - >声音停止,但不会再次启动
  • 点击第3次 - >声音开始播放
  • 点击第四次 - >声音停止,但不开始播放
  • 等等...

当声音不玩了,出现在logcat的这个错误:

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

当我删除循环(将-​​1更改为0)时,一切正常!

我在播放的声音是一个MP3文件,大小为71.6 KiB。

我已经在Sony Xperia U上运行Android 4.1.2(不工作)测试过了。但在我的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

正如你可以看到here,错误代码代表在Linux环境Out of memory。显然,它们是关于Jelly Bean上的内存分配(我认为是用于棒棒糖之前的)设备的一些问题。

我已经将原始文件从177808kbps下采样到32000kbps,并且它在预棒棒糖设备上按预期开始工作。

所以,你必须减少你的音乐文件的预棒棒糖设备。对于原始音频文件,最好有raw-v21,并将其下采样放入raw。因此,从API 21开始的设备将使用原始版本。

enter image description here

Here's间苗文件。

+0

你知道文件大小是否有确切的限制,或者有关于此的任何其他文档? – TuomasK

+0

@TuomasK,nope,还没有遇到过这样的事情。 – azizbekian

+0

是的,我想我已经开始工作了。谢谢! – TuomasK