Jack multi-canal com poucos recursos

Eis uma forma simples e barata de ter N saídas (ou entradas) num servidor jack.

A ideia é usar algumas placas de som USB baratas e configurar o ALSA para juntá-las num interface único. Para isso usamos um ficheiro de configuração do ALSA parecido com este:

$ cat ~/.asoundrc
pcm.geral {
  type multi
  slaves.a.pcm hw:0
  slaves.a.channels 6
  slaves.b.pcm hw:1
  slaves.b.channels 2
  slaves.c.pcm hw:2
  slaves.c.channels 2
# 6 canais da placa 1
  bindings.0.slave a
  bindings.0.channel 0
  bindings.1.slave a
  bindings.1.channel 1
  bindings.2.slave a
  bindings.2.channel 2
  bindings.3.slave a
  bindings.3.channel 3
  bindings.4.slave a
  bindings.4.channel 4
  bindings.5.slave a
  bindings.5.channel 5

# 2 canais da placa 2
  bindings.6.slave b
  bindings.6.channel 0
  bindings.7.slave b
  bindings.7.channel 1

# 2 canais da placa 3
  bindings.8.slave c
  bindings.8.channel 0
  bindings.9.slave c
  bindings.9.channel 1
}

ctl.geral {
  type hw
  card 0
}

Cheguei a esta configuração com base neste tutorial.

Estou a usar esta configuração num portátil, usando a placa interna (que tem 6 canais) e mais duas placas de som USB simples só com 1 entrada e 1 saída, e apenas aproveito as saídas. A mesma ideia podia servir para ter N entradas para gravação de várias fontes (para uma banda, por exemplo).
Não tomei atenção à latência do sistema, mas isto não pretende ser algo que compita com placas dedicadas de som de N entradas e saídas, mas que custam várias centenas ou alguns milhares de euros. Potencia porém quem se queira aventurar no assunto e começar a aprender, mas tenha poucos recursos para investir em equipamento e já tenha um computador relativamente recente.
Com os circuitos simples que estas placas têm é possível também sincronizá-las, soldando ligações do cristal de uma das placas para as outras. Um tutorial a abordar esta modificação pode ser encontrado aqui. Isto será mais importante na gravação de áudio para garantir que a sample rate é igual para todas as origens de áudio.

Depois a partir daqui com o jackd a correr poderão ser necessários alguns ajustes para tudo funcionar bem. Não experimentei com o kernel rt, mas uso permissões de rt para o áudio no limit.conf:

@audio - rtprio 99
@audio - nice -10
@audio - memlock 512000

Para arrancar o jackd uso o seguinte .jackdrc:

/usr/bin/jackd -R -m -dalsa -P -dgeral -r48000 -p1024 -n2 -m

De notar que uso a opção -P para só usar o playback, já que não configurei a captura das placas no ficheiro de configuração do ALSA.

Isto permite usar o mixxx com várias placas de som, basta usar uma versão com suporte para o jack e configurar o master para os canais 6-7 e o monitor para os canais 8-9, para neste exemplo usar as 2 placas externas. Podendo fazer a mistura directamente no mixxx ou usando uma mesa de mistura externa.

Terei que experimentar melhor para saber se este sistema é minimamente estável, mas para quem quer começar a aprender técnicas de DJ ou a criar alguma coisa com os sequenciadores e sintetizadores que suportem o jackd tendo a possibilidade de monitorizar algumas dessas aplicações, este sistema pode ser um ponto de partida.

Actualmente as aplicações que estou a usar com este sistema são o seq24 (sequenciador) a activar o hydrogen (drumbox com samples), o zynaddsubfx (sintetizador multi-canal, polifónico e com efeitos) e o nekobee (emulador da 303), o som destas 3 aplicações entra no jackeq (mesa de mistura virtual com equalizador e 4 canais), o monitor deste liga a uma placa externa e o master entra no jamin (equalizador e compressor). Do jamin sai para a placa principal que liga ao sistema de som, ou uso o timemachine para gravações. Tudo isto é ligado com a ajuda do patchage. Cheguei a usar o qjackctl mas o patchage suporta o lash e tem um interface mais simples.
Estas aplicações têm quase todas suporte para o gestor de sessão lash, o que simplifica a preparação do sistema quando queremos voltar a um estado usável, ou à última configuração. Além disso permite configurar várias sessões com diferentes aplicações. As aplicações sem suporte para o lash (jackeq, jack-dssi-host para correr o nekobee e o jamin) podem ser arrancadas com o lash_wrap para ficarem associadas à sessão. Algumas configurações podem não ficar guardadas, mas na globalidade funciona suficientemente bem.

Com várias aplicações e tantos controlos, sinto que o rato se torna um bocado ineficiente… mas com a ajuda de vários desktops virtuais e como a máquina é suficientemente rápida, o compiz também dá alguma ajuda com os plugins cube, expo e scale, por exemplo. Tenho que experimentar isto com o whiteboard para o wiimote quando tiver acesso a um projector… 😎 Não sei se seria funcional, mas não deixa de ser uma ideia engraçada. Os controladores nano da Korg também parecem ser uma alternativa de baixo custo para tornar o sistema mais fácil de gerir.

Controlo da Wii: um mundo de aplicações

Já ando para experimentar a Wii há muito tempo. Não planeio comprar uma, mas gostava de experimentá-la.

Entretanto tenho vindo a deparar-me com a quantidade de projectos que têm nascido a partir das funcionalidades do comando da Wii, e embora não vá dedicar muito tempo a este tema agora (espero fazê-lo noutro dia e falar das minhas experiências), vou referir algumas coisas sobre as aplicações do comando num computador normal.

Não são novidade, mas serão um excelente recurso para perceber melhor algumas ideias de utilização do comando os vídeos do Johnny Lee do Wiimote Project. Embora ele tenha desenvolvido o software para Windows, já existe um port do whiteboard para Linux.

Para o head tracking existe algum esforço para adicionar suporte ao Compiz (vídeo de demo), e descobri hoje um projecto alemão que disponibiliza um kit de plásticos para não ter que se que usar LED na cabeça, recorrendo para esse fim a pontos reflectores: OpenKMQ. Este kit traz também umas lentes para visão estereoscópica, potenciando apenas com o uso do Wiimote e meia dúzia de LED infravermelhos uma utilização mais avançada do interface gráfico.

Para aceder ao Wiimote como comando normal no Linux (sem ser como no whiteboard) basta ter suporte bluetooth, carregar o módulo uinput e correr uma das aplicações de interface com o comando, como o cwiid. Para fazer um ficheiro de configuração adequado ao que pretendemos (podemos até emular o joystick através das acções BTN_ e dos eixos absolutos ou relativos), é importante ler os ficheiros action_enum.txt que tem os comandos que podem ser executados e wminput.list para saber os botões disponíveis nos comandos. Depois basta criar um ficheiro de configuração e correr:

wminput -c <nome_do_ficheiro>

Não é preciso compilar nada, basta instalar o cwiid, adicionar o módulo uinput a /etc/modules e arrancar o programa quando queremos usar o Wiimote (dicas para Ubuntu).

Tendo uma barra USB ou sem fios de LED infravermelhos (há várias no eBay), podemos usar o Wiimote como rato, e até conjugá-lo com o Nunchuck.

Isto deixa bastantes pontos de partida para abordar o tema, esperemos que o Wiimote baixe de preço entretanto dado o crescente número de pessoas a comprá-lo para estes fins. 🙂

Mais algumas ligações:

Acção jurídica contra a Nintendo por causa das pulseiras que partem

Eu diria quem estará por trás disto… A Nintendo já verificou que quando os jogadores têm mãos de manteiga e jogam que nem uns monstros, poderá ocorrer que a pulseira se parta, e está a substituí-las, para quê este caso? Isto cheira a FUD encomendado… 😛