簡體   English   中英

無法使用LibGDX在Android上播放2個音樂實例

[英]Can't play 2 Music instances on Android with LibGDX

我正在用LibGDX進行游戲,我需要同時演奏2首旋律。 但是,在Android上加載和播放2個旋律不起作用。 這是我做的小測試。 我什至嘗試使用LibGDX AssetManager,但仍然沒有成功。

Music test1;
Music test2;

AssetManager manager = new AssetManager();

@Override public void create()
{
    manager.load(Melody.REVERSION.getPath(), Music.class);
    manager.load(Melody.COLLAPSE.getPath(), Music.class);

    while (!manager.update()) {}
    manager.finishLoading();

    test1 = manager.get(Melody.REVERSION.getPath());
    test2 = manager.get(Melody.COLLAPSE.getPath());

    test1.setVolume(1);
    test1.play();
    test2.setVolume(1);
    test2.play();
}

我目前正在使用SoundPool庫。 這樣我就可以同時再現不同的聲音效果,但是我不知道這是否是最好的音樂播放方法。

與帖子相關: 使用聲音池示例播放聲音

使用MediaPlayer和CyclicBarrier 編輯

public enum MP_COMMAND {
    START,
    STOP,
    PAUSE
}

/**
 * Uses threads to execute synced commands for the current video media player and 
 * background music player in tandem.
 */
public void syncedCommand(MediaPlayer player1, MediaPlayer player2, MP_COMMAND command) {
    final CyclicBarrier commandBarrier = new CyclicBarrier(2);
    new Thread(new SyncedCommandService(commandBarrier, player1, command)).start();
    new Thread(new SyncedCommandService(commandBarrier, player2, command)).start();
}

/**
 * Inner class that starts a given media player synchronously
 * with other threads utilizing SyncedStartService
 */
private class SyncedCommandService implements Runnable {
    private final CyclicBarrier              mCommandBarrier;
    private       MediaPlayerTest.MP_COMMAND mCommand;
    private       MediaPlayer                mMediaPlayer;

    public SyncedCommandService(CyclicBarrier barrier, MediaPlayer player, MediaPlayerTest.MP_COMMAND command) {
        mCommandBarrier = barrier;
        mMediaPlayer = player;
        mCommand = command;
    }

    @Override public void run() {
        try {
            mCommandBarrier.await();
        } catch (InterruptedException | BrokenBarrierException e) {
            e.printStackTrace();
        }

        switch (mCommand) {
            case START:
                mMediaPlayer.start();
                break;

            case STOP:
                mMediaPlayer.stop();
                break;

            case PAUSE:
                mMediaPlayer.pause();
                break;

            default:
                break;
        }
    }
}

要播放兩首歌曲,請呼叫:

MediaPlayer mCurrentVideoPlayer = MediaPlayer.create(this, R.raw.track1);
MediaPlayer mBackgroundMusic = MediaPlayer.create(this, R.raw.track2);

syncedCommand(mCurrentVideoPlayer, mBackgroundMusic, MP_COMMAND.START);

參考: 使用MediaPlayer同時播放多首歌曲:只有一首真正在播放

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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