Intereting Posts
Хотите вручную отправить SYN ACK-пакеты для установления TCP-соединения (по возможности, в PHP) Как создать пользовательское меню / подменю с помощью wp_get_nav_menu_items в wordpress? Как добавить поле загрузки в сообщение пользователя в wordpress Обслуживание файла через PHP-скрипт и безопасная замена этого файла на лету HTACCESS / PHP – переписывать URL-адрес при повторном указании на другой URL-адрес 2 штуки аналогичного PHP, один работает один нет? Вход в систему Facebook с помощью Sentry, для пользователя требуется пароль. Как преобразовать формат времени, который я получил от PHP, в формат, который принимает обратный отсчет jQuery Как решить «вызов неопределенной функции domxml_new_doc () …» Как округлить десятичное число? Ссылка. Что означает этот символ в PHP? Безопасное извлечение вывода для обоих полей html и ввода В Laravel 5.1 Нельзя публиковать значение флажка используя mysql regex_replace с регулярным выражением Изменение размера анимированного GIF-файла без уничтожения анимации

Создание wav-тона в PHP

Я хотел бы генерировать синус-тон в php. Но, построив мой wav, мне нужно дать значения в байтах. Я не знаю, как это сделать:

Вот код, который у меня есть:

$freqOfTone = 440; $sampleRate = 44100; $samplesCount = 80000; $amplitude = 0.25 * 32768; $w = 2 * pi() * $freqOfTone / $sampleRate; //$dataArray = new $text = "RIFF" ."80036" ."WAVE" ."fmt " ."16" ."1" ."1" ."44100" ."44100" ."1" ."8" ."data" ."80000"; for ($n = 0; $n < $samplesCount; $n++) { $text .= (int)($amplitude * sin($n * $w)); } $myfile = fopen("sine.wav", "w") or die("Unable to open file!"); fwrite($myfile, $text); fclose($myfile); 

    Проблема в том, что алгоритм записывает числа как текст. В то время как .wav файл кодирует двоичный файл данных.

    Вы можете использовать pack экземпляра для группировки данных.

     $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); fclose($myfile); 

    Это создает этот файл .

    Обратите внимание, что вы не можете просто повторно использовать вышеуказанный заголовок. Некоторые аспекты были жестко запрограммированы, которые отличаются (например, размер файла, количество каналов, битрейт и т. Д.). Но если вы читаете документацию , можно легко изменить заголовок соответствующим образом.