gpt4 book ai didi

php - 生成WAV并添加第二个(立体声) channel

转载 作者:行者123 更新时间:2023-12-03 01:44:18 27 4
gpt4 key购买 nike

我在stackoverflow上找到了以下不可思议的代码。请任何人帮助我添加第二个 channel (立体声)

将有nchannels = 2
必须(以某种方式)增加文件大小,并且必须添加2.数组(即samples2)。

当我尝试时,我只会达到更高的频率。

非常感谢德国:马丁

$freqOfTone = 440;
$sampleRate = 44100;
$samplesCount = 80000;

$amplitude = 0.25 * 32768;
$w = 2 * pi() * $freqOfTone / $sampleRate;

$samples = array();
for ($n = 0; $n < $samplesCount; $n++) {
$samples[] = (int)($amplitude * sin($n * $w));
}

$srate = 44100; //sample rate
$bps = 16; //bits per sample
$Bps = $bps/8; //bytes per sample /// I EDITED

$str = call_user_func_array("pack",
array_merge(array("VVVVVvvVVvvVVv*"),
array(//header
0x46464952, //RIFF
160038, //File size
0x45564157, //WAVE
0x20746d66, //"fmt " (chunk)
16, //chunk size
1, //compression
1, //nchannels
$srate, //sample rate
$Bps*$srate, //bytes/second
$Bps, //block align
$bps, //bits/sample
0x61746164, //"data"
160000 //chunk size
),
$samples //data
)
);
$myfile = fopen("sine.wav", "wb") or die("Unable to open file!");
fwrite($myfile, $str);

最佳答案

解决方案从问题移至答案:

SELF SOLUTION: I checked the recorder.js Web Worker, found the SPEC and how to use it. Here is a slightly modified code for a tone going from the right speaker to the left in 1 sec. Maybe it helps somebody.

$freqOfTone = 440;
$sampleRate = 44100;
$samplesCount = 80000;

$amplitude = 0.25 * 32768;
$w = 2 * pi() * $freqOfTone / $sampleRate;

$samples = array();
$samples2 = array();
for ($n = 0; $n < $samplesCount; $n++) {
$samples[] = (int)($amplitude*($n/$samplesCount) * sin($n * $w));
$samples2[] = (int)($amplitude*(1-$n/$samplesCount) * sin($n * $w ));
}

function interleave($l,$r){
$data=array();
$ix=0;
for($i=0;$i<count($l);$i++){
$data[$ix++]=$l[$i];
$data[$ix++]=$r[$i];
}
return $data;
}

$stereo=interleave($samples,$samples2);


echo(count($samples));
echo(count($stereo));

$srate = 44100; //sample rate
$bps = 16; //bits per sample
$Bps = $bps/8; //bytes per sample /// I EDITED


$samples_merge=array_merge($samples,$samples2);

$str = call_user_func_array("pack",
array_merge(array("VVVVVvvVVvvVVv*"),
array(//header
0x46464952, //RIFF
80000*2*2+36, //File size *2*Channels +36
0x45564157, //WAVE
0x20746d66, //"fmt " (chunk)
16, //chunk size
1, //compression
2, //nchannels
$srate, //sample rate
$Bps*$srate, //bytes/second
$Bps, //block align
$bps, //bits/sample
0x61746164, //"data"
80000 * 2 *2 //chunk size (filesize * 2 *Channels)
),
$stereo // Stereo tone left[0], right[0], left[1], right[1], ...
)
);
$myfile = fopen("sine.wav", "wb") or die("Unable to open file!");
fwrite($myfile, $str);
fclose($myfile);

关于php - 生成WAV并添加第二个(立体声) channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com