{"id":2159,"date":"2018-12-31T12:03:00","date_gmt":"2018-12-31T12:03:00","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=2159"},"modified":"2021-01-01T22:39:28","modified_gmt":"2021-01-01T22:39:28","slug":"juegos-alsa-sobre-pulseaudio","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=2159","title":{"rendered":"Juegos ALSA sobre PulseAudio"},"content":{"rendered":"\n<p>Hace unas semanas descubr\u00ed la saga de juegos de <a href=\"https:\/\/en.wikipedia.org\/wiki\/Deponia_(video_game)\">Deponia<\/a>, y la verdad es que estoy enganchado. Adem\u00e1s, hay versiones nativas para Linux en <a href=\"https:\/\/www.gog.com\/\">GOG games<\/a>, y a un precio asequible, lo que es una maravilla.<\/p>\n\n\n\n<p>Las tres primeras aventuras funcionaron en mi sistema Debian sin el m\u00e1s m\u00ednimo problema, pero la cuarta, sin embargo, sufr\u00eda de un problema raro: al lanzarla se quedaba como colgada, con la pantalla en negro, y no aparec\u00eda el men\u00fa principal hasta que pulsaba ESC. Adem\u00e1s, lo hac\u00eda sin sonido, lo que era muy sospechoso.<\/p>\n\n\n\n<p>Al lanzarlo desde un terminal vi que sal\u00edan una serie de errores referentes a que no pod\u00eda abrir el dispositivo PCM de <a href=\"https:\/\/en.wikipedia.org\/wiki\/Advanced_Linux_Sound_Architecture\">ALSA<\/a> (el subsistema de sonido de Linux). Enseguida sospech\u00e9 que el problema pod\u00eda venir por tener <a href=\"https:\/\/en.wikipedia.org\/wiki\/PulseAudio\">PulseAudio<\/a> gestionando todo el tema del audio. En concreto, el cuelgue del principio parec\u00eda que era porque intentaba mostrar un v\u00eddeo de presentaci\u00f3n, pero se quedaba esperando a que la tarjeta de sonido estuviese lista (y por eso al pulsar ESC se desbloqueaba: porque cancelaba el v\u00eddeo y pasaba al siguiente paso).<\/p>\n\n\n\n<p>La soluci\u00f3n consisti\u00f3 en redireccionar el sonido PCM de los programas ALSA a trav\u00e9s de PulseAudio. Para ello s\u00f3lo tuve que crear un fichero llamado <em>.asoundrc<\/em> en mi directorio personal con este contenido:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pcm.!default {<br>    type pulse<br>}<\/pre>\n\n\n\n<p>Gracias a \u00e9l, ahora todos los programas que, por defecto, trabajan con ALSA, ahora enviar\u00e1n su salida a trav\u00e9s de PulseAudio. Esto es posible gracias al dise\u00f1o de ALSA: mientras que en la vieja arquitectura <a href=\"https:\/\/en.wikipedia.org\/wiki\/Open_Sound_System\">OSS<\/a> el programador abr\u00eda el dispositivo de sonido directamente y utilizaba llamadas IOCTL para configurarlo, y llamadas <em>read<\/em> y <em>write<\/em> para capturar y emitir sonido, en ALSA se anima a utilizar \u00fanicamente una serie de bibliotecas de m\u00e1s alto nivel. Lo interesante es que esto permite que el programa se desentienda por completo de a donde se env\u00eda el sonido, pues eso lo decide el propio usuario mediante la configuraci\u00f3n. As\u00ed, por defecto ir\u00eda directamente al hardware, pero el sistema de plugins de ALSA permite enviarlo a cualquier otro sitio al poder definir tarjetas de sonido virtuales. As\u00ed, tenemos dos m\u00f3dulos especialmente interesantes que son <em>pcm_pulse<\/em> y <em>pcm_jack<\/em>, que permiten integrar de manera transparente cualquier aplicaci\u00f3n ALSA con los demonios de sonido PulseAudio y <a href=\"https:\/\/en.wikipedia.org\/wiki\/JACK_Audio_Connection_Kit\">JACK<\/a>. El primero es justo el que utilizamos en el fichero de configuraci\u00f3n de arriba.<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace unas semanas descubr\u00ed la saga de juegos de Deponia, y la verdad es que estoy enganchado. Adem\u00e1s, hay versiones nativas para Linux en GOG games, y a un precio asequible, lo que es una maravilla. Las tres primeras aventuras funcionaron en mi sistema Debian sin el m\u00e1s m\u00ednimo problema, pero la cuarta, sin embargo, &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=2159\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Juegos ALSA sobre PulseAudio<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-2159","post","type-post","status-publish","format-standard","hentry","category-trucos"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2159"}],"version-history":[{"count":4,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2159\/revisions"}],"predecessor-version":[{"id":2163,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2159\/revisions\/2163"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}