Recently, Tyler linked me to Linux Multimedia Studio, a Fruityloops-type application for Linux. Since I’m big into music recording and production, he figured that I’d be interested in trying it out, and he was right. Unfortunately, the developers of same were not as interested.
To start off, I installed the application from a PPA with the following terminal commands:
sudo apt-add-repository ppa:dns/sound sudo aptitude update sudo aptitude install lmms
After the install process finished, I tried to launch the application from the command line, only to see a bunch of nasty error messages:
jonf@THE-LINUX-EXPERIMENT:~$ sudo lmms bt_audio_service_open: connect() failed: Connection refused (111) bt_audio_service_open: connect() failed: Connection refused (111) bt_audio_service_open: connect() failed: Connection refused (111) bt_audio_service_open: connect() failed: Connection refused (111) bt_audio_service_open: connect() failed: Connection refused (111) bt_audio_service_open: connect() failed: Connection refused (111) bt_audio_service_open: connect() failed: Connection refused (111) bt_audio_service_open: connect() failed: Connection refused (111) Segmentation fault
I dumped the errors into Google, and found a helpful thread on the Ubuntu forums that suggested that I uninstall Bluetooth Audio Services from my machine. Since I don’t use bluetooth audio in any capacity, I happily obliged. When finished, my list of installed items with Bluetooth in the name looked like this:
After ridding myself of Bluetooth audio support, I tried to launch the application again. Unfortunately, I got another Segmentation fault error:
jonf@THE-LINUX-EXPERIMENT:~$ sudo lmms Segmentation fault
Reading on in the thread, I saw somebody suggest that I check the dmesg tail for messages pertaining to the crash:
jonf@THE-LINUX-EXPERIMENT:~$ dmesg | tail [Â 233.302221] JFS: nTxBlock = 8192, nTxLock = 65536 [Â 233.314247] NTFS driver 2.1.29 [Flags: R/O MODULE]. [Â 233.343361] QNX4 filesystem 0.2.3 registered. [Â 233.367738] Btrfs loaded [ 2233.118020] __ratelimit: 33 callbacks suppressed [ 2233.118026] lmms[10706]: segfault at 7f241c7fdd80 ip 00007f241c7fdd80 sp 00007f24187f8a38 error 14 in zm1_1428.so[7f241ca01000+1000] [ 2523.015245] lmms[10808]: segfault at 7fd80e9bcd80 ip 00007fd80e9bcd80 sp 00007fd80a9b7a38 error 14 in zm1_1428.so[7fd80ebc0000+1000] [ 2671.323363] lmms[10845]: segfault at 7fbe39a77d80 ip 00007fbe39a77d80 sp 00007fbe35a72a38 error 14 in zm1_1428.so[7fbe39c7b000+1000] [ 2836.885480] lmms[11246]: segfault at 7f885b71ed80 ip 00007f885b71ed80 sp 00007f8857719a38 error 14 in zm1_1428.so[7f885b922000+1000] [ 3039.773287] lmms[11413]: segfault at 7ff83056ed80 ip 00007ff83056ed80 sp 00007ff82c569a38 error 14 in zm1_1428.so[7ff830772000+1000]
On the last few lines, you can see that the error was thrown in a module called zml_1428.so. A bit of Googling turned up the fact that this module is a part of the LADSPA (Linux Audio Developers Simple Plugin API) stack, which provides developers with a standard, cross-platform API for dealing with audio filters and effects.
Scrolling down in the aforementioned thread, I found a post that suggested that I kill all PulseAudio activities on my system before attempting to run the application. PulseAudio is another part of the Linux audio layer that allows user-land applications to talk to your sound hardware via a simple API. It also provides some effects plugins and mixdown capabilities. I went ahead and killed the PulseAudio server on my machine with the following command:
jonf@THE-LINUX-EXPERIMENT:~$ killall pulseaudio
After executing this command, I still got a Segmentation fault when starting LMMS under my user account, but did actually get to a Settings panel when running it with Sudo:
jonf@THE-LINUX-EXPERIMENT:~$ sudo lmms Home directory /home/jfritz not ours. ALSA lib pcm_dmix.c:1010:(snd_pcm_dmix_open) unable to open slave Playback open error: Device or resource busy Expression 'snd_pcm_hw_params_set_buffer_size_near( self->pcm, hwParams, &bufSz )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1331 Expression 'PaAlsaStreamComponent_FinishConfigure( &self->playback, hwParamsPlayback, outParams, self->primeBuffers, realSr, outputLatency )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1889 Expression 'PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer, &inputLatency, &outputLatency, &hostBufferSizeMode )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1994 Couldn't open PortAudio: Unanticipated host error Home directory /home/jfritz not ours. Home directory /home/jfritz not ours.
Although the output appeared to be riddled with audio layer errors, and the Audio Settings tab of the Setup panel gave me a clue as to why:
Notice how the Audio Interface setting in that image says “Pulse Audio (bad latency!)”. I would hazard a guess that the latency issues with PulseAudio have something to do with the fact that I killed it just prior to getting this damned thing to launch. When I hit the OK button, I was able to see the application, but there was no sound.
Figuring that sound was a necessary component of an audio production application, I booted back to the Setup menu, and told the app to funnel its audio through JACK instead of PulseAudio. The JACK Audio Connection Kit is another sound subsystem, kind of like PulseAudio, that provides an API that developers can use to interface with a machine’s audio hardware. Because of its low latency performance, JACK is often considered to be the standard API for high-quality audio recording and production apps. Unfortunately, it doesn’t work worth a damn in LMMS:
jonf@THE-LINUX-EXPERIMENT:~$ sudo lmms jackd 0.118.0 Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others. jackd comes with ABSOLUTELY NO WARRANTY This is free software, and you are welcome to redistribute it under certain conditions; see the file COPYING for details no message buffer overruns JACK compiled with System V SHM support. loading driver .. SSE2 detected creating alsa driver ... hw:0|hw:0|1024|2|48000|0|0|nomon|swmeter|-|32bit control device hw:0 SSE2 detected all 32 bit float mono audio port buffers in use! cannot assign buffer for port cannot deliver port registration request no more JACK-ports available! No audio-driver working - falling back to dummy-audio-driver You can render your songs and listen to the output files... Home directory /home/jfritz not ours. Home directory /home/jfritz not ours. the playback device "hw:0" is already in use. Please stop the application using it and run JACK again cannot load driver module alsa Home directory /home/jfritz not ours.
Having dealt with JACK on a previous install, I had one more trick up my sleeve in my effort to get this bastard application to make a sound. I installed the JACK Control Panel from the Ubuntu Software Centre. It’s a QT app that interfaces with the JACK server and allows you to modify settings and stuff.
With it installed, I pressed the big green (or is it red – I’m colour blind, and hate when developers use these two colours for important status messages) Start button, only to encounter some nasty errors:
That might be a problem. I hit the messages button and found a message advising me to make a change to the /etc/security/limits.conf file so that JACK would be allowed to use realtime scheduling:
JACK is running in realtime mode, but you are not allowed to use realtime scheduling. Please check your /etc/security/limits.conf for the following lines and correct/add them: @audio - rtprio 100 @audio - nice -10 After applying these changes, please re-login in order for them to take effect. You don't appear to have a sane system configuration. It is very likely that you encounter xruns. Please apply all the above mentioned changes and start jack again!
I figured that it was worth a shot, considering how far I’ve already gone just to try out a piece of software that I don’t really even need. I made the requested changes in the config file, restarted my machine and tried again… only to be greeted by the same damned error message.
At this point, I decided to give up on LMMS. It’s too damned complicated, and ultimately not worth my time. Perhaps when they release a version that I can install and start using without an hour of troubleshooting, I’ll come back and give it another shot. In the mean time, if you’re looking for a decent drum machine with more than a few tricks up its sleeve, check out Hydrogen Drum Machine. It works very well, and I’ve created some neat stuff in it.
A few semi-educated guesses:
The segfault was in a LADSPA plugin, at that point the best bet would be to remove the problematic plugin before continuing. Either by finding the .so file and moving it somewhere where it won’t be loaded or by removing the package it came in. One handy way of finding the package would be:
$ dpkg-query -S zm1_1428.so
(This should be in swh-plugins or something like that?)
After that LMMS would be OK, using Pulseaudio. I advise not killing PA, even if it is claimed to have bad latency it usually works better with LMMS than JACK. And besides, PA would probably be respawned after a killall, which might explain why going the sudo route gave you the “Device or resource busy” error and JACK didn’t start; your sound card was still in use by PA.
If you want to use JACK you should first get it configured and running through its own control panel. LMMS starts JACK in the background if needed, using the default configuration.
I’m guessing the reason LMMS ran using “sudo” was that the environment for root doesn’t contain the path for the broken plugin. Running anything unnecessarily as root is a bad idea, doing so for multimedia stuff in an X session owned by a regular user is probably even worse.