1

Мне нужно разрезать аудиофайлы на небольшие сэмплы равномерной длины. В основном мне нужен пакетный процессор для аудио, который делает это и численно называет фрагменты. Я использую OSX и нашел Audio Splitter. Самая короткая возможная длина сэмпла составляет 1 секунду, но это слишком долго для моей цели. Кто-нибудь знает альтернативу?

2 ответа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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .