我正在使用最新的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时所需的主要标签。

09-25 17:14