Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 465326 - media-sound/timidity++-2.14.0-r2 - timidity daemon blocks audio playback via pulseaudio
Summary: media-sound/timidity++-2.14.0-r2 - timidity daemon blocks audio playback via ...
Status: UNCONFIRMED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal with 1 vote (vote)
Assignee: Gentoo Sound Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-04-10 03:37 UTC by Lucian Poston
Modified: 2021-12-28 13:57 UTC (History)
3 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Lucian Poston 2013-04-10 03:37:19 UTC
When pulseaudio is setup with a virtual alsa device, the timidity daemon, as configured in /etc/init.d/timidity, attempts to acquire exclusive access to the /dev/snd device, which can cause applications using pulseaudio to hang until timidity or pulseaudio is killed. I've experienced this with flash running in firefox, which caused firefox to become unresponsive.

Symptoms are generally that only either pulseaudio or timidity work. Both will not work simultaneously as configured by default. This suggests that the timidity daemon is trying to grab exclusive access to the audio device instead of using the virtual alsa device, pulse, provided by pulseaudio.

Pulseaudio on gentoo is setup to use udev and consolekit to grant audio access dynamically to the currently active user. See http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/PerfectSetup. (Note: if the system-wide USE flag is defined, the behavior is probably different). /etc/init.d/timidity is configured to run the daemon under the timidity user, which is not the currently active user, and in the audio group, in which there should be no user.

Here is the start routine from the default /etc/init.d/timidity:

start() {
   ebegin "Starting TiMidity++ Virtual Midi Sequencer"
   test -n "$TIMIDITY_PCM_NAME" && export TIMIDITY_PCM_NAME

   start-stop-daemon --start --background --chdir /usr/share/timidity \
   --user timidity --group audio --make-pidfile --pidfile /var/run/timidity.pid \
   --exec /usr/bin/timidity -- -iA ${TIMIDITY_OPTS}

   eend $?
}


As a workaround, I was able to get the timidity daemon to work properly by running the daemon under my active user's credentials. I removed "--group audio" and replace "--user timidity" with "--user worch" e.g. 

start() {
   ebegin "Starting TiMidity++ Virtual Midi Sequencer"
   test -n "$TIMIDITY_PCM_NAME" && export TIMIDITY_PCM_NAME

   start-stop-daemon --start --background --chdir /usr/share/timidity \
   --user worch --make-pidfile --pidfile /var/run/timidity.pid \
   --exec /usr/bin/timidity -- -iA ${TIMIDITY_OPTS}

   eend $?
}


There is forum topic related to this issue at http://forums.gentoo.org/viewtopic-p-7286852.html

Reproducible: Always

Steps to Reproduce:
1. run pulseaudio daemon as normal in a non-system-wide setup (don't use system-wide USE flag)
2. /etc/init.d/timidity start
Actual Results:  
Timidity and pulseaudio do not both work.

Expected Results:  
pulseaudio should continue working while timidity provides working midi output ports to alsa system, which works in concert with the virtual alsa device, pulse, provided by pulseaudio.

$ eix -I pulseaudio
[I] media-sound/pulseaudio
     Available versions:  1.1-r1 2.1-r1 (~)3.0 **9999 {{+X +alsa +asyncns avahi bluetooth +caps dbus doc equalizer +gdbm +glib gnome gtk ipv6 jack libsamplerate lirc neon +orc oss qt4 realtime ssl system-wide systemd tcpd test +udev +webrtc-aec xen}}
     Installed versions:  3.0(08:02:53 PM 03/18/2013)(X alsa asyncns caps dbus gdbm glib gnome gtk ipv6 orc qt4 realtime ssl tcpd udev webrtc-aec -avahi -bluetooth -doc -equalizer -jack -libsamplerate -lirc -neon -oss -system-wide -systemd -test -xen)
     Homepage:            http://www.pulseaudio.org/
     Description:         A networked sound server with an advanced plugin system


$ eix -I timidity
[I] app-admin/eselect-timidity
     Available versions:  20061203 ~20091106 20110513
     Installed versions:  20110513(04:47:04 AM 04/08/2013)
     Homepage:            http://www.gentoo.org/
     Description:         Manages configuration of TiMidity++ patchsets

[I] media-sound/timidity++
     Available versions:  2.13.2-r13 ~2.13.2-r14 2.14.0 ~2.14.0-r1 {{X alsa ao emacs flac gtk jack motif nas ncurses oss slang speex tk vorbis}}
     Installed versions:  2.14.0(05:06:28 AM 04/08/2013)(X alsa ao flac gtk ncurses vorbis -emacs -jack -motif -nas -oss -slang -speex -tk)
     Homepage:            http://timidity.sourceforge.net/
     Description:         A handy MIDI to WAV converter with OSS and ALSA output support

[I] media-sound/timidity-eawpatches
     Available versions:  12-r5^bs
     Installed versions:  12-r5^bs(04:47:13 AM 04/08/2013)
     Homepage:            http://www.stardate.bc.ca/eawpatches/html/default.htm
     Description:         Eric Welsh's GUS patches for TiMidity

Found 3 matches.


$ emerge --info
Portage 2.1.11.55 (default/linux/amd64/13.0/desktop, gcc-4.6.3, glibc-2.15-r3, 3.6.11-gentoo x86_64)
=================================================================
System uname: Linux-3.6.11-gentoo-x86_64-Intel-R-_Core-TM-_i7_CPU_930_@_2.80GHz-with-gentoo-2.2
KiB Mem:    12362532 total,  11280336 free
KiB Swap:          0 total,         0 free
Timestamp of tree: Wed, 10 Apr 2013 01:35:01 +0000
ld GNU ld (GNU Binutils) 2.22
ccache version 3.1.9 [enabled]
app-shells/bash:          4.2_p37
dev-java/java-config:     2.1.12-r1
dev-lang/python:          2.7.3-r3, 3.2.3-r2
dev-util/ccache:          3.1.9
dev-util/cmake:           2.8.9
dev-util/pkgconfig:       0.28
sys-apps/baselayout:      2.2
sys-apps/openrc:          0.11.8
sys-apps/sandbox:         2.5
sys-devel/autoconf:       2.13, 2.69
sys-devel/automake:       1.11.6
sys-devel/binutils:       2.22-r1
sys-devel/gcc:            4.6.3
sys-devel/gcc-config:     1.7.3
sys-devel/libtool:        2.4-r1
sys-devel/make:           3.82-r4
sys-kernel/linux-headers: 3.7 (virtual/os-headers)
sys-libs/glibc:           2.15-r3
Repositories: gentoo x-portage java-overlay
ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -pipe -march=native -mtune=native"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/splash /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-O2 -pipe -march=native -mtune=native"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs ccache config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch protect-owned sandbox sfperms splitdebug strict unknown-features-warn unmerge-logs unmerge-orphans userfetch"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://gentoo.cites.uiuc.edu/pub/gentoo/ http://distfiles.gentoo.org"
LANG="en_US.UTF-8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage /var/lib/layman/java-overlay"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="256-color X a52 aac acl acpi afterimage alsa amd64 anthy ao bash-completion berkdb bidi blink branding bzip2 cairo cdda cdio cdr cjk cli color consolekit cracklib crypt cscope cups cxx dbus dri dts dvd dvdnav dvdr dvi emboss encode escreen exif fading-colors fam fbcondecor ffmpeg firefox firefox3 flac flite fortran furigana g3dvl gd gdbm gif gmail gpm gtk hddtemp iconv imap ipv6 iso14755 jpeg kpathsea latex lcms ldap libnotify libwww lm_sensors lock logrotate mad maildir matroska midi minizip mmx mng modules mono moonlight mp3 mp4 mpeg mudflap multilib ncurses nls nptl nsplugin nvidia ogg opencl opengl openmp pam pango pcre pdf pixbuf png policykit ppds pulseaudio qt3support qt4 quicktime readline rememberthemilk sasl scim screen sdl session sockets speech spell sse sse2 ssl startup-notification svg tcpd thunar tiff truetype udev udisks unicode upower usb vim-syntax vorbis wxwidgets x264 xcb xcomposite xfce xft xinerama xml xrandr xv xvid xvmc zlib zsh-completion" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en en_US" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-3" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_2" RUBY_TARGETS="ruby18 ruby19" USERLAND="GNU" VIDEO_CARDS="nvidia" XFCE_PLUGINS="menu" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, MAKEOPTS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON
Comment 1 Lucian Poston 2015-05-07 18:36:00 UTC
With media-sound/timidity++-2.14.0-r2 and media-sound/pulseaudio-5.0-r7, applications no longer hang, but there is still an issue with audio playback.

/etc/init.d/timidity starts the timidity daemon under the timidity user, causing a pulseaudio daemon to be run under the timidity user. timidity's pulseaudio daemon takes exclusive access of one of the sound devices.

Now, if a normal user plays audio (e.g. with aplay), a second pulseaudio daemon starts under that user. Because timdity's pulseaudio process has acquired access to a sound device, the normal user's pulseaudio daemon can't get access to it. Consequently, the normal user can't play any (non-timidity) audio through the device held by timidity's pulseaudio daemon. 


$ ps aux | grep pulseaudio
timidity 15493  2.1  0.0 421508  9432 ?        Sl   11:11   0:13 /usr/bin/pulseaudio --start --log-target=syslog
worch    15514  1.1  0.0 345368  9636 ?        S<l  11:12   0:07 /usr/bin/pulseaudio --start --log-target=syslo


# lsof /dev/snd/*
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
timidity  15480 timidity    8u   CHR  116,1      0t0   2097 /dev/snd/seq
pulseaudi 15493 timidity  mem    CHR  116,3            2119 /dev/snd/pcmC0D0p
pulseaudi 15493 timidity   17u   CHR  116,8      0t0   2137 /dev/snd/controlC1
pulseaudi 15493 timidity   22u   CHR  116,2      0t0   2118 /dev/snd/controlC0
pulseaudi 15493 timidity   27u   CHR  116,2      0t0   2118 /dev/snd/controlC0
pulseaudi 15493 timidity   28u   CHR  116,3      0t0   2119 /dev/snd/pcmC0D0p
pulseaudi 15493 timidity   29u   CHR  116,2      0t0   2118 /dev/snd/controlC0
pulseaudi 15493 timidity   34u   CHR  116,2      0t0   2118 /dev/snd/controlC0
pulseaudi 15493 timidity   39u   CHR  116,8      0t0   2137 /dev/snd/controlC1
pulseaudi 15514    worch  mem    CHR 116,16          123121 /dev/snd/pcmC2D0c
pulseaudi 15514    worch  mem    CHR 116,15          123120 /dev/snd/pcmC2D0p
pulseaudi 15514    worch    9u   CHR  116,8      0t0   2137 /dev/snd/controlC1
pulseaudi 15514    worch   20u   CHR 116,14      0t0 123119 /dev/snd/controlC2
pulseaudi 15514    worch   21u   CHR 116,15      0t0 123120 /dev/snd/pcmC2D0p
pulseaudi 15514    worch   22r   CHR 116,33      0t0   2096 /dev/snd/timer
pulseaudi 15514    worch   27u   CHR 116,14      0t0 123119 /dev/snd/controlC2
pulseaudi 15514    worch   28u   CHR 116,16      0t0 123121 /dev/snd/pcmC2D0c
pulseaudi 15514    worch   29r   CHR 116,33      0t0   2096 /dev/snd/timer


$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC889 Analog [ALC889 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: ALC889 Digital [ALC889 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: USB [Scarlett 2i4 USB], device 0: USB Audio [USB Audio]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
Comment 2 Francisco Lloret 2020-06-05 16:11:39 UTC
Recently I found that timidity and bluetooth are installed and both added to init, headset capable bluetooth, HSP/HFP capable bluetooth headsets cannnot connect. Only A2DP devices work. The possible workaround are:

1- Compile pulseaudio with only A2DP support
2- Uninstall (or delete from init) timidity.
Comment 3 Pacho Ramos gentoo-dev 2021-12-21 13:47:06 UTC
Still valid with 2.15.0-r1?
Comment 4 bug2017 2021-12-28 12:30:00 UTC
It is still relevant, but slightly different behavior. After changing from alsa to pulseaudio, audio output was only once working on integrated sound card. But after a reboot the output disappeared again. 
On USB sound cards it worked only sometimes. In most cases output or duplex entries in the list of profiles in pulse audio were missing. Only the microphone input was always present (not claimed by timidity ?). Unplugging a usb card for a very short moment increased the change of an working output or full duplex.
In all the cases alsamixer was showing all the expected channels of all soundcards.
Comment 5 Pacho Ramos gentoo-dev 2021-12-28 13:57:20 UTC
Maybe you can try to recompile it with "ao" output as default. Per Fedora .spec file, it seems it is the one working better with pulseaudio
https://src.fedoraproject.org/rpms/timidity++/blob/rawhide/f/timidity++.spec#_58