Архив за » Январь, 2010 «

Звуковые затейки

Понадобилось мне как-то убрать pulseaudio из моей уютненькой ubuntu 9.10 –  помогло Выковыриваем pulseaudio из Ubuntu 9.10. Большое им  спасибо за инструкцию! В конечном итоге всё сработало отлично.

А понадобилось Pulseaudio удалить вот почему: я вывожу звук сразу в наушники, колонки и комнату (комп на кухне), иногда надо выключить/подрегулировать эти каналы, а Его Невменяемость Апплет Громкости Pulseaudio ни в какую нежелал управлять ими отдельно, несмотря на все мои попытки внушить ему модель звучка. Сучёнок. Туда ему и дорога…

Всё ещё остаётся у меня другая задачка: заставить разные приложения вещать в разные каналы, дабы, скажем, говорить по скайпу в наушниках, а в два других гнать музыку, или включить жене телевизер в комнате (второй монитор, VLC и iptv), а самому кодить дальше. А пока у меня один PCM на всех, да выключатель наушников, что торчат из передней панели.

А в перспективе у меня настройка multiseat, т.к. клавомышь в комнате тоже есть и лениво тратить валюту на второй системник/нетбук, мы с женой в основном комп не нагружаем… И проблема разделения звукового вывода есть и в этой задаче.

Не подскажете, господа хорошие, как мне коммутировать звуковой вывод с приложений на мои каналы альсой?

P.S. И да, я знаю толк в извращениях.

Категория: all, linux  Теги: ,  3 комментариев  
Последовательное копирование
UPD: Я мудак, задача решалась командой вроде "sort %src_path | cp -r".

…или “Почему, как и почём скупой платит дважды”.

Полгода назад я, в надежде разрешить наконец проблему мрущих от избыточной влаги мобильных девайсов (похоронил, в общей сложности, 4 мобилы и 3 плеера именно по этой причине), приобрёл сначала минимальный GSM-аппарат, а потом и почти минимальный mp3-звучок. Телефон Nokia 1202 пока служит мне верой и правдой, за что огромное спасибо и ему, и производителю – мой режим эксплуатации выдержит далеко не каждый девайс.

Но сегодня речь о плеере. Неплохие наушники спасли меня от посредственного качества звучка Apacer, но есть у него и другие недостатки. Основные же достоинства – слот для карт памяти SDHC и цена в 30 евро, аккурат как телефон.

Задача

Вопрос, стоявший перед разработчиком архибюджетного плеера: как простейшим образом отсортировать файлы перед проигрыванием? Правильно: не сортировать вообще! То есть, и вопроса-то такого не стояло – внутри поставленной на воспроизведение  папки файлы проигрываются не по алфавиту и даже не по дате создания/модификации, нееет… Строго по порядку добавления в файловую систему: THIS IS SPARTAAA!!!

Пока для заливки использовался Total Commander, я эту “фишечку” замечал только при сортировке папок, но вот давеча пересел на никсы и обнаружил, что и cp, и nautilus, и gnome-commander юзают функцию копирования, реализованную в ядре (правильно, зачем изобретать велосипеды? nix way, open source, etc.), а вот она-то, голубушка, копирует файлы по порядковому номеру иноды, или как-то ещё, словом – не по алфавиту и не по дате. И всё бы ничего, да только слушаю я аудиокниги на своём звучке, и мне страшно лень каждые 5 минут шерстить папку о 50 файликах в поисках следующего.

UPD: Я мудак, задача решалась командой вроде “sort %src_path | cp -r”. Звучок накрылся раньше, чем я это узнал – пришлось сделать апгрейд до YP-T10, хорошо, хоть нашёл. Хороший айподкиллер, кстати. Главное достоинство киллера соблюдено – плюшек больше, цена та же.

Всё-таки дата модификации

Сначала я искал решение проблемы в установлении положительной разницы в n секунд между датами модификации каждого следующего и предыдущего файлов, даже написал более-менее удачный скрипт, который реализует сие по заданному пути рекурсивно:

#!/bin/sh
cd "$1"
if [ "$2" != '' ];
then
 ig=$2
 echo "Starting in $1, $ig"
else
 ig=`date +%s`
 echo "Starting in the source dir..."
fi
num=`ls -1 | wc -l`
echo "$num files to touch"
for i in `ls -1`do 
 if [ -d "$i" ]; then
  echo "Subdir $i found, calling child...n"
  $0 $i $ig
 else
  touch $i --date="`date -d @$ig +%X%t%z`"#
  echo "$i touched" 
 fi
 ig=`expr $ig + 60`
done

Как видно, в IF-е мы поверяем, не вызвали ли нас рекурсивно (а при таком вызове нам сообщают, с какого времени в “формате epoch” следует начинать модификацию), и ежели не рекурсивно вызвали, то узнаём текущее время. Далее мы сообщаем пользователю, сколько файлов в данной папке надобно перетыкать, и приступаем непосредственно к тыканью (трогательной командой touch). Лично я задал инкремент, равный 60 секундам, чтобы наглядно видеть результат в файлменеджере. В самом тыкоцикле есть проверка – а не папку ли мы тыкаем? А ежели папку, то вызываем мы сами себя, но уже с указанием этой подпапки. Такая вот простейшая конструкция.

Есть у этой поделки и небольшой минус: поскольку итоговое значение переменной цикла по выходу из дочернего экземпляра скрипта назад в родительский не передаётся, файлы с одинаковой датой в разных папках всё-таки будут. Но для моей задачи значения это не имеет: “хитрая” сортировка файлов нужна только внутри одной папки.

Наконец, последовательное копирование

В любом случае, вышеописанный скрипт мне не помог, по известной причине – чихать мой Apacer хотел на дату, ему важны только положения файлов в FAT-таблице. Так что задача существенно упрощается: точно тем же макаром отсортировать файлы в папке по алфавиту и скопировать их в таком порядке в нужную папку!

#!/bin/sh
cd "$1"
if [ "$2" != '' ];
then
 echo "Starting alphabetic cp from $1 to $2"
else
 echo "Select destination"
 exit 3
fi
num=`ls -1 -R | wc -l`echo "$num files to copy"
for i in `ls -1`do
 if [ -d "$i" ];
 then
  echo "Subdir $i found, calling child...n"
  mkdir "$2/$i"
  $0 $i "$2/$i"
 else
  cp -f $i $2
 fi
done

Здесь мы просто проверяем, задан ли конечный пункт (если не задан начальный, не страшно, правда?), и если задан, считаем количество копируемых файлов-папок в начальном пункте (поленился уже выводить подсчёт размера). Дальше всё как в прошлом скрипте – ежели папка, запускаем дочерний экземпляр, если нет – копируем в пункт назначения. И всё.

Итого:

Ушедшее время: полночи, со всеми разбирательствами, шаманством и манокурством (именно в такой последовательности);

Базовые инструменты: dash, date, ls, touch, cp; grep, sed, и Total Commander-под-Wine были рассмотрены и отвергнуты по причине избыточности.

Источники: три туториала по sh-скриптингу, маны и гайды по date и epoch легко находятся в гугле по соответствующим запросам.

Всем, кто участвовал в появлении задачи как таковой (Apacer, linux kernel devteam) и помощи в её решении (Google и много незапомнившегося народу из сети) – большое спасибо!
Первая

Абвг… Кажется, работает.

Вот я и сконструировал своё Убежище. Отдельное спасибо тому, кто оставил здесь набор для этого и тому, кто его придумал и сделал.

Со временем здесь появятся разные штуки из дорожного рюкзака-тайника. По мере разгрузки. Вот тогда и заходите…