代码之家  ›  专栏  ›  技术社区  ›  JeremyFromEarth

SampleDataEvent.data.writeFloat()-为什么要调用它两次?

  •  0
  • JeremyFromEarth  · 技术社区  · 16 年前

    SampleDataEvent 班级。它演示了如何创建一个可听的正弦波,通过推动样本到一个特定的位置 ByteArray writeFloat() 方法两次?

    var mySound:Sound = new Sound();
    function sineWaveGenerator(event:SampleDataEvent):void 
    {
        for ( var c:int=0; c<8192; c++ ) {
            event.data.writeFloat( Math.sin((Number(c+event.position)/Math.PI/2))*0.25 );
            event.data.writeFloat( Math.sin((Number(c+event.position)/Math.PI/2))*0.25 );
        }
    }
    
    mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator);
    mySound.play();
    

    作为测试,我删除了对writeFloat()的一个调用,并将缓冲区增加到16384个样本(是当前的两倍)。这创造了一个可听的差距,并在音频点击,但没有启发我太多,为什么。也许你可以。。。

    再次感谢:)

    1 回复  |  直到 16 年前
        1
  •  1
  •   Juan Pablo Califano    16 年前

    它需要两次写入,因为它是立体声的。每个通道取一个样本。在本例中,写入的值是相同的,但是如果您想将声音100%平移到一侧,例如,您可以使用第一个(或第二个)writeFloat写入值,并将0传递给另一个调用。

    推荐文章