Если все файлы имеют одинаковые параметры, такие как частота дискретизации и количество каналов, вы все равно не можете просто их объединить. Вы должны удалить WAV-заголовок.
Возможно, проще всего использовать утилиту для манипулирования аудиофайлами, например, sox
, которая содержит метод для катации файлов. На самом деле, он делает это по умолчанию. Например, чтобы объединить три WAV-файла в один длинный:
$ sox short1.wav short2.wav short3.wav long.wav
Цикл не упорядочит файлы в нужном вам порядке. Вам нужно отсортировать имена, но обработать их численно. sort -n
сделает это
Таким образом:
$ sox $(ls *.wav | sort -n) out.wav
Если sox
не может обработать такое количество файлов, мы можем разбить работу следующим образом:
$ ls *.wav | sort -n > script
Тогда у нас есть файл сценария, который выглядит так:
1.wav
2.wav
...
3999.wav
4000.wav
...
file7500.wav
Мы редактируем это, чтобы сделать несколько командных строк:
# catenate about half the files to temp1.wav
sox \
1.wav \
2.wav \
... \
3999.wav \
temp1.wav
# catenate the remainder to temp2.wav
sox \
4000.wav \
... \
7500.wav \
temp2.wav
# catenate the two halves
sox temp1.wav temp2.wav out.wav ; rm temp1.wav temp2.wav
В качестве первого шага редактирования списка файлов вы можете использовать команду vi
:%s/.*/& \\/
чтобы добавить обратную косую черту после каждой строки.