Мне нужно разрезать аудиофайлы на небольшие сэмплы равномерной длины. В основном мне нужен пакетный процессор для аудио, который делает это и численно называет фрагменты. Я использую OSX и нашел Audio Splitter. Самая короткая возможная длина сэмпла составляет 1 секунду, но это слишком долго для моей цели. Кто-нибудь знает альтернативу?
2 ответа
4
Отличный звуковой конвертер SoX (также называемый «Швейцарский армейский нож аудио манипуляции») работает на OS X, поэтому я надеюсь, что этот скрипт поможет вам:
#!/bin/sh
N=0
START=0
LENGTH=8000
COUNT=100
INPUT=input.mp3
OUTPUT=output-X.wav
for i in `jot ${COUNT}`; do
echo "Trimming ${START}+${LENGTH}"
sox ${INPUT} `echo ${OUTPUT} | sed s/X/${N}/` trim ${START}s ${LENGTH}s
N=`expr ${N} + 1`
START=`expr ${START} + ${LENGTH}`
done
Все длины указаны в образцах (вы также можете указать время в формате «ЧЧ: ММ: СС.ddd», проверьте страницу руководства SoX); он читает INPUT-файл и создает файлы с именем output-0.wav, output-1.wav и так далее.
0
Вот мое решение.
#!/bin/bash
INPUT=input.wav
OUTPUT=output-X.wav
N=0
START=0
LENGTH=0.05 # length in ms (to use samples you should add s suffix to commandline trim Xs Ys and s flag for soxi)
TOTAL_LENGTH=`soxi -D ${INPUT}`
while [ $(echo "$START < $TOTAL_LENGTH"|bc) -eq 1 ]; do
echo "Trimming from ${START} of ${TOTAL_LENGTH}"
sox ${INPUT} `echo ${OUTPUT} | sed s/X/${N}/` trim ${START} ${LENGTH}
N=$(($N+1))
START=`echo "$START + $LENGTH"|bc`
done
Разница в том, что:
- Скрипт работает с
ms
а не сsamples
- Количество выходных файлов автоматически определяется по длине
INPUT