Como dividir computacionalmente um arquivo de áudio em pequenas amostras?

1

Eu preciso cortar arquivos de áudio em pequenas amostras de tamanho uniforme. O que eu preciso é basicamente um processador de lote para áudio que faz isso e nomeia as fatias numericamente. Estou usando o OSX e encontrei o Audio Splitter . O comprimento de amostra mais curto possível é de 1 segundo, muito longo para o meu propósito. Alguém conhece uma alternativa?

    
por Jakob 31.01.2010 / 01:50

2 respostas

4

Um excelente conversor de som SoX (também chamado de 'canivete suíço de manipulação de áudio') funciona no OS X , então espero este script irá ajudá-lo:

#!/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

Todos os comprimentos estão em amostras (você também pode especificar o tempo no formato 'HH: MM: SS.ddd', verificar a página do SoX); ele lê o arquivo INPUT e produz arquivos chamados output-0.wav, output-1.wav e assim por diante.

    
por 31.01.2010 / 02:18
0

Aqui está a minha solução.

#!/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

A diferença é:

  • O script funciona com ms em vez de com samples
  • A quantidade de arquivos de saída é detectada automaticamente por INPUT length
por 17.06.2014 / 17:51