【问题标题】:How to generate sin wave in AS3 without clicks?如何在AS3中无点击生成正弦波?
【发布时间】:2014-07-03 19:37:56
【问题描述】:

我已经开始使用声音来合成音频,我不知道为什么我会在声音中听到那些嘈杂的咔嗒声?

我的循环是:

for(i in 0...2048)
{
var phase:Float = position / 44100.0 * Math.PI * 2;
position+=1;
sample = Math.sin(phase * v);   // where v varies between 200 to 400
event.data.writeFloat(sample); // left
event.data.writeFloat(sample); // right
}

有什么想法吗?

编辑

我需要做的是在循环中插入频率:

var phaserad:Float= 2*Math.PI/44100;
var delta:Float = current_v - new_v;
var p:Int= 2048;
for(i in 0...2048)
{
p--;
v = new_v + delta * (p / 2048); // v will interpolate from current_v to new_v
position += v * phaserad;
sample = Math.sin(position);    
event.data.writeFloat(sample); // left
event.data.writeFloat(sample); // right
}

current_v = new_v;

但是,我什么也听不见,我尝试了另一种方法:

var delta:Float = current_v - new_v;
var p:Int= 2048;

for(i in 0...2048)
{
var phase:Float = position / 44100.0 * Math.PI * 2;
position+=1;

p--;
v = new_v + delta * (p / 2048); // v will interpolate from current_v to new_v

sample = Math.sin(phase * v);   // where v varies between 200 to 400
event.data.writeFloat(sample); // left
event.data.writeFloat(sample); // right
}

但是,频率会继续上升,不会停在预期的new_v上

【问题讨论】:

  • 您是否在调用这些循环之间更改positionv?另外,如果将范围增加到 8192,是否会减少点击次数?
  • 我需要将范围最小化以保持我的应用响应
  • 请参阅上面的编辑

标签: actionscript-3 api haxe sound-synthesis


【解决方案1】:

您的波形发生器设置正确,但保存position 的方法要求您的v 保持不变且position 不变。鉴于您对v 的描述,您在播放期间以某种方式对其进行了更改,但更改v 会导致正弦形式被中断。因此,与其从头开始重新计算position,不如根据v 累加相位并添加电流偏移,以接收不间断的波形。

const phaserad:Number=2*Math.PI/44100;
for(var i:int=0;i<2048;i++)
{
    position+=v*phaserad; // requires this var to be "Number" type
    sample = Math.sin(position);   // where v varies between 200 to 400
    event.data.writeFloat(sample); // left
    event.data.writeFloat(sample); // right
}

【讨论】:

  • 请参阅上面的编辑
  • 一个声音 2048 个样本长度为 0.05 秒长度。您需要在运行循环之前计算所需的声音长度,然后将您的 v 分配除以计算的长度而不是 2048。样本长度为 (length_in_seconds)*44100
  • 我在写模拟器,频率变化大约每秒40次,我试试,谢谢
【解决方案2】:

如果你想要一个连续的正弦波,你的相位需要从 0 -> 360 -> 0 -> 360 度等。

【讨论】:

  • 但为什么我会听到点击声?
  • 因为如果相位不平滑,波形会跳跃。将您的示例数据写入波形文件并在像 audacity 这样的编辑器中打开它......应该立即清楚不连续的位置。
  • 请参阅上面的编辑
猜你喜欢
  • 2012-07-11
  • 2018-10-26
  • 2018-06-11
  • 1970-01-01
  • 2012-01-08
  • 2023-03-22
  • 2016-02-21
  • 2015-02-01
  • 1970-01-01
相关资源
最近更新 更多