SoundManager2 onid3() 未触发
Posted
技术标签:
【中文标题】SoundManager2 onid3() 未触发【英文标题】:SoundManager2 onid3() not firing 【发布时间】:2011-01-16 14:32:14 【问题描述】:我正在使用最新的 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 解决方案。
谢谢,
亚当
【问题讨论】:
我没有答案,但是 +1 似乎是一个很棒的音频框架——我没有听说过 SoundManager,这正是我正在工作的项目所需要的开。 【参考方案1】:对于任何可靠的答案来说,这个问题可能太深奥了,所以我决定在 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 时所需的主要标签。
【讨论】:
【参考方案2】:对于本地文件,我说的是“用户本地文件”(不是“服务器”本地文件),我使用 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) 确实有短暂的过期延迟。
祝你好运!
【讨论】:
以上是关于SoundManager2 onid3() 未触发的主要内容,如果未能解决你的问题,请参考以下文章
带SoundManager2的简单JavaScript音频播放器
自动播放音频播放列表 SoundManager2 bar-ui
带有 SoundManager2 的 Amazon Cloudfront RTMP 字符串