последовательное прослушивание файлов в директории

Разные проблемы звука, видео, обсуждение разных устройств и т.д.

Модератор: Модераторы разделов

Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

последовательное прослушивание файлов в директории

Сообщение TechnoMag »

Иногда возникает необходимость выбрать один звуковой файл (для звуковой схемы, например) из директории, в которой находятся несколько файлов. Для этого нужно их последовательно прослушать с интервалом, скажем, 3 секнды.

Не могу найти способ написания цикла по такой схеме:

1. Нашли файл в директории
2. Выполнили над ним действие (прослушали , заснули на 3 сек)
3. шаг 1, но уже ищем далее - следующий файл

Как такой цикл реализовать на bash?
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
Аватара пользователя
Ariasp
Сообщения: 254
Статус: NixLander

Re: последовательное прослушивание файлов в директории

Сообщение Ariasp »

TechnoMag писал(а):
26.09.2008 01:20
1. Нашли файл в директории
2. Выполнили над ним действие (прослушали , заснули на 3 сек)
3. шаг 1, но уже ищем далее - следующий файл

Как такой цикл реализовать на bash?

примерно так

Код: Выделить всё

#! /bin/bash

for muz in /dir_name/*.mp3
do
play $muz
sleep 3
done
Спасибо сказали:
Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: последовательное прослушивание файлов в директории

Сообщение TechnoMag »

Хотелось бы вот так. Но почему-то не получается.

Код: Выделить всё

#!/bin/sh

# play all files in directory

#directory="$1"
extention="$1"
timeout="$2"
 #cd $directory

for Name in `ls -1 $extention`
do
    play "$Name"
    sleep $timeout
done

echo "End of directory"
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: последовательное прослушивание файлов в директории

Сообщение rm_ »

Вот так будет проще:

Код: Выделить всё

find -name \*.mp3 -exec bash -c "play \"{}\"; sleep 3;" \;
Спасибо сказали:
Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: последовательное прослушивание файлов в директории

Сообщение TechnoMag »

вместо *.mp3 и 3 (sleep) нужно вводить как аргументы командной строки.
Пробовал во всех предложеных вариантах. :(
Останавливается после проигрывания первого файла.
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: последовательное прослушивание файлов в директории

Сообщение rm_ »

Код: Выделить всё

find -name "$1" -exec bash -c "play \"{}\"; sleep $2;" \;

...в шелл-скрипте, не работает?
Спасибо сказали:
Аватара пользователя
Ariasp
Сообщения: 254
Статус: NixLander

Re: последовательное прослушивание файлов в директории

Сообщение Ariasp »

TechnoMag писал(а):
26.09.2008 13:45
Хотелось бы вот так. Но почему-то не получается.

Код: Выделить всё

#!/bin/sh

# play all files in directory

#directory="$1"
extention="$1"
timeout="$2"
 #cd $directory

for Name in `ls -1 $extention`
do
    play "$Name"
    sleep $timeout
done

echo "End of directory"


убери ключ l у ls
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1104
ОС: ArchLinux

Re: последовательное прослушивание файлов в директории

Сообщение Black »

А так не пойдёт:

Код: Выделить всё

#!/bin/sh
while getopts "s:" Option
do
    case $Option in
        s) sleeptime=$OPTARG;;
    esac
done
shift $(($OPTIND - 1))
[[ -z $sleeptime ]] && sleeptime=1
for i in *.$1
do
    echo "$i"
    mplayer "$i" > /dev/null
    sleep $sleeptime
done
exit

Опция -s - время задержки. В качестве аргумента передаётся суффикс файлов. Работает так:
скрипт -s 3 wav
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: последовательное прослушивание файлов в директории

Сообщение TechnoMag »

Black писал(а):
26.09.2008 17:03
А так не пойдёт:

Код: Выделить всё

#!/bin/sh
while getopts "s:" Option
do
    case $Option in
        s) sleeptime=$OPTARG;;
    esac
done
shift $(($OPTIND - 1))
[[ -z $sleeptime ]] && sleeptime=1
for i in *.$1
do
    echo "$i"
    mplayer "$i" > /dev/null
    sleep $sleeptime
done
exit

Опция -s - время задержки. В качестве аргумента передаётся суффикс файлов. Работает так:
скрипт -s 3 wav


Класс!!! Спасибо большое!
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: последовательное прослушивание файлов в директории

Сообщение TechnoMag »

Расшифруйте пожалуйста строки:

Код: Выделить всё

shift $(($OPTIND - 1))
[[ -z $sleeptime ]] && sleeptime=1
- Домашний Linux -
Памятки для пользователя
Спасибо сказали: