kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
Ну, во-первых, hook 2 раза писать не надо – он и с 1-го разу навесил на add pad. Увы, всё не так просто – попробуйте запустить на 1-м воркспейсе что-нибудь по-тяжеловеснее, и Вы поймете, о чём я – Musca не ждёт появления окна после старта приложения, и если оно долго грузится – норовит влезть не в свою группу. |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
Однако же, дилема :) Тем временем, я решил проиллюстрировать работу Musca через pipe, и, заодно, решить проблему с раскидыванием приложений по рабочим группам при автостарте. Написал вот скриптик, ожидающий, пока не запустятся все приложения данной группы, после чего переходящий к загрузке группы следующей. Получилось кривовато, и не без багов – я не оч. хорошо знаю shell скриптинг, точнее, почти не знаю ^-^ #!/bin/sh #SYNOPSIS: iexec.sh <musca_dump> [<any commands to run...>] <last command> #TODO: скриптик ненадёжен, имеет баг -- имена команд должны быть без пробелов -- так что используйте для запуска приложений с параметрами alias или скрипты; также при сравнении дампа и списка текущих окон -- имеет значение порядок окон, что может очень мешать -- рабочая группа не распознается как загруженная #проверяем наличие аргументов if [ $# -gt 1 ] then #проверяем доступ к файлу дампа if test -r $1 then #добавляем группу, загружаем текущий дамп echo "add someone" | musca -i echo "load "${1} | musca -i #запускаем приложения x='$'$# eval x=$x for i in "[email protected]" do if [ "$i" != "$1" -a "$i" != "$x" ] then "$i" & fi done #проверяем -- сходятся ли названия окон дампа и текищее до тех пор, пока не сойдутся dump=`cat $1 | grep window | cut -f 4- | sed -e 's/\tunknown//'` current=`musca -c "show windows" | cut -d \ -f 3-` until [ "$dump" = "$current" ] do sleep 0.1 current=`musca -c "show windows" | cut -d \ -f 3-` # echo "not done..." done # echo "It's done!" #при совпадении всех окон -- запускаем последний аргумент exec "$x" else echo "Can't read dump file!" fi else echo "Necessary Musca dump name and no less one started program!" fi exec ~/.bin/iexec.sh .musca_dump/work ~/.bin/strtjack ~/.bin/emacs_sc.sh ~/.bin/iexec2.sh Если кто знает shell – было бы неплохо довести это до ума ;) |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
К сожалению, с Ratpoison я не так хорошо знаком. Основной функционал я описал, так что, было бы интересно услышать мнение человека, работавшего в Ratpoison и хорошо знакомого с ним; у меня, увы, нет свободного времени на их сравнительный анализ. |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
Естественно, для работы с SC требуются элементарные знания звукотехники, но не нужно быть гением, чтобы понимать Преобразование Фурье, например. Тем, кто еще не пробовал себя в звукосинтезе – рекомендую для начала модульные синтезаторы, коих под Linux, конечно, есть. Как-то: gAlan, Spiral Synth, ALSA Modular synth, Ingen (много их) Более продвинутых могут заинтересовать языки визуального алгоритмического звукосинтеза: Pure Date, JMax. Также существуют алгоритмические секвенсоры AlgoScore и KyCE (да-да, есть под Linux и такое). Да и SuperCollider, конечно, не одинок – CSound, Chuck, Q_mus, Faust (и это только самые известные из них) Для тех, кто, всё-же выберет изучение Super Collider – выложил учебник. |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
Итак, предположим, самые стойкие, преодолев сий тернистый путь, задались вопросом – а как всё это работает, как теперь извлечь хоть какой-нибудь звук. Итак! Загрузившись с rt-ядра, запустив jackd в rt режиме, теперь – запускаем emacs в режиме SCLang. Теперь – в EMACS – жмём C-c C-l (Ctrl+c и Ctrl+l – правда весело?), после чего sclang загрузит Super Collider, и подключится к jack. Всё! Можно писать код своего музыкального шедевра. Запускается каждая строчка кода сочитанием C-c C-c (Ctrl+c два раза подряд). Код для примера: Server.default = s = Server.internal.boot; {SinOsc.ar(LFNoise0.ar([10,15],400,800),0,0.3)}.play; Тем, кому надоест слушать мой шедевр, подскажу – выключить всё это можно набрав M-x sclang-stop. Настоянельно рекомендуемая информация для дополнительного ознакомления: тут, и, особенно, тут: /usr/share/SuperCollider/Help/Linux/EmacsEditor.html |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
А теперь – самое интересное :) – ставим SuperCollider. Если повезёт – из AUR, нет – просим у h4rtr3d'а ;) (как оказалось, для работы программа требует avahi, хотя как зависимость, оно почему-то не тянется, так что будьте осторожны). После установки необходимо настроить – SuperCollider для EMACSа и EMACS для SuperCollider'а ;D Итак, находим в исходниках linux/examples/{sclang.cfg.in, sclang.sc} и копируем их в ~/{.sclang.cfg, .sclang.sc} соответственно. Далее – правим под свои нужды. Если кому лень рыться в исходниках – выкладываю свои конфиги – на данный момент они должны работать в Arch Linux (хотя бывает всякое). // ===================================================================== // file: sclang.sc // content: example sclang startup file // author: stefan kersten <[email protected]> // ===================================================================== // NOTE: this is just an example not needed for // regular operation of sclang! // ===================================================================== // set up Server to use a different executable Server.program = "/usr/bin/scsynth"; // same for Score Score.program = Server.program; // set some server options for a different setup #[\internal, \local].do { |s| s = Server.perform(s); s.options.numInputBusChannels = 2; s.options.numOutputBusChannels = 5; }; // hook up jack ports to audio channels "SC_JACK_DEFAULT_INPUTS".setenv( "system:capture_1," "system:capture_2" ); "SC_JACK_DEFAULT_OUTPUTS".setenv( "system:playback_1," "system:playback_2," // "system:playback_3" // "system:playback_4," // "system:playback_5" ); // EOF # ====================================================================== # file: sclang.cfg # content: SuperCollider library configuration file # author: stefan kersten <[email protected]> # ====================================================================== # usage: install as /etc/sclang.cfg or ~/.sclang.cfg # ====================================================================== # default class library +/usr/share/SuperCollider/SCClassLibrary # system-wide extensions +/usr/share/SuperCollider/Extensions # in case you don't want to use add-on libraries, uncomment as necessary #-/usr/share/SuperCollider/SCClassLibrary/crucial #-/usr/share/SuperCollider/SCClassLibrary/JITLib # EOF Достаточно в .emacs вписать (require 'sclang) Для загрузки режима для любого открытого файла можно использовать M-x sclang-mode (Жмём Alt+x и набираем sclang mode ; не забываем об автодополнении) Если не хочется редактировать конфиг EMACS'а – можно запустить как emacs -sclang |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
А, поскольку это программа звукосинтеза в реальном времени – начну с того, как настроить систему для вменяемой работы с ней (ага, в этом месте все достают заготовленные напильники и бубны, заседание умелых ручек можно считать открытым). Итак, нам потребуется ядро реального времени. Его сборка – тема отдельной статьи (если повезёт, можно даже поставить из AUR). Также не стоит забывать, что под новое ядро, возможно, придётся ставить и новые модули, например, проприетарные драйвера на видиоконтроллер. Разобравшись с ядром, следует поставить ограничения на PAM, вписав нужное в /etc/security/limits.conf (когда-то я уже это делал) и не забыть проверить инициализацию PAM в любимом login manager (раскомментировать в /etc/pam.d/<ваш_любимый_LM> всё нужное). Теперь ставим аудиосервер jack. Его настройка уже сильно зависит от имеющегося железа, единственное требование – запустить его в режиме реального времени с наименьшей задержкой, но достаточным буффером, чтобы избавиться от рипения. У меня он показывает хороший результат при запуске jackd -Rv -p512 -d alsa -dhw:0 -r48000 -p4096 -n2 |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
Super Collider, насколько я знаю – текстовый редактор, аудиосервер и интерпритатор одноимённого языка в одном флаконе (что несколько роднит его с EMACS ;) ), создан изначально под наиболее мультимидийную платформу MAC OS X под лицензией GPL, портирован на Linux (где может работать через редакторы gedit, emacs и vim) и win. А вобще, это – язык алгоритмического звукосинтеза. ;D |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
Спасибо H4rtr3d' у – это, пожалуй, лучший подарок ко дню рождения 8) |
kamiel |
|
Темы:
14
Сообщения:
74
Участник с: 29 апреля 2009
|
~ % yaourt -Qs kernel extra/autofs 5.0.4-4 A kernel-based automounter for Linux. core/kernel-headers 2.6.30.1-1 (base) Kernel headers sanitized for use in userspace core/kernel26 2.6.30.2-1 (base) The Linux Kernel and modules core/kernel26-firmware 2.6.30-1 (base) The included firmware files of the Linux Kernel local/kernel26rt 2.6.29.4_rt15-1 (archaudio-kernels archaudio-minimal archaudio-suite) The Linux Kernel and modules with realtime preemption core/klibc-module-init-tools 3.8-1 (base) Utilities for inserting and removing modules from the Linux kernel extra/libdrm 2.4.12-1 Userspace interface to kernel DRM services core/module-init-tools 3.8-1 (base) utilities needed by Linux systems for managing loadable kernel modules local/nvidia-96xx-rt 96.43.11-1 NVIDIA legacy drivers for kernel26rt, 96xx branch Checking for pkg-config... yes Checking for sndfile >= 1.0.16... yes Checking for sndfile >= 1.0.18... yes Checking for libcurl >= 7... yes Checking for fftw3f... yes Checking for jack >= 0.100... yes Checking for avahi-client... yes Checking for alsa... yes Checking for C header file /System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h... no Checking for C header file linux/input.h... no Checking for C header file cwiid.h... no Checking for C header file altivec.h... no Checking for C header file xmmintrin.h... no NOTICE: CPU has SSE support Checking for C header file X11/Intrinsic.h... yes Checking for XQueryPointer() in C library X11... yes Checking for C function strtod()... yes Думаете, стоит пересобрать последнюю версию ядра? Или поставить старые kernel-headers ? Или дело не в этом??? |