PHP sin函数上升

PHP sin函数上升,php,audio,wav,Php,Audio,Wav,我使用此函数在php中生成wav抖动音调: $samples = array(); $amplitude = 8192; $sampleRate = 8000; $samplesCount = 300000; for ($n = 0; $n < $samplesCount; $n++) { $freqOfTone= 4*sin($n*0.00628)+440; $w = 2 * pi() * $freqOfTone / $sampleRate; $samp

我使用此函数在php中生成wav抖动音调:

$samples = array();
$amplitude = 8192;
$sampleRate = 8000;
$samplesCount = 300000;


for ($n = 0; $n < $samplesCount; $n++) {


    $freqOfTone= 4*sin($n*0.00628)+440;

    $w = 2 * pi() * $freqOfTone / $sampleRate;
    $samples[$n] = (int)($amplitude *  sin($n * $w));



}
$samples=array();
$振幅=8192;
$sampleRate=8000;
$samplescont=300000;
对于($n=0;$n<$samplescont;$n++){
$freqOfTone=4*sin($n*0.00628)+440;
$w=2*pi()*$frequeoftone/$sampleRate;
$samples[$n]=(int)(振幅*sin($n*$w));
}
但是产生的声音不是一个持续的摆动,而是上升。。。(正如你在那里听到的:

有人知道为什么吗


谢谢你

并没有用同样的方法解决这个问题,但我花了一些时间玩互联网上奇怪的数学角来帮助去除三角锈。帮助我正确看待这个问题

无论如何,这就是我一直在玩的东西(放大器和调频模式,我可以用它玩几个小时):


添加
$t
有什么意义?它总是0,但我怀疑问题出在
$frequeftone=4*sin($n*0.001)+440;
@Mark Baker是的,不需要。但我在其他情况下使用它,因为计数器$n一直在增加?@BigScar是的,但sin函数应该是2*Pi周期?使用模,它会产生很酷的效果,但即使是(%500),它仍然会上升。要从php生成音调wav,请转到那里:您在两个sin()中都尝试过使用模吗参数?是的,如果我把($n%1000+10000)放入在第二个罪中。但我不明白为什么它没有:它不是2pi周期吗?np!感谢分享这个实验,那真是一个爆炸。我昨晚想把这个扔给你,但忘了——看它的有趣方式,以及它的开源,这样你就可以从代码中找到想法
<?php   

$bps = 16; // bits/s
$Bps = $bps / 8; // byte/s
$duration = 30; // Seconds
$frequency = 440; // Hz
$amplitude = 8192;  

$samples = array();
$sampleRate = 44100;
$samplesCount = $sampleRate * $duration;    

for ($n = 0; $n <= $samplesCount; $n++)
{
    // Time
    $t = $n / $sampleRate;  

    // Freq Mod
    $mod = 0.1 * sin(2 * M_PI * $frequency * $t * 0.00628); 

    // Wave
    $w = $amplitude * sin(2 * M_PI * $frequency * ($t + $mod)); 

    // Amplitude Mod
    ($n / ($sampleRate / 10) % 2 == 0) ? $amplitude-- : $amplitude++;   

    $samples[] = (int)$w;
}   

$str = call_user_func_array("pack",
    array_merge(array("VVVVVvvVVvvVVv*"),
        array(// header
            0x46464952, // RIFF
            ($samplesCount * 2) + 44 - 8, // Filesize
            0x45564157, // WAVE
            0x20746d66, // "fmt " (chunk)
            16, // chunk size
            1, // compression (2 byte iteger)
            1, // nchannels
            $sampleRate, // sample rate
            $sampleRate * $Bps, //bytes/second
            $Bps, //block align
            $bps, //bits/sample
            0x61746164, //"data"
            $samplesCount * 2 // samples * compressed int
        ),
        $samples //data
    )
);  

// echo print_r($samples) . PHP_EOL;
$myfile = fopen("/tmp/sine.wav", "wb") or die("Unable to open file!");
fwrite($myfile, $str);
fclose($myfile);