使用Apache Cordova为Android创建音乐播放器,我试图从mp3获取歌曲信息(艺术家,专辑)。 我尝试使用目录结构(一个目录从mp3 =专辑,两个up =艺术家),但这是不可靠的。 所以现在我一直在尝试从mp3文件中读取ID3信息以获取艺术家和专辑标签,但我尝试的所有内容都是空白或者崩溃应用程序。任何想法??
document.addEventListener("deviceready", function () {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, fsSuccess);
function fsSuccess(fs){
console.log(fs);
var dirURL = fs.root.nativeURL;
directoryPath = dirURL.replace("file://", "");
gotPath(directoryPath)
}
function gotPath(directoryPath) {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
fileSystem.root.getDirectory(directoryPath, {create: false, exclusive: false}, getDirSuccess);
})
}
function getDirSuccess(dirEntry) {
var directoryReader = dirEntry.createReader();
directoryReader.readEntries(readerSuccess);
}
function readerSuccess(entries) {
var i;
for (i=0; i<entries.length; i++) {
if(entries[i].isDirectory) {
directoryURL = entries[i].nativeURL;
directoryPath = directoryURL.replace("file://", "");
gotPath(directoryPath);
} if (entries[i].isFile){
if(entries[i].name.indexOf(".mp3") != -1){
var fileURL = entries[i].localURL.replace("file://", "");
ID3.loadTags(fileURL, function() {
var tags = ID3.getAllTags(fileURL);
alert(tags.artist);
},
{
tags: ["artist"]
},
{
dataReader: FileAPIReader(fileEntry.file)
});
}
}
}
}
}, false);
我尝试使用此库来阅读JavaScript-ID3-Reader的ID3信息。
修改
我能够将这个工作用于单个文件,但我仍然无法在循环浏览文件时尝试获取信息。
这里是从单个文件中获取ID3信息的代码(通过ng-click事件传递所选歌曲):
$scope.getInfo = function (song) {
filePath = song.nativeURL;
file_URI = filePath.replace("file://", "");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
function gotFS(fileSystem) {
fileSystem.root.getFile(file_URI, null, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}
function gotFile(fileEntry){
ID3.loadTags(fileEntry.localURL, function() {
var tags = ID3.getAllTags(fileEntry.localURL);
console.log(tags.artist + " " + tags.album + " " + tags.title + " " + tags.track);
},
{
tags: ["artist", "album", "track", "title"]
});
}
function fail(error) {
console.log(error.code);
}
};