Если все файлы имеют одинаковые параметры, такие как частота дискретизации и количество каналов, вы все равно не можете просто их объединить. Вы должны удалить 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/.*/& \\/
для добавления обратной косой черты после каждой строки.