Javascript SoundManager2 onid3()未启动

Javascript SoundManager2 onid3()未启动,javascript,mp3,id3,soundmanager2,Javascript,Mp3,Id3,Soundmanager2,我正在构建一个简单的Javascript自动存储塔,使用最新的SoundManager2进行音频播放,源文件是本地MP3文件。我已经对文件加载和播放进行了排序,目前我正在尝试访问这些MP3文件的ID3信息,但onid3()回调没有启动。我正在使用Flash,并已验证文件中是否存在ID3信息。下面是我对onid3()的实现: 其他回调工作正常,但onid3()警报从未出现。我甚至将音频播放的加载和播放部分分开,看看这是否有帮助。SoundManager发现onid3()的存在是因为它将usePol

我正在构建一个简单的Javascript自动存储塔,使用最新的SoundManager2进行音频播放,源文件是本地MP3文件。我已经对文件加载和播放进行了排序,目前我正在尝试访问这些MP3文件的ID3信息,但onid3()回调没有启动。我正在使用Flash,并已验证文件中是否存在ID3信息。下面是我对onid3()的实现:

其他回调工作正常,但onid3()警报从未出现。我甚至将音频播放的加载和播放部分分开,看看这是否有帮助。SoundManager发现onid3()的存在是因为它将usePolicyFile切换为true-鉴于MP3是本地的,我假设我不需要担心跨域XML文件

有人能解释为什么这不起作用吗?我在Google上搜索过一些有用的实现,但没有找到任何有用的。我看过Jacob Seidelin的纯Javascript解决方案,但如果可能的话,我宁愿使用SoundManager,也不愿使用PHP解决方案

谢谢


Adam

这个问题对于任何可靠的答案来说都可能太深奥了,所以我决定在SM2库之外研究可能的Javascript解决方案


我从Nihilogic的用于读取ID3v1标记的库(at)开始,但转到了反物质15的js-id3v2库(),因为它可以读取id3v2标记。根据提供的示例改编代码,我成功地解析了通过
控件加载MP3时所需的主标记。

对于本地文件,我说的是“用户本地文件”(而不是“服务器”本地文件),我使用id3v2.js获得了一些成功

要获得ID3,SM2需要mp3主机上的跨域,如果它是另一个域的话。 另外,当Soundcloud将MP3重定向到动态AmazonS3存储时,我遇到了一些困难。。。因此,我必须为来宾最终URL编写一个PHP脚本,然后SM2才能获得正确的crossdomain.xml(检查)

问题是S3链接和本地用户文件(blob)都有很短的过期延迟


祝你好运

我没有答案,但是+1似乎是一个很棒的音频框架——我没有听说过SoundManager,这正是我正在进行的项目所需要的。
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;
}