On Mon, Sep 11, 2006 at 02:49:44PM +0300, Konstantin. A. Bylym wrote: > Задача: > Запись событий в помещении (звук) с микрофона. > > Решение: > 1. Запись: rec -c 2 -r 44100 -s w -t WAV - | lame -q 9 - $file > 2. Запуск cron'ом (с перерывом на обед) > 3. Доступ к файлам через ФТП > > Проблема: > По достижении файлом размера 194784025 запись в него прекражается и > продолжается (благодаря cron'у) в новый со следующим порядковым номером. Вот теперь можно понять, что происходит. Проблема в том, что формат wav содержит заголовок, в котором, в частности, указывается размер файла, причём для этого поля отведено 4 байта, поэтому размер wav-файла не может быть больше 4G (а на самом деле проблемы начинаются уже с 2G, поскольку многие программы рассматривают это значение как число со знаком). Поскольку заголовок находится в начале файла, при выводе в поток, как делается в данном случае, в принципе невозможно вывести полностью корректный файл - sox при этом ставит в поле размера значение 0x7ffff000L (чуть меньше 2G). Далее lame читает из потока заголовок с этим размером, читает и кодирует данные указанного размера, после чего считает, что входных данных больше нет - даже если sox продолжает их выдавать. Для обхода этого ограничения необходимо передавать данные от sox к lame в формате RAW, указав его характеристики соответствующими опциями как sox, так и lame.