2013-04-13 140 views
0

有什麼辦法可以識別所有可以播放的歌曲soundmanager2幾秒鐘。用soundmanager2播放MP3幾秒

我初始化了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> 

我希望你能幫我一把。

回答

0

哎呀,我玩了一下。感謝這個有趣的問題。這將使用jQuery在您的DOM中查找mp3文件列表,並創建playList,這是通過單擊startbutton來播放的。

<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> 

還有一些東西可能會更聰明,但這是有效的。 例如,如果一條曲目比4096ms短,會發生什麼情況,也許你應該檢查一下。 希望這有助於。

來自柏林的問候

0

感謝您的想法。最後觸摸一個小文件代碼mp3-player-button.js,由API文檔支持並添加幾行soundmanager2。

在行:

thisSound.play(); 

加:祕魯

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

問候。