Search
Write a publication
Pull to refresh

Comments 32

Альтернитивное решение:
find ./ -type f | ( i=0; while read line; do lines[i++]="$line"; done; mplayer "${lines[$RANDOM % $i]}" )
Не нужно модифицировать рандом под количество файлов и find'у можно дописать кучу условий выборки
Конструкция сплошь из башизмов и GNU-only вещей :)

$RANDOM нет в sh, он есть только в bash. Массивов в sh тоже нет, как нет и упрощенных арифметических операций — портабельный инкремент, например:
I=$(($I+1))

Предложенный оригинальным автором shuf — вообще GNU-only утилита. sort с аргументами типа -R (он же --random-sort) есть далеко не везде, *даже* если используется GNU sort.

Вообще есть хорошее обсуждение вопроса как выбрать случайный файл из набора на stackoverflow. По большому счету всё сводится к тому, что единственный действительно портабельный вариант — сделать это на awk.
UFO landed and left these words here
JFYI, в современнейшем и популярнейшем Ubuntu, sh уже давно не bash, а dash. В не менее современнейшем Debian — собственно, тоже.

awk мне тоже не особенно нравится и иллюзий по поводу его портабельности я не питаю; реалистично — относительно портабельны полноценные скриптовые языки типа perl / python / ruby / php — примерно в порядке перечисления реалистично их встретить…
ну, при условии, что *.wav у автора свалены в текущую папку, то подойдет и что-то типа:
mplayer `/bin/ls -R1 | sort -R | head -n 1`
UFO landed and left these words here
Обычно можно поставить в виде какого-нибудь пакета типа bsdutils. GNU coreutils включают в себя функциональный аналог jot под названием seq, поэтому все обычно им пользуются…
UFO landed and left these words here
Всё-таки это 3 строчки. А то так в любой программе можно стереть все \n, если компилятор допускает строки какой угодно длины…
Как говорится, что не так с «шметтерлинг»? :)

echo import random,os;os.system('mplayer '+('one.wav','two.wav')[random.randint(0,1)]) | python -
python -c 'import random,os;os.system(«mplayer „+(“one.wav»,«two.wav»)[random.randint(0, 1)])'
python -c 'import random,os;os.system(«mplayer » +random.choice([f for f in os.listdir('.') if f.endswith('.wav')]))'
После прочтения остался только один вопрос: нафига?
Надо было F♭ и E тогда брать.
Не у всех идеальный слух ;)
Зачем? Обычный человек отличает по высоте (какой ниже, и какой выше) два тона с разницей менее 6 Гц. Многие отличают звуки и с меньшей разницей частоты. Поэтому отличить два полутона с помощь относительного слуха — не проблема.

Тут речь шла о совершенно другом — воспроизвести только одну ноту и определить, что это за нота. Вторую воспроизводить нет смысла — тогда сразу можно будет понять с помощью относительного слуха, если знаешь, что их там только две. Тут же воспроизводится только одна нота, и, чтобы определить, какая, нужно использовать абсолютный слух.
>с разницей 6 Гц.

восприятие высоты тона ухом не линейно. попробуй сравнить синусоиды 100 и 106 Гц, а потом 10000 и 10006. удачи.
Я знаю. В данном примере, собственно, речь идёт о двух тонах на частоте 500 Гц.
Кстати, проверить, насколько близкие звуки ты отличаешь, можно с помощью теста Adaptive Pitch (требуется Flash).
надо было сыграть E# и F
проще выбирать бы было
А воспроизвести произвольный файл (по маске) из текущего и вложенных каталогов?
habrahabr.ru/blogs/linux/108223/#comment_3424415
А для подкаталогов, возможно, к ls добавить -R. Поправьте, если что)
PS Для случайной смены обоев:
cp `ls -1 ~/Изображения/Обои/*.jpg | shuf -n1` ~/Изображения/Обои/.RandomWallpaper.jpg
Кстати, по комментариям очень хорошо можно выделить два совершенно разных стиля программирования — один стремится к «техническому совершенству» (то, что работает на наибольшем количестве платформ, либо по каким-то причинам кажется автору более технически правильным), а другой — к простоте, лёгкости восприятия человеком.
Если бы вы были на винде или маке я бы посоветовал EarMaster.
Sign up to leave a comment.

Articles