如何通过计算将音频文件切分成小样本?

如何通过计算将音频文件切分成小样本?

我需要将音频文件剪切成长度相等的小样本。我需要的基本上是一个音频批处理器,它可以完成这项工作,并用数字命名切片。我使用的是 OSX,并且发现音频分配器。但是,最短的采样长度是 1 秒,对于我的目的来说太长了。有人知道其他方法吗?

答案1

出色的声音转换器 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

所有长度均以样本为单位(您也可以以“HH:MM:SS.ddd”格式指定时间,请查看 SoX 手册页);它读取 INPUT 文件并生成名为 output-0.wav、output-1.wav 等的文件。

答案2

这是我的解决方案。

#!/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根据长度自动检测输出文件的数量

相关内容