簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM