![](/img/trans.png)
[英]How to properly use a thread/run loop and play sounds with SoundPool?
[英]SoundPool doesn't play sounds
當我嘗試在我的應用程序中啟動聲音時,它不會播放。 我已經看到該方法確實被調用了,但是 soundPool 只是不想播放聲音。 該應用程序按預期啟動,但是,它只是不想播放排隊的聲音。 是我做錯了什么嗎? 我要播放的音樂文件是否太大? (35.4MB)
任何輸入表示贊賞!
StartActivity(相關位)
public class StartActivity extends AppCompatActivity {
private Button startButton;
//Sounds
private SoundManager soundManager;
private int ambient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_activity);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
startButton = (Button) findViewById(R.id.startButton);
//Setting Up sounds
soundManager = new SoundManager(this);
ambient = soundManager.getSoundID(R.raw.music_ambient);
soundManager.playLoop(ambient);
Application.setSoundManager(soundManager);
應用
public class Application {
public static SoundManager soundManager;
public static SoundManager getSoundManager() {
return soundManager;
}
public static void setSoundManager(SoundManager soundManagerIns) {
soundManager = soundManagerIns;
}
}
SoundManager class
import android.content.Context;
import android.media.SoundPool;
import android.util.Log;
public class SoundManager {
private Context context;
private SoundPool soundPool;
private boolean isPlaying = false;
SoundManager(Context context) {
this.context = context;
SoundPool.Builder builder = new SoundPool.Builder();
builder.setMaxStreams(10);
soundPool = builder.build();
}
int getSoundID(int resourcesID) {
return (soundPool.load(context, resourcesID, 1));
}
void play(int soundId) {
soundPool.play(soundId, 1, 1, 1, 0, 1);
}
void playLoop(int soundId){
if(!isPlaying) {
Log.d("LEADER", "called this");
soundPool.play(soundId, 1, 1, 1, -1, 1);
isPlaying = true;
}
}
void stop(int soundId){
isPlaying = false;
soundPool.stop(soundId);
}
}
我要播放的音樂文件是否太大? (35.4MB)
情況可能就是這樣。 我已經看到幾個 StackOverflow 答案(包括最近的答案)聲稱SoundPool
的每個聲音的未壓縮內存限制為 1 MB,盡管我無法在官方文檔中進行檢查。 如果確實如此,您可能會在日志中看到此錯誤,如https://stackoverflow.com/a/18548242/9543944所述:
如果您的剪輯在 memory 中太大,聲音池將靜音,您會發現以下錯誤:“AudioFlinger 無法創建軌道。狀態:-12”
您應該能夠從 Android Studio 內部看到日志,然后您可以過濾錯誤以更快地搜索上述錯誤。
如果確實如此, MediaPlayer
可能是一個不錯的選擇: https://developer.android.com/guide/topics/media/mediaplayer 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.