Page 1 of 1

Aide pour un script [résolu]

Posted: Tue 31 Jul 2018, 04:17
by patrick21
Bonjour,

j'aurais besoin d'aide pour un script.

J'utilise Soundstretch en ligne de commande pour manipuler des fichiers wav.

Pour un seul fichier, ça va. Par ex pour baisser de 3 demi-tons:

Code: Select all

soundstretch input.wav output.wav -pitch=-3
Mais j'aimerais faire ça pour plusieurs fichiers en même temps. J'aissayé:

Code: Select all

#!/bin/bash
pitch=-3
for f in *.wav; do
    fname=$(basename $f)
    ext="${fname##*.}"
    base="${fname%.*}"
    ./soundstretch $f $base$pitch.$ext -pitch=$pitch
done

Sans succès. Quelqu'un aurait-il une idée. Merci

La page de soundstrecht
https://www.surina.net/soundtouch/soundstretch.html

Posted: Tue 31 Jul 2018, 07:57
by Argolance
Bonjour,
Ne manque-t-il pas le chemin complet du dossier contenant les fichiers wav?

Code: Select all

for f in /chemin/vers/dossier/*.wav; do 
Cordialement.

Posted: Tue 31 Jul 2018, 08:02
by patrick21
merci de ta réponse.

Le script est dans le dossier où sont les fichiers. Mais peut-être que cela ne suffit pas. Je vais essayer.

Posted: Tue 31 Jul 2018, 08:15
by Argolance

Code: Select all

for f in ./*.wav; do 
:?:

Posted: Tue 31 Jul 2018, 08:29
by Argolance
Autrement, va dans la rubrique "Programming" de la partie anglophone, tu trouveras sans doute quelqu'un qui se fera un plaisir de te dépanner, ou encore sur le forum Ubuntu, où j'ai pour ma part trouvé pratiquement toutes les réponses à mes "problèmes". :wink:

Cordialement.

Re: Aide pour un script

Posted: Tue 31 Jul 2018, 08:53
by MochiMoppel
patrick21 wrote:

Code: Select all

#!/bin/bash
pitch=-3
for f in *.wav; do
    fname=$(basename $f)
    ext="${fname##*.}"
    base="${fname%.*}"
    ./soundstretch $f $base$pitch.$ext -pitch=$pitch
done

First you need to change to the working directory (= directory of script and wav files)
This should work:

Code: Select all

cd "${0%/*}"
for f in *.wav; do
P.S. I google translated this page. French is all Greek to me :lol:

Posted: Tue 31 Jul 2018, 09:17
by patrick21
Bonjour,

j'ai trouvé ce qui buggait. En fait, il faut certainement indiquer le chemin du fichier, mais surtout le ./ avant soundstretch n'a pas l'air correct.

J'ai changé le script de:

Code: Select all

#!/bin/bash
pitch=-3
for f in *.wav; do
    fname=$(basename $f)
    ext="${fname##*.}"
    base="${fname%.*}"
    ./soundstretch $f $base$pitch.$ext -pitch=$pitch
done 
vers

Code: Select all

#!/bin/bash
pitch=-3
cd /root/test
for f in *.wav; do
    fname=$(basename $f)
    ext="${fname##*.}"
    base="${fname%.*}"
    soundstretch $f $base$pitch.$ext -pitch=$pitch
done 
et cela a fonctionné. En tout cas, merci beaucoup pour votre aide.

MochiMoppel, I modified the script and added the workin directory (not with your writing, because I did not understand it), and I remove the ./ before soudstrecht wihich seems to be for windows. I dont know if it is properly made, but it works.

Thank you!

Posted: Tue 31 Jul 2018, 13:27
by MochiMoppel
patrick21 wrote:I remove the ./ before soudstrecht wihich seems to be for windows
Bonjour and congratulations!

./ before soundstretch is not only for WIndows. Since you used it in your code I assumed that you did this on purpose. You must use this syntax if the file soundstretch is located in the directory of the script and the *.wav files. If you saved soundstretch into one of the directories where bash searches for executable files, e.g. /usr/bin , then this syntax will not work.

Posted: Tue 31 Jul 2018, 18:08
by patrick21
Thanks for the explanation. I did not use this syntax really on purpose, I just copied a script. But I understand that, in my case, the ./ was not necessary.