2011-08-26 59 views
0

如何無限循環播放standing wave中的mp3文件。我已經嘗試了與SoundGenerators等LoopSource,但我沒有運氣。我能找到的文件中沒有使用例子或網上有人循環anInfinitely MP3的:駐波:無限循環播放MP3

var player:AudioPlayer = new AudioPlayer() 
const generator:SoundGenerator = new SoundGenerator(sound) 
source = new LoopSource(new AudioDescriptor(), generator) 
player.play(source) 

感謝

回答

0

看來該LoopSource函數的參數AudioDescriptor應匹配soundGenerator參數。根據文檔實例化一個新的AudioDescriptor將設置channelsrate屬性爲NaN(儘管它們的輸入爲uint ??)。反正,看是否可代替:

var player:AudioPlayer = new AudioPlayer() 
const generator:SoundGenerator = new SoundGenerator(sound) 
source = new LoopSource(generator.descriptor, generator) 
player.play(source) 

其他的AudioPlayer類包含一個完整的事件,當音源播放完畢進行調度。您可以使用布爾開關簡單地設置您自己的循環,以便從完整處理程序調用play(source:IAudioSource)

+0

嘿@ TheDarkIn1978,謝謝努力,但沒有運氣,我仍然只從這個代碼獲得一個循環。 –

+0

嘗試聯繫開發人員,也許直接給他這個問題,因爲他已經是一個很好的變化,他已經是SO上的成員:https://github.com/maxl0rd – TheDarkIn1978

1

我是lib的作者。由於很多人問這個問題,我已經在項目的github wiki中添加了一個回答這個問題的頁面。

https://github.com/maxl0rd/standingwave3/wiki/How-to-use-loopsource

希望有所幫助。

+0

嗨@ maxl0rd,我仍然有同樣的問題。我使用AudioPlayer播放LoopSource,看起來音頻播放器會以某種方式得出LoopSamples長度爲零的結論。 –

+0

我一直在嘗試使用How-to-use-loopsource信息。我能夠發揮我的聲音,但它只循環3次。思考? – charlesclements

0

我一直在嘗試使用How-to-use-loopsource信息here。我能夠發揮我的聲音,但它只循環3次。思考?

import com.noteflight.standingwave3.performance.ListPerformance; 
import com.noteflight.standingwave3.elements.AudioDescriptor; 
import com.noteflight.standingwave3.performance.AudioPerformer; 
import com.noteflight.standingwave3.elements.IAudioSource; 
import com.noteflight.standingwave3.sources.SineSource; 
import com.noteflight.standingwave3.output.AudioPlayer; 
import hype.framework.behavior.AbstractBehavior; 
import com.greensock.loading.LoaderMax; 
import com.greensock.loading.MP3Loader; 
import com.noteflight.standingwave3.sources.LoopSource; 
import com.noteflight.standingwave3.elements.Sample; 
import flash.media.Sound; 
import com.greensock.events.LoaderEvent; 
import com.demonsters.debugger.MonsterDebugger; 
import flash.events.Event; 


var player:AudioPlayer = new AudioPlayer(); 
var loader:LoaderMax = new LoaderMax({ onComplete:onComplete }); 
loader.append(new MP3Loader("../deploy/assets/audio/Letter_A1.mp3", { autoPlay:false })); 
loader.load(); 


function onComplete(e:LoaderEvent):void 
{ 

    var mySound:Sound = e.currentTarget.content[ 0 ] as Sound; 
    var length:Number = mySound.length * 44.1; 
    var mySample:com.noteflight.standingwave3.elements.Sample = new com.noteflight.standingwave3.elements.Sample(new AudioDescriptor, length); 

    mySample.extractSound(mySound, 0, length); // now all of the Sound's data is in this Sample 

    // LoopSource 
    var myLoop:LoopSource = new LoopSource(new AudioDescriptor(44100, 2), mySample); 
    myLoop.firstFrame = 1; 
    myLoop.startFrame = 1; 
    myLoop.endFrame = myLoop.frameCount; 

    // Play. 
    player.play(myLoop); 

} 
0

OK,因爲我在網上的時間,試圖根據循環的文檔和幫助薄量上的音頻源的地獄,我決定創建自己的駐波3個插件庫。這不是完美的,但是它完成了工作,並且在字節級上完成了這個任務;沒有循環定時器或任何東西。它的工作原理是在開始和結束循環點中輸入聲音。然後根據提供的時間以幾秒鐘的時間克隆循環樣本。它應該是直接使用。這是在「實例」文件夾中 「循環」文件中的Main.as類的代碼:

package 
{ 

    // Imports. 
    import com.greensock.events.LoaderEvent; 
    import com.greensock.loading.LoaderMax; 
    import com.greensock.loading.MP3Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import com.greensock.TweenMax; 
    import com.SW3.gadget.LoopGadget; 
    import flash.media.Sound; 


    // Class. 
    public class Main extends Sprite 
    { 

     // Vars. 
     private var loader:LoaderMax;// Using LoaderMax for ease of use. 


     // Constructor. 
     public function Main() 
     { 

      trace("Main"); 

      loader = new LoaderMax({ name:"audio", onComplete:onSoundsLoaded }); 
      loader.append(new MP3Loader("assets/Beat.mp3", { autoPlay:false })); 
      loader.append(new MP3Loader("assets/Clap.mp3", { autoPlay:false })); 
      loader.append(new MP3Loader("assets/Boom.mp3", { autoPlay:false })); 
      loader.load(); 

     } 


     private function onSoundsLoaded(e:LoaderEvent):void 
     { 

      trace("onSoundsLoaded"); 
      var looping:LoopGadget = new LoopGadget; 
      looping.addLoopSound("Beat", e.currentTarget.content[ 0 ] as Sound, 0, 10); 
      looping.addLoopSound("Clap", e.currentTarget.content[ 1 ] as Sound, 0, 10); 
      //looping.addLoopSound("Boom", e.currentTarget.content[ 2 ] as Sound, 0, 10); // Commented out to test possible error. 

      looping.playLoop("Beat");// Play the "Beat" loop. 
      looping.playLoop("Clap");// Play the "Clap" loop. 
      looping.stopLoop("Beat");// Stop the "Beat" loop. 
      looping.playLoop("Beat");// Play the "Beat" loop. 
      looping.playLoop("Beat");// Play the "Beat" loop again to test if it would error out.. 

      looping.stopAllLoops();// Stop all the loops. 
      looping.playLoops([ "Beat", "Clap", "Boom" ]);// Play all the loops. Test to see if "Boom" will error out. 

     } 

    } 

} 

退房在這裏的源文件: https://github.com/charlesclements/standingwave3-addons