2011-08-26 92 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