Noticias:

Auriculares.org: el foro sobre auriculares en español

Menú Principal

Bitperfect USB audio en Linux

Iniciado por asainz, Octubre 19, 2010, 01:03:42

Tema anterior - Siguiente tema

asainz

Hola a todos, estábamos hablando en otro foro del tema del audio usb bitperfect en Linux. El mismo tipo de modificaciones que en Windows requieren la instalación de un driver ASIO (como ASIO4ALL), pero en Linux, para conseguir el bitstream más perfecto posible. Y, ya de paso, pues recomendaciones de programas de reproducción, etc. (o sea, ¿cual es el foobar2000 en Linux?)

Yo estaba hablando con sm0ketst de este tema, sm0ketst es el experto y yo soy el "pequeño saltamontes" que está aprendiendo :D

Parece ser que el foobar2000 de Linux es el programa Deadbeef (http://deadbeef.sourceforge.net/) Tiene instrucciones de instalación para todas las distros.

He instalado Deadbeef para mi Ubuntu 10.04 "tal y como viene de fábrica". Lo primero que he visto es que Deadbeef no funciona con unidades de red montadas "al vuelo" (de estas que ves como smb://.../...) En cambio sí funciona con discos externos usb, que monta el automount y tampoco tienen entrada en el fstab. Es un problema en cualquier caso menor.

Parece (por lo que he entendido) que para conseguir el audio por usb más bitperfect te tienes que saltar el demonio de Pulseaudio e ir directamente a ALSA.

Deadbeef te deja escoger el driver de audio que quieres usar.

Y aquí (después de toda la introducción) :) el primer problema: si escojo ALSA no suena nada. Para que suene tengo que escoger Pulseaudio. ¿Sabéis por qué?

Un cordial saludo a todos,

sm0ketst

Cita de: asainz en Octubre 19, 2010, 01:03:42
Yo estaba hablando con sm0ketst de este tema, sm0ketst es el experto y yo soy el "pequeño saltamontes" que está aprendiendo :D

Si tan experto fuera... no me la clavarían doblada comprando cacharritos en los que tengo mas fe que sentido comun... ya somos dos los que estamos aprendiendo! ;)

No tengo mucho tiempo ahora porque me voy a tragar el trafico de la N-II, pero AFAIK lo mas importante es tener un kernel corriendo en tiempo real en la maquina que saca los datos fuera al DAC, yo prefiero la debian con los parches de pengrutronix, a partir de ahí ALSA ya imagino que funciona con mas garantias. Si además, tu maquina solo hace eso, mejor, y si usas MPD en ella con tu reproductor MPC en ubuntu (el cliente que quieras) desde otra maquina, todavía mejor.

Bravo por este hilo! A ver si entre todos se van aportando ideas y conclusiones,

Gracias A.Sainz

Rafagas

JJ


sm0ketst

Cita de: sm0ketst en Octubre 19, 2010, 07:41:16
Cita de: asainz en Octubre 19, 2010, 01:03:42
Yo estaba hablando con sm0ketst de este tema, sm0ketst es el experto y yo soy el "pequeño saltamontes" que está aprendiendo :D
...yo prefiero la debian con los parches de pengrutronix...

Los pasos para correr en la debian un kernel con el parche (ya creo que el 31 para la lenny esta disponible):

http://www.pengutronix.de/software/linux-rt/debian_en.html

Ojo con "The following architectures ($ARCH) are available: 486, 686, 686-bigmen, amd64", si no recuerdo mal de cuando lo prepare es tan simple como eso.

Una vez instalado, algunos tweaks basicos:

http://www.alsa-project.org/main/index.php/Low_latency_howto

Finalmente (para simplificar), configurarar el reproductor para usar ALSA con el dispositivo que nos interese (o mejor dejar el 'default' para que el sistema utilize el .asoundrc de vuestro usuario (el que corre el reproductor, en el $HOME), si el DAC es USB y tiene un canal de 24 bits a cualquier frecuencia, en mi caso el transporte es el BelCanto:

[sm0ketst@kryptonbox Mclntosh.DVD-Audio.Spectacular.Reference.Disc(24Bit.96KHz) WAV]$ aplay -l
**** List of PLAYBACK Hardware Devices ****
[...snip...]
card 2: USB [Bel Canto 2496 USB], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0

Aunque daría igual para otro dispositivo siempre que se especifique su entrada apropiada:

[sm0ketst@kryptonbox ~]$ cat ~/.asoundrc
pcm.!default {
type hw
card 2
}

ctl.!default {
type hw
card 2
}

pcm.!default {
type plug
slave {
pcm "hw:2,0"
format S24_3LE
}
}

El hw:xx no realiza conversión (si queremos asegurarnos de que "algo" se escucha usar plughw:xx, aunque no hay garantía de correr en 24/x... pero al menos se debería oir algo...), o lo que es lo mismo, si va... es porque el endpoint, el DAC acepta 24/x.

[sm0ketst@kryptonbox Marantz Hi-End Audiophile Test Demo SACD (16Bit.44.1KHz) WAV]$ aplay \(01\)\ Let\'s\ go\ get\ stoned.wav
Playing WAVE '(01) Let's go get stoned.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Aborted by signal Interrupción...

[sm0ketst@kryptonbox Mclntosh.DVD-Audio.Spectacular.Reference.Disc(24Bit.96KHz) WAV]$ aplay 01.wav
Playing WAVE '01.wav' : Signed 24 bit Little Endian in 3bytes, Rate 96000 Hz, Stereo
Aborted by signal Interrupción...

Hasta ahí, un mínimo para empezar, quick and dirty, creo...

Mas ideas?

Rafagas,

JJ







asainz

#3
Hola JJ,

Ahora que me he leido un poco la documentación que pusiste en el otro hilo y lo que escribes en este, me doy cuenta de que lo que tu has montado y lo que yo estoy buscando es un poco diferente.

Me explico: tu te has configurado un pc con Linux, pc al que das (entiendo) un uso dedicado enteramente a servir de almacenamiento de musica y reproducción. Pero reproducción unicamente como "transporte". Transporte en el sentido de un reproductor de CD en el que el transporte y el dac están separados. El pc hace de transporte sacando el audio digital por una conexión usb hacia el dac externo. Entiendo que poner los parches de real time kernel y, el puerto usb, el tema de alsa es para asegurar una salida digital lo más bitperfect posible.

Esta configuración, digamos audiófila/hifi, está cojonuda. Y tengo que pensar más en ella por si me resulta más adecuada en un futuro. Pero yo ahora, para resolver el mismo "problema" pero con otra "solución", lo que utilizo es un Logitech Squeezebox. Tengo un pc con Linux dedicado a correr el servidor de música de Squeezebox (el squeeze server) y el Squeezebox (en mi caso, un modelo clásico) lo tengo conectado por la salida digital óptica a un dac externo (este dac solo tiene entrada óptica y usb) y de ahí al resto del equipo. El Squeezebox parece ser que funciona bastante decentemente como transporte. Desconozco si está al mismo nivel o no que lo que tú te has montado.

Así que lo que estoy buscando es una configuración para cuando uso mi portátil para escuchar música. Tengo un dac externo portátil (un iBasso D10) conectado por el puerto usb. En el portatil tengo arranque dual Windows/Linux. En Windows uso foobar2000 y ASIO4ALL. En Linux, una Ubuntu 10.04, siempre he querido configurar "lo que haya que configurar" para conseguir una salida lo más bitperfect posible. Hasta ahora estoy usando Banshee y el demonio Pulseaudio. Vamos, la configuración por defecto de Ubuntu.

En Windows, tengo el plugin de resampling del foobar a 48khz (el dac acepta 48khz) y entre el plugin y el ASIO juraría que soy capaz de percibir que la música suena mejor en Windows que cuando me paso a Ubuntu. Y eso me jode  >( Quiero que en Ubuntu la música me suene igual de bien que en Windows, o mejor!  ;) Lo que pasa es que tampoco puedo meterme en berenjenales de cambiar mucho la configuración del Ubuntu y, yo que sé, que luego no me actualice bien los paquetes, o quedarme sin sonido y luego no sea capaz de arreglarlo (uso el portatil todos los días).

Busco, como ves, alguna receta "no destructiva" (no tiene por qué ser sencilla) compatible con la configuración estándar de Ubuntu, para configurar la reproducción de sonido de la mejor forma posible, pero sin llegar a temas que impliquen un uso dedicado.

Lo primero que he hecho es instalar Deadbeef, pero si selecciono el driver ALSA no suena nada  ??? Volviendo a poner Pulseaudio en el Deadbeef vuelve a sonar. PEro, la verdad, no notaba la más mínima diferencia con Banshee. En ambos casos sacaban el audio digital hacia el dac D10.

Entiendo que sí notaría diferencia si en Deadbeef utilizase directamente el driver ALSA y además activase algún plugin que hiciese resampling a 48khz. Sería la configuración "equivalente" a la de foobar2000/ASIO4ALL en Windows.

Perdonad el rollo! Un cordial saludo,

Eduar

Para instalar el kernek Real-Time en linux basta con poner en la terminal sudo apt-get install linux-rt . Tambien uso el Deadbeef, hay que darle prioridades al programa para usar mas el procesador respecto de otros programas.

Para configurar todo me base en esta guia http://sites.google.com/site/computeraudioorg/linux-for-audio/setting-up-alsa

Saludos

sm0ketst

Cita de: asainz en Octubre 20, 2010, 00:21:18
Hasta ahora estoy usando Banshee y el demonio Pulseaudio. Vamos, la configuración por defecto de Ubuntu.

Puedes mantener pulse, solo te hace falta configurar ALSA al final (que es el 'punto' mas bajo que accede a la tarjeta), mira http://es.wikipedia.org/wiki/Archivo:Pulseaudio-diagram.svg para tener una idea de donde está cada cosa. Realmente pulse/jack no son 'necesarios' sino facilidades en vistas al futuro/presente...

Cita de: asainz en Octubre 20, 2010, 00:21:18
Quiero que en Ubuntu la música me suene igual de bien que en Windows, o mejor!  ;) Lo que pasa es que tampoco puedo meterme en berenjenales de cambiar mucho la configuración del Ubuntu y, yo que sé, que luego no me actualice bien los paquetes, o quedarme sin sonido y luego no sea capaz de arreglarlo (uso el portatil todos los días).

Lo de mejor es un concepto delicado. Si usas linux, lo usas, y significa leer y olvidar el perfil sodomizante de "si a todo" de windows, por otra parte, el placer de "saber" o conocer un poco mejor lo que hace tu ordenador .... lo digo al respecto de "no se te actualizen bien los paquetes...". La clave de que ALSA funcione en un "tiempo" es que nadie lo interrumpa, para eso, debe correr en un kernel de tiempo real (Eduar ya te lo comentó), esto implica instalar un nuevo kernel con el parche de TR de Ingo Molenar y Cia para hacerlo preemptivo (que tendras junto a los otros de ubuntu en tu Grub -> aprender un poco como se instala un kernel, como se modifica la lista de kernels en el arrance en el fichero 'menu.lst', etc, es sencillo, pero hay que hacerlo.)  y configurar las prioridades y los limits para que ciertas "apariciones" en el sistema, no sean 'molestas'. Eduard te ha apuntado de nuevo la pagina de Dynobot's-Audio al respecto de ALSA. Pero todo esto no es util si no instalas el kernel RT.

Merece la pena?

Cita de: asainz en Octubre 20, 2010, 00:21:18
Busco, como ves, alguna receta "no destructiva" (no tiene por qué ser sencilla) compatible con la configuración estándar de Ubuntu, para configurar la reproducción de sonido de la mejor forma posible, pero sin llegar a temas que impliquen un uso dedicado.
Si no vas a hacer uso dedicado, yo no me metería en berenjenales de latencia/jitter con ALSA/kernel de TR, usaria banshee/deadbeef y pulse/Alsa como lo haces hasta la fecha.

Cita de: asainz en Octubre 20, 2010, 00:21:18
Lo primero que he hecho es instalar Deadbeef, pero si selecciono el driver ALSA no suena nada  ??? Volviendo a poner Pulseaudio en el Deadbeef vuelve a sonar. PEro, la verdad, no notaba la más mínima diferencia con Banshee. En ambos casos sacaban el audio digital hacia el dac D10.
En ambos casos, todo converge en ALSA, con lo que va a sonar igual por parte de "driver" esto es ALSA, cambiara la implementación del reproductor, pero en principio, y hasta donde se, los paquetes que van a salir son los mismos. Si seleccionas ALSA en lugar de pulse, puede que tu configuración local para ALSA no se actualize, por eso te comenté lo del fichero .asoundrc, tendras que investigar, tienes pistas. Si te funciona con pulse y su interacción con ALSA, a menos que seas inquieto, sigue usandolo...

Cita de: asainz en Octubre 20, 2010, 00:21:18
Entiendo que sí notaría diferencia si en Deadbeef utilizase directamente el driver ALSA y además activase algún plugin que hiciese resampling a 48khz. Sería la configuración "equivalente" a la de foobar2000/ASIO4ALL en Windows.
Un momento, el reproductor es una cosa, ALSA es otra, y el resampling es otra. No soy un experto en resampling, y habrá gente aquí que pilote mas que yo, sería bueno que yo me quede aquí porque no estoy seguro, pero hasta donde se, bit-perfect es mantener la frecuencia de muestreo al respecto del original, esto es, 44.1, 88.2, 96, etc... si el DAC la acepta (por USB, toslink o lo que sea). Yo en mi configuración lo unico que hago es subir la profundidad de palabra a 24 bits, si es 16 entiendo que los ceros a la izquierda no afectan, si es 24 la fuente, los uso porque el Belcanto me los transporta hasta el DAC por un 'tubo' de 24 bits. Pero siempre, le tiro al DAC la frecuencia de la fuente como ves en los ejemplos (aunque no puedo/Belcanto reproducir a 88.2, solo 44.1, 96). Otra cosa es que luego en el DAC, haga upsampling... Como diría aquel... eso es la 5a derivada...

Si en ALSA usas en el ~/.asoundrc 'hw:x,y' en lugar de 'plughw:x,y' estás tirando la misma frecuencia de muestreo al DAC por el canal que corresponda que la fuente que reproduces (tu flac o ape o wav o wv o lo que sea...). Pero si usas el 'plughw:x,y', ya tienes ahí tu 'plugin' por decirlo de alguna manera.

Yo no uso 'plughw', porque quiero saber lo que escucho.

Si son las 2a.m!

En fin, animo!

De verdad que no me creo que nadie complete este hilo...

Rafagas...

JJ


sm0ketst

Re-sampling y control de volumen (16/24).

http://che.wikidot.com/linux:resampling

Por ahora, yo no lo uso (mi DAC está limitado a 24/96), mis fuentes son 16/44.1 y 24/96, lo que haya mas alto o diferente tendría que hacer un resample. Lo envío todo por 24/x al DAC por ALSA.

Buenas noches,

JJ


Eduar

Cita de: sm0ketst en Octubre 20, 2010, 02:30:03
Re-sampling y control de volumen (16/24).

http://che.wikidot.com/linux:resampling

Por ahora, yo no lo uso (mi DAC está limitado a 24/96), mis fuentes son 16/44.1 y 24/96, lo que haya mas alto o diferente tendría que hacer un resample. Lo envío todo por 24/x al DAC por ALSA.

Buenas noches,

JJ




Tambien haces resampling a los archivos a 16/44.1? Si es asi no perdes calidad?

Saludos

sm0ketst

Cita de: Eduar en Octubre 20, 2010, 02:47:56
Tambien haces resampling a los archivos a 16/44.1? Si es asi no perdes calidad?

No estoy haciendo resampling.

No se si siempre que haces un re-sampling pierdes calidad, pero en mi caso es lo que evito (al menos es lo que creo con la configuración que uso hasta que le llegan los datos al DAC).

AFAIK se van todos nativos al transporte, lo único que hago es cambiar el ancho de palabra a 24 (entiendo que es el volumen, y por otra parte tengo porque el BC tiene el interfaz a 24, no acepta 16). Como máximo el BC aguanta hasta 96Khz, con lo que se que todo lo que le envíe tendrá que estar por debajo. Lo que esté a 44.1, a 48 o a 96 se irá tal cual pero con 8 bits mas.

Buenos días,

JJ


asainz

Hola, lo primero daros las gracias por vuestras extensas respuestas.

Solo para que luego podáis evaluar mis posteriores comentarios: llevo usando Linux desde hace 20 años, llegué a instalar versiones 0.99 del kernel cuando la slackware iba con diskettes de 3,5 (las series a, las b, las e del emacs). Configuraba las X a mano y todos esos infiernos que había que hacer hace años. Tengo perfectamente claros los motivos por los que uso GNU/Linux y software libre en general.

Aunque cada vez soy menos "techie" (por falta de tiempo y por falta de ganas) algún conocimiento sigo conservando  ;) del kernel, de los mecanismos de actualización de paquetes, del grub, etc. Se que pulse y jack son demonios por encima del driver ALSA. Por eso os decía que no me da miedo que las recetas sean algo complicadas (parches, linea de comandos, editar ficheros, etc.), siempre y cuando esas recetas puedan convivir posteriormente sin demasiado problema con las posteriores actualizaciones. O recetas que, cuando actualice de versión de Ubuntu (a la 10.10 que acaba de salir, por ejemplo) no tarde una semana en volver a aplicar.

EMHO, de cuando toqueteaba y modificaba más que ahora, cuanto más modificas y más te alejas por tanto de la configuración "por defecto" más posibilidades hay después de incompatibilidades de programas, o comportamientos "raros". O de estarte horas y horas buscando por internet el motivo de que haya dejado de funcionar algo. Siempre encuentras la solución, pero me resulta cansado pasar tanto tiempo buscando.

Vamos, que me he vuelto un puñetero vago!!!!  :D :D :D :D

Ahora os leo con detenimiento y si me surge alguna duda os pregunto.

Lo dicho, muchas gracias!

asainz

Bueno, me va a llevar algo de tiempo digerir todo esto. Es configuración de la que hace tiempo que yo ya no hago. Tengo que analizar si, como dice sm0ketst, todo esto solo tiene sentido en un pc dedicado a la reproducción de sonido. Instalar el linux-rt es trivial, pero la configuración de ALSA me la tengo que mirar... Por lo pronto (mirando el tema del resampling) he intentado ver la configuración hw de la tarjeta de sonido haciendo:
cat /proc/asound/card1/pcm0p/sub0/hw_params
y me contesta un simple:
closed
Y no algo parecido a:
access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 6000
buffer_size: 24000
Que es lo que le dice al del articulo. La card1 es la tarjeta usb. Ya empezamos... ??? :)

Estoy completamente de acuerdo en que el resampling no tiene nada que ver con el "bitperfect". El bitperfect yo lo definiría como es sacar el bitstream lo más perfecto y fiel al original posible, jitter lo mejor posible, etc. En mi escaso conocimiento, es conseguir que el pc sea el mejor transporte posible. El resampling pues eso, aumentar/cambiar la frecuecia de muestreo. Mi DAC acepta entradas de hasta 48/16, pero (juraría que) no hace resampling internamente. Digamos que yo escucho diferencias cuando activo el resampling del software a 48000, y me gusta más que si no lo activo y dejo los 44,1Khz. (Digamos que yo escucho esas diferencias o me engaño a mi mismo cuando creo que las escucho) :-)

Como os digo, voy a seguir intentándolo y bucearé un poco por ahí, a ver qué encuentro. Os pregunto cuando me atasque. Muchas gracias!

asainz

Novedades interesantes: han creado una distro de Linux, llamada Voyage MPD. Por lo que he leido, Voyage es una distro basada en Debian y diseñada para correr en equipos "embedded" y demás cosas de perfil bajo. Está pensada para montar firewalls, servidores de disco en red y cosas así.

Han creado una versión específica para correr MPD y destinada a audiófilos (quienes son esos?  :D). Parece que con todas las optimizaciones que me habéis ido contando (kernel, ALSA, etc.).

Mejor que leais la información directamente de las fuentes originales:
- http://www.computeraudiophile.com/content/New-Linux-OS-aimed-computer-audiophiles-Voyage-MPD
- http://linux.voyage.hk/voyage-mpd

Un cordial saludo a todos,

sm0ketst

Cita de: asainz en Noviembre 05, 2010, 18:22:00
Novedades interesantes: han creado una distro de Linux, llamada Voyage MPD. Por lo que he leido, Voyage es una distro basada en Debian y diseñada para correr en equipos "embedded" y demás cosas de perfil bajo. Está pensada para montar firewalls, servidores de disco en red y cosas así.

Han creado una versión específica para correr MPD y destinada a audiófilos (quienes son esos?  :D). Parece que con todas las optimizaciones que me habéis ido contando (kernel, ALSA, etc.).

Mejor que leais la información directamente de las fuentes originales:
- http://www.computeraudiophile.com/content/New-Linux-OS-aimed-computer-audiophiles-Voyage-MPD
- http://linux.voyage.hk/voyage-mpd

Un cordial saludo a todos,

Muy Interesante!!!

Doy fe del bajo consumo y de lo bien que van equipos como Alix/Soekris en gateways usando m0n0wall/BSD. Las tres B's. No todo el mundo usa Cisco...

Rafagas...

JJ