bash склеить два wav файла в один в цикле (рекурсивно)

Рейтинг: 0Ответов: 2Опубликовано: 14.01.2023

Подскажите, вот в каком вопросе:

имеется директория с файлами вида file_name_[id]t.wav и file_name[id]r.wav, file_name[id] совпадают.

  1. нужно найти все файлы у которых совпадают file_name_[id]
  2. склеить их в один .wav файл формата file_name_[id].wav (например через sox)
  3. и так по всем файлам (в цикле)

не могу победить склеивание, последний вариант на данный момент (который остался для теста)

#!/usr/bin/env bash

sox=/usr/bin/sox
lame=/usr/bin/lame

recorddir="/var/spool/asterisk/monitor/2023/01/14_test/14"

wavfile_r="`find $recorddir -name \*_r.wav`"
wavfile_t="`find $recorddir -name \*_t.wav`"

for wavfile in `find $recorddir -name \*.wav`; do #&& for wavfile_t in `find $recorddir -name \*_t.wav`); do

sox_split=$sox $wavfile_r $wavfile_t
wavfilenopath="$(echo $sox_split | sed 's/.*\///')"
mp3file="$(echo $sox_split | sed s/".wav"/".mp3"/)"
mp3filenopath="$(echo $mp3file | sed 's/.*\///')"

nice $lame -b 32 -m m -q 9-resample "$sox_split" "$mp3file" && rm -frv $wavfile && rm -$sox_split || { echo "$sox_split encoding failed" ; exit 1; }

echo ""
echo "File -------------------------------------------------------"
echo "Wav File : " $sox_split
echo "Wav No Path : " $wavfilenopath
echo "MP3 File : " $mp3file
echo "MP3 No Path : " $mp3filenopath
echo "End File ---------------------------------------------------"
echo ""
done

Ответы

▲ 0

Допустим id выглядит так 01..99, тогда можно создать цикл по id и собрать файлы:

for i in {01..03}; {
    [[ -f file_name${i}t && -f file_name${i}r ]] && {
        echo got pair: file_name${i}t file_name${i}r
        code_to_glue_files_together
    }
}
▲ 0

у меня вышло сделать как хотелось изначально, но на питоне - работает корректно

    for root_folder, folders, files in os.walk(recordsdir):
        for file in files:
            wav_files = os.path.join(root_folder, file)
            if((file.split('.')[-1]) == 'wav'):