2017-06-29 4 views
0

私は以下のコードを見つけました。 2番目のチャンネル(ステレオ)を追加してもらえますか?WAVを生成し、2番目の(ステレオ)チャンネルを追加します。

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); 
+0

心配しないでください:Dには時間がかかり、私は自分自身を始め覚えています。楽しい! – Bugs

答えて

0
質問から

移動ソリューション答えるために:

SELFソリューション:私は、recorder.jsのWebワーカーを確認SPECを発見し、それを使用する方法。右のスピーカーから1秒後に左に向かうトーンのコードが若干変更されています。多分誰かを助けるかもしれない。

$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); 
関連する問題