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

标签 flash actionscript-3 bytearray audio

以下是 Adob​​e Live Docs SampleDataEvent 的片段类(class)。它演示了如何通过将样本插入 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 个样本(当前的两倍)。这造成了一个可听见的间隙并点击了音频,但并没有让我明白为什么。也许你可以...

再次感谢 :)

最佳答案

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

关于flash - SampleDataEvent.data.writeFloat() - 为什么调用它两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970140/

相关文章:

sql - 如何在 SQL Server 中的 where 子句中比较 varbinary

javascript - MediaElement.js - Flash 视频在完全加载之前不会播放

actionscript-3 - ActionScript 3.0 : Addition of Document Class causes errors

actionscript-3 - AS3语法: Most accurate

actionscript-3 - 获取舞台上的所有 child /父对象

bytearray - 在 Dart 中处理字节数组时,使用 Uint8List 比使用 List<int> 有什么优势?

flash - 我应该在删除自定义对象之前删除监听器吗?

flash - Adobe Flash 播放 RTSP 流?

javascript - 如何在数组中选择随机元素避免(如果是的话除外)某个值?

java - 将字节数组放入 JSON,反之亦然