2012-11-13 5 views
4

Je veux changer la hauteur, en utilisant sox, de chaque mp3 dans tous les dossiers de musique que j'ai. J'ai écrit cela en bash:Sox et le changement de hauteur de plusieurs fichiers audio

function pitch_mp3 { 
for mp3 in /home/mp3s/*/*.mp3 
do 
    cd "$(dirname "$mp3")" 
    output=$(basename "$mp3" .mp3)PITCHED.mp3 
    sox -S "$mp3" -C 192 "$output" pitch 50 
done 
} 

Il ajoute à la hauteur par exemple 01song.mp3 et le fichier de sortie est 01songPITCHED.mp3. Mais ce qui se passe, c'est que sox fait le travail la première fois, mais ensuite recommence à faire défiler les dossiers et ajoute de la hauteur aux mp3-s déjà lancés, donc le nom de fichier est avéré être 01songPITCHEDPITCHED.mp3. Je l'ai arrêté quand j'ai remarqué, donc je ne sais pas si ça va ajouter de la hauteur pour la troisième fois, etc.

Pourquoi et comment résoudre ce problème?

Répondre

3

Si vous souhaitez simplement sauter tous les fichiers ayant PITCHED.mp3 j'utiliser une déclaration de cas

case "$mp3" in 
    *PITCHED.mp3) 
    echo skipping "$mp3" 
    ;; 
    *) 
    #repitch as before 
    ;; 
esac 
0
function pitch_mp3 { 
for mp3 in /home/mp3s/*/*.mp3 
do 
    [[ "$mp3" = *PITCHED.mp3 ]] && continue 
    cd "$(dirname "$mp3")" 
    output=$(basename "$mp3" .mp3)PITCHED.mp3 
    sox -S "$mp3" -C 192 "$output" pitch 50 
done 
} 

Je voudrais aussi faire l'extension d'une variable, donc je ne devais pas le retaper, mais c'est juste moi.

Questions connexes