Last active
June 29, 2023 14:48
-
-
Save jorgehatccrma/24786ee7fc8158e7bd1b010d7cf34bbe to your computer and use it in GitHub Desktop.
Recursively resample a bunch of audio files in a directory, using sox
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# A simple script to recursively resample a bunch of files | |
# in a directory. Only certain file extensions (mp3, aac, | |
# flac, wav) are considered. | |
# | |
# It takes 2 command line options: `indir` and `outdir`. | |
# The destination (`outdir`) is relative to the current | |
# directory of where you were when the script was run. | |
# | |
# Example: resample.sh audio/ resampled/ | |
# | |
# The direcotry structure inside `indir` will be replicated | |
# in `outdir`. | |
# Sourece directory with files to convert | |
InDir=$1 | |
# Set the directory you want for the converted files | |
OutDir=$2 | |
# make sure the output directory exists (create it if not) | |
mkdir -p "$OutDir" | |
# Target sample rate | |
TARGET_SR=16000 | |
# Target num channels | |
TARGET_NC=1 | |
# Convert each file with SoX, and write the converted file | |
# to the corresponding output dir, preserving the internal | |
# structure of the input dir | |
find -E $InDir -type f -iregex '.*\.(mp3|wav|flac|aac)$' -print0 | while read -d $'\0' input | |
do | |
echo "processing" $input | |
# the output path, without the InDir prefix | |
output=${input#$InDir} | |
# replace the original extension with .wav | |
output=$OutDir${output%.*}.wav | |
# get the output directory, and create it if necessary | |
outdir=$(dirname "${output}") | |
mkdir -p "$outdir" | |
# finally, convert the file | |
sox "$input" -r $TARGET_SR "$output" remix 1,2 | |
echo "saved as $output" | |
done |
Thanks for the script @jorgehatccrma . It worked great first time. Now I can use my sample in my Octatrack and the BPM is preserved.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How would you avoid problems of clipping and dithering? I undersand you need to add a -G option. Is that correct?
sox WARN rate: rate clipped 1 samples; decrease volume?
sox WARN dither: dither clipped 1 samples; decrease volume?