我正在使用最新的SoundManager2构建音频播放器的简单Javascript自动存储塔,而本地MP3文件是源。我已经加载并播放了文件,目前正在尝试访问这些MP3文件的ID3信息,但onid3()回调未触发。我正在使用Flash,并已验证文件中存在ID3信息。下面是我onid3()的实现:
function playNextSongInQueue()
{
// Get the first element of the songQueue array
var nextSongInQueue = songQueue.shift();
// Start playback from the queue
var jukeboxTune = soundManager.createSound({
id: 'currentTune',
url: 'audio/' + nextSongInQueue.name,
onload: function() {
this.play();
},
onid3: function() {
alert('ID3 present!');
},
onfinish: function() {
this.destruct(); // Destroy this sound on finish
songFinish(); // Run the songFinish() function, so decide what to do next
}
});
jukeboxTune.load();
//jukeboxTune.play(); // The jukebox running!
songPlaying = true; // Set songPlaying flag
updateSongQueueDisplay(); // Refresh the song queue display (for debug)
return nextSongInQueue.name;
}
其他回调工作正常,但onid3()警报永远不会出现。我什至分离了音频播放的负载和播放部分,以查看是否有帮助。 SoundManager会发现onid3()在那里,因为它会将usePolicyFile切换为true-看到MP3是本地的,我假设我不必担心跨域XML文件。
谁能阐明为什么这行不通?我曾搜寻过Google,以寻找可行的实现方式,但没有提供任何帮助。我看过Jacob Seidelin的纯Java变通方法,但如果可能的话,宁愿坚持使用SoundManager,也不愿使用PHP解决方案。
谢谢,
亚当
最佳答案
这个问题对于任何可靠的答案可能都太深奥了,所以我决定研究SM2库之外的可能的Javascript解决方案。
我从Nihilogic的库开始读取ID3v1标签(位于http://blog.nihilogic.dk/2008/08/reading-id3-tags-with-javascript.html),但是由于它可以读取ID3v2标签,因此转移到antimatter15的js-id3v2库(https://github.com/antimatter15/js-id3v2)。从提供的示例中改编代码,我设法成功解析了通过<input>
控件加载MP3时所需的主要标签。