gpt4 book ai didi

java - 如何使用 libGDX 在 Android 中加载音乐?

转载 作者:搜寻专家 更新时间:2023-11-01 08:26:59 24 4
gpt4 key购买 nike

我想在带有 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 music = Gdx.audio.newMusic(Gdx.files.internal("data/mymusic.mp3"));

您还可以使用 AssetManager加载您的音乐,以便您可以以适当的方式管理您的 Assets 。

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

您可以在成功加载 Assets 后获取您的音乐。

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

各种回放attributes可以用来播放音乐

music.play();

检查这个thread如果您在 Android 上遇到一些特殊问题。有时 Sound 可能无法在 Android 设备上播放,但在台式机上可以播放。

编辑

将此权限添加到 AndroidMainfest.xml 文件。

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

如果在运行时未获得用户许可,则在继续与您的文件 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

这段代码对我来说很好用,希望对你有用

//ApplicationListenercreate() 方法中的代码

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();
}
}

...
}

关于java - 如何使用 libGDX 在 Android 中加载音乐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43955604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com