簡體   English   中英

如何使用libGDX在Android中加載音樂?

[英]How to load music in Android with libGDX?

我想在具有libgdx庫的android應用中加載mp3歌曲,但我找不到工作的方法。 我不知道如何編程這個“問題”。

Assets Manager可能是mp3歌曲作品類嗎?

我也是這樣發現的:

Gdx.files.newMusic(file); 

但是在Android和台式機中,相同的代碼無法正常工作。

更新:解析方法

public void parse() {
        JsonReader reader = new JsonReader();
        JsonValue rootElem = reader.parse(file);
        JsonValue songDataElem = rootElem.get("songData");
        JsonValue notesDataElem = songDataElem.get("notes");
        JsonValue barsDataElem = songDataElem.get("bars");
        JsonValue keysDataElem = songDataElem.get("keys");
        JsonValue audioDataElem = rootElem.get("audioData");

        NoteData[] notes = new NoteData[notesDataElem.size];
        for (int i = 0; i < notesDataElem.size; i++) {
            notes[i] = new NoteData(notesDataElem.get(i).getInt("pitch"), notesDataElem.get(i).getFloat("time"));
        }
        BarData[] bars = new BarData[barsDataElem.size];
        for (int i = 0; i < barsDataElem.size; i++) {
            BarData bar = new BarData(barsDataElem.get(i).getFloat("time"));
            bars[i] = bar;
        }
        char[] keys = new char[keysDataElem.size];
        for (int i = 0; i < keysDataElem.size; i++) {
            keys[i] = keysDataElem.getChar(i);
        }
        float tempo = songDataElem.getFloat("tempo");
        String file = audioDataElem.getString("file");
        songData = new SongData(notes, bars, keys, tempo);
        parsed = true;
    }

和構造函數:

 public SongFile(FileHandle file) {
    manager = new AssetManager(new ExternalFileHandleResolver());
    file = Gdx.files.external(file.path());//30
    if (file.exists()) {
        manager.load(file.path(), Music.class);
        manager.finishLoading();
        music = manager.get(file.path(), Music.class);
        music.setLooping(true);
        music.play();
    }

}

在主類中:

String file = "/storage/emulated/0/download/prueba.mp3";
SongFile songFile = new SongFile(new FileHandle(file));
songFile.parse();
song = songFile.makeSong();

要加載音樂實例,我們可以執行以下操作:

Music music = Gdx.audio.newMusic(Gdx.files.internal("data/mymusic.mp3"));

您還可以使用AssetManager加載Music以便以適當的方式管理資產。

AssetManager manager = new AssetManager();
manager.load("data/mymusic.mp3", Music.class);
manager.finishLoading();

成功加載資產后,即可獲取音樂。

Music music = manager.get("data/mymusic.mp3", Music.class);

可用於播放音樂的各種播放屬性

music.play();

如果您在Android上遇到某些特殊問題,請檢查此線程 有時, Sound可能無法在Android設備上播放,但可以在台式機上播放。

編輯

將此權限添加到AndroidMainfest.xml文件。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

對於Android明確指出,如果在進行與文件IO相關的任何工作之前未獲得用戶的運行時許可,則targetSdkVersion小於23。 對於當前的targetSdkVersion,請檢查您的android build.gradle文件的defaultConfig,如果沒有顯示其檢查AndroidManifest.xml文件。

外部目標地址是我們保留自己的數據(如視頻,音樂等)的地址。

Gdx.files.getExternalStoragePath()在Android和桌面上的用戶目錄中提供路徑/storage/emulated/0/ ,例如C:\\Users\\Abhishek Aryan\\

/storage/emulated/0/表示內置存儲,下載位於內置存儲中。

if(Gdx.app.type==Application.ApplicationType.Android) {

     var assetManager = AssetManager(ExternalFileHandleResolver())
     var fileHandle = Gdx.files.external("/Download/WorldmapTheme.mp3")

     if (fileHandle.exists()) {

        assetManager.load(fileHandle.path(), Music::class.java)
        assetManager.finishLoading();

        var music = assetManager.get<Music>(fileHandle.path())
        music.setLooping(true)
        music.play()
     }
}

編輯2

此代碼對我來說很好,希望對您有用

// ApplicationListener create()方法內的代碼

if(Gdx.app.getType()== Application.ApplicationType.Android) {
    String file = "/download/prueba.mp3";
    FileHandle fileHandle = Gdx.files.external(file);
    SongFile songFile = new SongFile(fileHandle);
    songFile.parse();
    song = songFile.makeSong();
}

SongFile類的構造方法

public class SongFile {

    AssetManager manager;
    Music music;

    public SongFile(FileHandle file){
        manager = new AssetManager(new ExternalFileHandleResolver());
        if (file.exists()) {
            manager.load(file.path(), Music.class);
            manager.finishLoading();
            music = manager.get(file.path(), Music.class);
            music.setLooping(true);
            music.play();
        }
    }

    ...
}

暫無
暫無

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

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