3

我正在使用最新的 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 文件。

任何人都可以阐明为什么这不起作用?我在谷歌上搜索了一些可行的实现,但没有找到任何有用的东西。我已经看到 Jacob Seidelin 的纯 Javascript 解决方法,但如果可能的话,我宁愿坚持使用 SoundManager,也不愿使用 PHP 解决方案。

谢谢,

亚当

4

2 回答 2

1

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

我从 Nihilogic 的用于读取 ID3v1 标签的库开始(位于http://blog.nihilogic.dk/2008/08/reading-id3-tags-with-javascript.html),但移至 antimatter15 的 js-id3v2 库(https:// /github.com/antimatter15/js-id3v2),因为它可以读取 ID3v2 标签。从提供的示例中调整代码,我成功地解析了通过<input>控件加载 MP3 时所需的主要标签。

于 2011-01-23T19:28:15.547 回答
0

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

要获得 ID3,SM2 需要 mp3 主机上的跨域,如果它是另一个域。另外,我在使用 Soundcloud 时遇到了困难,因为他们将 MP3 重定向到动态 Amazon S3 存储...所以我必须对访客最终 URL 执行 PHP 脚本,然后 SM2 才能获得正确的 crossdomain.xml(检查https://getsatisfaction.com/ schillmania/topics/displaying_waveformdata_of_soundcloud_hosted_track_prompts_securityerror_error_2122

问题是 S3 链接和本地用户文件 (blob) 确实有短暂的过期延迟。

祝你好运 !

于 2012-05-14T16:43:49.620 回答