c++11 fun.

Nigdy nie lubiłem C++98, ale C++{11,14} chyba polubię. Jakieś takie toto mniej odstraszające, a z boost da się robić ciekawe rzeczy…


#include <iostream>
#include <boost/range/irange.hpp>

using namespace std;

int main() {
   auto fib = [] (int n) {
      int a = 0, b = 1;
      for (auto i: boost::irange(0, n)) {
         swap(a, b);
         b += a;
      }
      return a;
};

for (auto i: boost::irange(0, 20))
   cout << fib(i) << " ";
}

$ ./lambda.exe
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Małe kroczki…

Cieszą najbardziej 😉

sio2usb_fd

Cały widz polegał na tym, że aby uzyskać uprawnienia, trzeba to robić w  wątku UI Androida. Dzięki Bogdanowi Vatrze i jego prezentacji „Crash course…” wiem jak to zrobić ładnie w BroadcastReceiverze przez runOnUiThread(). A żeby coś zwrócić do QT, trzeba to zakolejkować jako funkcję do wykonania w wątku UI QT, bo to dwa osobne wątki… Piękny design i superowa zabawa :). Mam nadzieję, że teraz już będzie z górki.

 

Yamaha DTX-400 i Krigg Triggera.

Postanowiłem wymienić KU-100 (silent kick pedal) Yamahy na mechaniczny pedał stopy z triggerem piezoelektrycznym. Wybór padł na Krigg Triggera + tani pedał stopy Basix PD-600 V3. Pedał bardzo fajny z napędem łańcuszkowym, a co najważniejsze – oddzielnym uchwytem bijaka. Po zdemontowaniu, jak widać na zdjęciach poniżej, zostaje tylko uchwyt łańcuszka. Wygląda na niezniszczalny.

Działa świetnie ;). Tylko trochę ciężko się samemu nagrać.

Do pełni szczęścia trzeba ustawić w DTX-400 charakterystykę prędkości na 3 (Song + Kit potem 5 i 1, kick i wpisać wartość 3) żeby było głośno i wyraźnie nawet przy lekkim graniu. Odstęp między mocowaniem łańcuszka a przetwornikiem ustawiłem na 4-5mm, a punkt styku mocowania łańcuszka z gumą przetwornika podkleiłem taśmą izolacyjną (zostają ślady po uderzaniu metalu o gumę).

Fsthost-svn + Hybrit + Lecab2 na Tahr Puppy (RT) :)

Fsthost-svn da się skompilować bez GTK i lash:

make GTK=0 LASH_PRESENT=0 PLAT=32

a mimo to, dodanie opcji -l -s plik.fps i potem kill -SIGUSR1 <pid> zapisuje stan wtyczki 🙂 (wielkie dzięki dla autora za wskazówki i cierpliwość).

chrt -f -p 89 `pidof jackd`
export WINE_RT=10; export WINE_SRV_RT=5
set_rlimits /usr/bin/fsthost -s ~/fsthost/brit.fps ~/poulin/HyBrit.dll&
set_rlimits /usr/bin/fsthost -s ~/fsthost/lecab.fps ~/poulin/Poulin_LeCab2_Rev1.dll&

i na wszelki wypadek:

pids=`pidof fsthost.so`
for pid in $pids; do chrt -f -p $pid; done

DSP load na poziomie <20% i brak xruns :). Co ciekawe, jak obciążę procesor np. klikoma pustymi pętlami while 1: pass, DSP run spada do 10-11%. Nadal uważam, że to zdecydowanie za dużo. Vsthost z dużym pluginem, typu GR5 generuje DSP load do 3% przy znacznie większej liczbie uruchomionych efektów… Ale raczej pozostanie to jako zagadka. Faktem jest, że te pluginy pod Linuksem działają lepiej jak pod Windows.

set_rlimits, bo w Puppim nie ma pam i /etc/security/limits.conf, a wine z łatką rt ma problem z priorytetami bez tego (trzeba przeedytować /etc/set_rlimits.conf).

Wysoki DSP load dla wtyczek VST Win32.

Staram się ograrnąć temat VST pod Linuksem i pomimo że nie jest najgorzej, zauważyłem dziwne zjawisko: wysoki DSP load i xruns w Ardour przez vst-bridge lub w Carli, przez jej własny bridge dla wtyczek VST. Dwa dni kombinacji i udało mi się zejść do nieco poniżej 50% (przez winetricks zainstalowałem gdiplus i vcrun205{08,10}, choć nie wiem czy to pomogło, dodałem też  i915.do_wbinvd=no do parametrów kernela, bo podobno sterowniki grafiki dają w kość, ale to dalej nie to! choć jeszcze wczoraj load skakał do 70-90%).

Najdziwniejsze jest to, że na starym vsthost z projektu dssi-vst DSP load jest na poziomie max 2-3% dla tych samych wtyczek. 

Ciekawe czy autor Carli, KXStudio i aktualny deweloper dssi-vst, Filipe Coelho aka falkTX, coś odpowie.

vst_host_low_dsp_loadardour_vst_bridgecarla_vst_bridgeCiekawe, że vst-bridge również cierpi na to samo „schorzenie”, choć działa nieco inaczej.

Update: zmieniłem IR loader na keFIR i da się żyć. DSP load na poziomie <40% xruns sporadycznie. Brzmienia darmowych symulacji wzmaków z dobrymi odpowiedziami impulsowymi cabinetów są lepsze od wszystkiego co słyszałem do tej pory w GR5.

Tahrpup RT spotyka Poulin Legion, Lecto i LeCab2.

Cóż mogę powiedzieć… Chyba spałem pod kamieniem zbyt długo. Mam dziś wolne od pracy (ach te wiosenne ciepłe dni, łatwo się przeziębić) antybiotyk chyba działa, bo eksperymentuje dziś z wtyczkami VST do gitary i bardzo, ale to bardzo jestem zaskoczony jakością symulacji wzmaków http://lepouplugins.blogspot.com a szczególnie Legion – urywa dupę w połączeniu z Lecab2.
poulinWszystko co potrzeba do szczęścia pod Linuksem to vsthost i któraś z ogólnie dostępnych bibliotek impulsów gitarowych. Np Gods Cab,
lecto

Tahrpup 6 z kernelem RT.

Jestem zachwycony Puppim. Żadna inna dystrybucja nie wykorzystuje w ten sposób aufs (union type filesystem). Z pendrive działa to rewelacyjnie bo wszystko z systemu bazowego ładuje się do pamięci, a kolejne warstwy dogrywane są do obrazu aufs w pamięci z plików sfs. Dzięki temu pendrive się nie zużywa, a system jest bardzo szybki w odróżnieniu od typowej konfiguracji, w której zapisy i odczyty na pendrive powodują, że całość staje się niemal nieużywalna.Do pełni szczęścia potrzebowałem jedynie kernela RT ;). Pierwsze podejście – ze względu na dostępne wersje patchy RT – oryginalne źródła kernel_sources-3.14.11-tahr_PAE.sfs (już z łatkami z Puppiego) spaczowałem 3.14.12-rt8.patch. Et voila! A mój „Pro-audio” setup wygląda tak:

#!/bin/bash
cpufreq-set -g performance
echo 2048 > /sys/class/rtc/rtc0/max_user_freq
echo 2048 > /proc/sys/dev/hpet/max-user-freq
sysctl vm.swappiness=10
sysctl fs.inotify.max_user_watches=524288
#powyższe dwie linie raczej nie są potrzebne w puppim
setpci -v -d *:* latency_timer=b0
setpci -v -s 00:1b.0 latency_timer=ff #intel audio
jackd -R -P89 -dalsa -r44000 -p128 -n2 -D -Chw:0 -Phw:0 -Xseq&
qjackctl&
/etc/init.d/rtirq start
export WINE_RT=10; export WINE_SRV_RT=5
vsthost /some/where/VST.dll

Qjackctl używam ze względu na patchbay, który automatycznie łączy wcześniej zdefiniowane wejścia i wyjścia. Można więc e-drumsy podłączać i odłączać, albo np. zrobić suspend to ram i iść na siku 😉 gr