# Mpd-jack-brutefir

## amr2

Hola

Estoy intentando montar una máquina dedicada para realizar filtrado FIR usando brutefir como motor, pero me estoy encontrando con algún problema que no se muy a bien a que puede ser debido.

El hardware es este:

http://www.asus.com/Motherboards/Intel_CPU_on_Board/AT5IONTI_DELUXE/

El SO es la instalación base de gentoo (he seguido el handbook) sin interfaz gráfica. Sobre éste he realizado una emerge de jack-audio-connection-kit, servidor mpd, librerías fftw3 y brutefir.

La tarjeta de audio esta configurada en ALSA, tanto la integrada de la placa (intel hd) como una USB externa Behringer UCA-202

La configuración MPD->JACK->ALSA funciona correctamente, por cualquiera de las dos tarjetas. El problema es cuando se usa brutefir, MPD->JACK->BRUTEFIR.

En esta situación, todo funciona correctamente hasta que mpd deja de enviar audio. Al rato, jack desconecta a brutefir como cliente, y muestra un error. Este error en función de los parámetros que uso en jack y/o brutefir varía, y es uno de estos tres:

1- $ pp: cannot clean up byte from graph wait fd (Resource temporarily unavailable)

2- $ bad status (-2) for client mpd_jack handling event (type = 5)

3- $ subgraph starting at brutefir timed out (subgraph_wait_fd=9, status = 0, state = Finished, pollret = 0 revents = 0x0)

Esto ocurre tanto con la tarjeta integrada como con la UCA. Una vez que ocurre esto, los puertos de brutefir ya no se muestran en jack (jack_lsp) y evidentemente si se vuelve a enviar audio desde el servidor mpd, se produce un error de que los puertos no están disponibles.

La verdad es que ya he probado casi todas las opciones que ofrece jack y brutefir, sin ningún resultado positivo. A ver si alguien puede orientarme de que puede estar pasando y por donde cogerlo.

Muchas gracias, un saludo.

----------

## quilosaq

No se si habrás visto http://en.gentoo-wiki.com/wiki/JACK. Dice algo sobre deshabilitar GROUP_SCHED en kernels nuevos.

----------

## amr2

Hola

Si lo he visto. Actualmente lo que tengo es, en el nucleo los valor por defecto:

  --- Group CPU scheduler

  │ │    [*]   Group scheduling for SCHED_OTHER

  │ │    [ ]   Group scheduling for SCHED_RR/FIFO

Y en el fichero /etc/security/limits.conf

#<domain>      <type>  <item>         <value>

@realtime        -       rtprio          99

@realtime        -       memlock         unlimited

El usuario desde el que lanzo los procesos, pertenece al grupo realtime.

Con esta configuración jack, brutefir y mpd se ejecutan con prioridad 20.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           

 2525 firtro    -7   0 32520  18m 9012 S    5  0.6   0:09.65 brutefir           

 2526 firtro    -7   0 32520  18m 9008 S    5  0.6   0:09.67 brutefir           

 2240 firtro    20   0 65228  62m  17m S    2  2.1   0:07.83 mpd                

 2507 firtro    20   0 22984  22m 5080 S    1  0.7   0:01.56 jackd        

 2521 firtro    -6   0 32968  31m  15m S    0  1.1   0:01.14 brutefir           

 2502 firtro    20   0  7560 1612 1048 S    0  0.1   0:00.00 sshd               

 2503 firtro    20   0  3232 1724 1424 S    0  0.1   0:00.00 bash               

 2516 firtro    20   0  7560 1616 1048 S    0  0.1   0:00.03 sshd               

 2517 firtro    20   0  3232 1732 1428 S    0  0.1   0:00.01 bash               

 2527 firtro    -4   0 30404 8252  212 S    0  0.3   0:00.00 brutefir

Jack no muestra error alguno, aunque en brutefir se puede leer:

BruteFIR v1.0k (March 2009)                                   (c) Anders Torger

Internal resolution is 32 bit floating point.

SSE capability detected -- optimisation enabled.

Creating 4 FFTW plans of size 16384...finished.

Loading 12 coefficient sets...finished.

JACK I/O: Warning: JACK is not running with SCHED_FIFO or SCHED_RR (realtime).

Ojo, lo curioso es que aunque se ejecuten los procesos como root, las prioridades son las mismas, y en brutefir sale la misma advertencia...

----------

## amr2

Haciendo alguna prueba más, con otra placa ATOM de distinta generación, y otra distribución, también se produce este error

Sin embargo, en un PC con procesador amd athlon, funciona todo perfecto. Por tanto parece algo relacionado con al arquitectura ATOM ¿?

----------

