Linux SB Live Wavetable Support

From OpenTTD
Jump to: navigation, search


It is possible to get OpenTTD to play music using the wavetable feature of a SB Live card (aka Awe32/64 or Emu10k1).

These instructions are written for Ubuntu 12.04 (Precise), so adjust as necessary for your distribution.

Contents

Requirements

You will need the following:

asfxload
Provided by the awesfx package.
aplaymidi
Provided by the alsa-utils package.
a sound font
These can be found on the CD that came with your soundcard, or somewhere on your Windows partition if you have one. This example uses the file 8mbgmsfx.sf2.
Alternatively you can install the musescore-soundfont-gm package which provides the TimGM6mb.sf2 soundfont.

Load the Soundfont onto the card

Put the soundfont into /usr/share/sounds/sf2/, then run

asfxload 8mbgmsfx

to load the soundfont onto the sound card.

Configure aplaymidi

Run

aplaymidi -l

You should see output similar to this:

 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 16:0    SBLive 5.1 [SB0060]              EMU10K1 MPU-401 (UART)
 17:0    Emu10k1 WaveTable                Emu10k1 Port 0
 17:1    Emu10k1 WaveTable                Emu10k1 Port 1
 17:2    Emu10k1 WaveTable                Emu10k1 Port 2
 17:3    Emu10k1 WaveTable                Emu10k1 Port 3

Note the port for Emu10k1 Port 0 (17:0 in this example)

Run the following substituting the port above.

export ALSA_OUTPUT_PORTS="17:0"

You should now be able to use aplaymidi to play one of the music files. If you can't hear anyting, check your mixer settings and ensure that the synth input is unmuted and turned up.

Configure OpenTTD

Assuming that worked correctly, the last step is to edit ~/.openttd/openttd.cfg to make OpenTTD use aplaymidi instead of timidity.

In the [misc] section set the musicdriver line to:

musicdriver = "extmidi:cmd=aplaymidi"

You should now have midi sound working in OpenTTD without it eating up all your CPU time.

Automating everything

To automate loading the soundfont at bootup, create a modprobe config file /etc/modprobe.d/emu10k-soundfont.conf as follows:

install snd_emu10k1_synth /sbin/modprobe --ignore-install snd_emu10k1_synth $CMD_LINE_OPTS && { /usr/bin/asfxload 8mbgmsfx; }

To automate setting the ALSA port, create a shell script /usr/local/bin/openttd) as follows:

#!/bin/bash

export ALSA_OUTPUT_PORTS=`aplaymidi -l | awk '/Emu/ { print $1; exit }'`
exec /usr/games/openttd

Ensure this is executable ( chmod +x /usr/local/bin/openttd)

With the default Ubuntu setup, the menuitem will use this to load the game, and you should have music.

Personal tools