砂で波の音を作る楽器の音っぽいの
音声信号のテスト用にサインウェーブ作ろうとしたら、たまたまそんな感じの音が鳴ったのでメモ。
フーリエ変換のチェック用に、1024 の窓でキリの良い音が欲しかっただけなんだ。
コード
makeWaveData.php はコレ。
<?php require_once('makeWaveData.php'); // $sampleRate = 8000; // Phone quality $sampleRate = 44100; // CD quality $nChannel = 1; // 1:monoral, 2:stereo $toneA = 44100/2048; // $sampleBits = 8; // 8 or 16 $sampleBits = 16; // 8 or 16 //$period = 0.1; // seconds; $period = 10; // seconds; $data = ''; $theta = 0; $theta_delta = $toneA * 2 * M_PI / $sampleRate; $amp = 0x1000; $totalSamples = $sampleRate * $period; //for ($i = 0 ; $i < $totalSamples ; $i++) { for ($i = 1 ; $i < $sampleRate * $period ; $i++) { // signed 16-bit array (little endian) // $v = 0 + 0x4000 * sin($theta); // $v = 0 + $amp * ($totalSamples - $i) / $totalSamples * mt_rand() / mt_getrandmax(); $volume = $amp * ($totalSamples - $i) / $totalSamples; $v = 0 + $volume * mt_rand()/ mt_getrandmax() * sin($theta/100); $data .= pack('v', $v); // acrovatic using for 'v' $theta += $theta_delta; } echo makeWaveData($data, $nChannel, $sampleBits, $sampleRate);