Что касается самого предупреждения, вы не делаете ничего плохого. Вы также можете увидеть предупреждение от робости, которое выглядит примерно так:
Warning: -: Illegal seek: Can't make valid header
Что там происходит, объясняется на странице руководства timidity:
Если вывод направляется в файл без поиска или если TiMidity++ прерывается перед закрытием файла, заголовок файла будет содержать 0xffffffff в полях RIFF и длины блока данных.
Обратите внимание, что RIFF — это формат кодирования, обычно называемый по расширению файла .wav
. Когда timidity записывает RIFF-файл, он не знает, насколько длинным будет этот файл, поэтому записывает какой-то мусор-заполнитель в заголовок и переходит к записи данных. Когда он заканчивает с данными, он знает, как долго файл, поэтому он возвращается к началу файла и записывает этот мусор в заголовке. Когда вы пишете в канал, у него нет возможности вернуться и что-то переписать: нижестоящая программа должна обрабатывать мусор-заполнитель. Также со страницы руководства timidity:
Популярная утилита преобразования звука sox способна считывать такие искаженные файлы, поэтому вы можете напрямую передавать данные в sox для преобразования на лету в другие форматы.
Таким образом, сообщение, которое вы упомянули. Сокс сообщает вам, что повар неправильно приготовил напильник, НО СОКС В ЛЮБОМ СЛУЧАЕ ЕГО СЪЕСТЬ, ПОТОМУ ЧТО СОКС НЕ ПРИБЫЛЬНЫЙ. Сокс явно пассивно-агрессивен. Кто знал?
Вы можете игнорировать эти предупреждающие сообщения, потому что теперь они сообщают вам то, что вы уже знаете. Или вы можете использовать необработанный формат и явно указать timidity и sox, как хорошо играть друг с другом:
timidity file.midi -Or1Ssl -s44.1 -o- | sox -t raw -b 16 -e signed -r 44.1k -c 2 - file.ogg
Что касается искажения, то оно может быть частично вызвано особенностями аудиобиблиотек в системе Windows. Я отмечаю, что конвейер в вопросе без расширений .exe
производит вывод без заметных искажений в системе Linux. Использование четко определенного необработанного формата в конвейере также может решить эту проблему.
Обратите внимание, что для вывода в формате Ogg теперь вы можете получить это непосредственно из timidity:
timidity file.midi -o file.ogg -Ov
person
wyrm
schedule
25.12.2015