gpt4 book ai didi

javascript - 如何使用控件使用 SoundManager 播放 mp3 播放列表

转载 作者:可可西里 更新时间:2023-11-01 02:45:38 26 4
gpt4 key购买 nike

我正在尝试使用 SoundManager2 播放多个音频文件到目前为止,这是我能找到的关于该站点的唯一可用示例。

<script src="/path/to/soundmanager2.js"></script>
<script>
soundManager.setup({
url: '/path/to/swf-files/',
onready: function() {
var mySound = soundManager.createSound({
id: 'aSound',
url: '/path/to/example.mp3'
});
mySound.play();
},
ontimeout: function() {
// Hrmm, SM2 could not start. Missing SWF? Flash blocked? Show an error, etc.?
}
});
</script>

虽然,我可以用上面的例子播放example.mp3,但我想使用这个example中所示的播放列表.可悲的是,那个页面没有提到任何关于如何实现播放列表功能的内容。

我目前有一个 Json 返回给定歌曲艺术家的 mp3 路径,如下所示:

{
"john_doe":"/path/to/audio/john_doe.mp3",
"jane_smith":"/path/to/audio/jane_smith.mp3",
}

那么,我如何合并这个 json 数据来制作一个播放列表,例如 2 首歌曲。

最佳答案

您可以随意使用列表。您可以按如下方式对其进行硬编码或使用您的 JSON 结果。这将无休止地循环它们:

    var audio = [];
// Array of files you'd like played
audio.playlist = [
"/canvas/audio/Marissa_Car_Chase.mp3",
"/canvas/audio/Vortex_Battl_Thru_Danger.mp3",
"/canvas/audio/Gadgets_Activated.mp3",
"/canvas/audio/Kids_Run_Into_Agents.mp3",
"/canvas/audio/Jet_Luge_Chase.mp3"
];

function playAudio(playlistId){
// Default playlistId to 0 if not supplied
playlistId = playlistId ? playlistId : 0;
// If SoundManager object exists, get rid of it...
if (audio.nowPlaying){
audio.nowPlaying.destruct();
// ...and reset array key if end reached
if(playlistId == audio.playlist.length){
playlistId = 0;
}
}
// Standard Sound Manager play sound function...
soundManager.onready(function() {
audio.nowPlaying = soundManager.createSound({
id: 'sk4Audio',
url: audio.playlist[playlistId],
autoLoad: true,
autoPlay: true,
volume: 50,
// ...with a recursive callback when play completes
onfinish: function(){
playlistId ++;
playAudio(playlistId);
}
})
});
}

// Start
playAudio[0];

然后,确保您没有遇到 Flash 8 问题:

From SoundManager2's Revision History :

Flash Player 11.6.602.171, released by Adobe on 02/26/2013, introduced an issue with SM2's default Flash 8 (flashVersion: 8) API-based JS/Flash interaction, where SM2 methods called from callbacks such as onfinish() would not work. This primarily broke methods used for playing sounds in sequence, serially loading a series of sounds and so on. (See discussion for more.)

Note that this does not affect cases where soundManager.setup({ flashVersion: 9}) is being used; however, SM2 does use flashVersion: 8 by default.

Specifically, Flash-initiated events (such as a sound finishing) make Flash -> JS calls to the SM2 API, which subsequently call user-specified event handlers. If the user-specified SM2 onfinish() handler immediately calls a SM2 method like play() that makes a JS -> Flash call, this call either silently fails or is blocked. Other JS + Flash libraries that use similar callback patterns may also be affected, if their SWF is built targeting the Flash 8 API.

Suspecting a timing or recursion/stack issue, it was found that introducing a setTimeout(callback, 0) to user-specified SM2 callbacks like onfinish() restored sequential/playlist functionality.

Flash Player 11.6.602.180, relased by Adobe on 3/12/2013, exhibits the same behaviour. To avoid additional hacks, SM2 applies this to all Flash 8-based API callbacks regardless of what version of Flash Player is installed. No regressions are anticipated as a result of this change.

Alternately, this issue can be avoided by using soundManager.setup({ flashVersion: 9 }) as the Flash 9-based API does not appear to have this problem.

请注意,在示例中,播放列表抽屉插入此处:

这是用于触发下拉菜单(“抽屉”)的菜单按钮。 JavaScript 将根据您在此处分配的类名处理所有事情:

  <div class="sm2-inline-element sm2-button-element sm2-menu">
<div class="sm2-button-bd">
<a href="#menu" class="sm2-inline-button menu">menu</a>
</div>
</div>

这是标题栏:

    <div class="sm2-playlist">
<div class="sm2-playlist-target">
<!-- playlist <ul> + <li> markup will be injected here -->
<!-- if you want default / non-JS content, you can put that here. -->
<noscript><p>JavaScript is required.</p></noscript>
</div>
</div>

播放列表抽屉(第一部分构建抽屉/第二部分在抽屉中构建播放列表本身。

 <div class="bd sm2-playlist-drawer sm2-element">

<div class="sm2-inline-texture">
<div class="sm2-box-shadow"></div>
</div>

<!-- playlist content is mirrored here -->

<div class="sm2-playlist-wrapper">
<ul class="sm2-playlist-bd">
<li><a href="http://freshly-ground.com/data/audio/sm2/SonReal%20-%20I%20Tried.mp3">
<b>SonReal</b> - I Tried</a></li>
</ul>
</div>

</div>

</div>

随机研究提示:

  • html 节点是通过实用函数而不是 JQuery 或您可能一直在寻找的其他东西来修改的。您可以在 bar-ui.js 文件的开头找到相关代码,以防您希望能够更好地理解所有其他源代码的哪些方面。
  • 您要查找的 CSS 文件是 bar-ui.css。它为您提供所需的所有风格。
  • 在 Chrome 等浏览器中,您可以右键单击某个区域并选择“检查元素”以查看 DIV 引用的页面部分。

关于javascript - 如何使用控件使用 SoundManager 播放 mp3 播放列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com