0

有什么方法可以识别所有可以播放 soundmanager2 几秒钟的歌曲。

我已经初始化了soundmanager2

soundManager.setup ({
    url: 'stockings /',
    preferFlash: true,
    onReady: function () {
        console.log ('SM2 Ok!');
    }
});

而我的 sm2_button 类的 mp3 文件,总共大约 10 个文件,我希望每个人都播放几秒钟。

<a href="songs/1.mp3" class="sm2_button"> </ a>

我希望你能帮我一把。

4

2 回答 2

0

哎呀,我玩了一下。感谢这个有趣的问题。这将使用 jQuery 在您的 DOM 中查找 mp3 文件列表并创建playList通过单击开始按钮播放的文件。

<script>
var playList = new Array();

$(document).ready(function() {
    var soundFileList = new Array();
    $('ol#list2 li a').each(function() { // find soundfiles in <li><a data='*'>
        $('ol#list2 li a').css('color','#000');
        soundFileList.push( this.getAttribute('data') );
    });
    var newpl = { // create a selfmade playList object
        nextSongNumber: 0, // track number with which the player starts
        playLength: 7012,  // milliseconds to play each track
        idScheme: 'pl2_',  // a given scheme as 'soundID+songNumber'
        songUrl: './',     // url where your files are
        songList: soundFileList,
        fadeIn: 2000,      // fadeIn in milliseconds
        fadeOut: 1000      // fadeOut in milliseconds
    }
    playList.push( newpl ); // push it to our preset playlist
    $('#startbutton').on('click',function(){
        // call list 0 in playList[]
        playThisPlayList( 0, playList);
    });
});

soundManager.setup({
  url: './soundmanager2/swf/',
  // preferFlash: false,
  //flashPollingInterval: 4 , //in ms, overrules useFastPolling & useHighPerformance
  useFastPolling: true,
  useHighPerformance: true,
  onready: function() {

    function SkipThruPlayList( pl ) {
      if ( pl.nextSongNumber+1 > pl.songList.length ) {
          //will be called after the last song in playList
          pl.nextSongNumber=0; //needed for replay the playList
          return;
      } else {
        if(songObject){ songObject.destruct(); }
        var songObject = soundManager.createSound({
          id:  pl.idScheme + pl.nextSongNumber,
          url: pl.songUrl + pl.songList[ pl.nextSongNumber ],
          multishot: false
        });

        songObject.play({
          from: 0,
          to: pl.playLength,
          stream: true,
          autoPlay: false, //true if starting with pageload
          onplay: function() {
            $('ol#list2 li:nth-child('+pl.nextSongNumber+') a').css('color','#f00');
            //console.log('now play:',this.url, 'songid:',this.id, 'laptime:', this.duration);
          },
          onstop: function() {
            //console.log('songid:',this.id, ', songend was at:',this.position);
            // check your console, songend-positions are not stable values
            this.destruct(); //free memory from old song, necessary?
            SkipThruPlayList( pl ); // start over, create & play next songObject
          },
          whileplaying: function(){
            //this is a fadeIn / fadeOut mechanism
            var now=this.position;
            var mainVolume = 100; //we could set this up with playList
            if (now <= pl.fadeIn) {
                //fadeIn
                this.setVolume(parseInt((now/pl.fadeIn)*mainVolume));
            } else if (now >= (pl.playLength-pl.fadeOut)) {
                //fadeOut
                this.setVolume(parseInt(((pl.playLength-now)/pl.fadeOut)*mainVolume));
            } else {
                //play normal Volume between fadeIn and fadeOut
                this.setVolume(mainVolume);
            }
          }
        });
        pl.nextSongNumber++;
      }
    }

    function playThisPlayList( i, playList ) {
      var count= playList[i].songList.length;
      if (count > 0) {
        //console.log('we have:',count,' songs to play');
        SkipThruPlayList( playList[i] );
      } else {
        //console.log('no songs in this songlist');
        return;
      };
    }
    //playThisPlayList( 0, playList );
    window.playThisPlayList = playThisPlayList; //Broadcast function into BOM
  }
});

</script>

<button id="startbutton">start</button>
<ol id="list2">
  <li><a href="#" data="./test0.mp3">test0.mp3</a></li>
  <li><a href="#" data="./test1.mp3">test1.mp3</a></li>
  <li><a href="#" data="./test2.mp3">test2.mp3</a></li>
</ol>

还有一些可能更聪明的东西,但这有效。例如,如果轨道短于 4096 毫秒会发生什么,也许你应该检查一下。希望这可以帮助。

来自柏林的问候

于 2013-04-14T18:00:46.393 回答
0

感谢您的想法。最后触摸一个小文件代码 mp3-player-button.js,由 API 文档支持并添加几行 soundmanager2。

在行中:

thisSound.play ();

添加:

thisSound.play({
    whileplaying:function() {
        if (thisSound.position >= 30000) {
            self.stopSound(thisSound);
        }
    }
});

来自秘鲁的问候。

于 2013-04-22T00:27:18.470 回答