Annotation of hatari/doc/midi-linux.txt, revision 1.1.1.1

1.1       root        1: 
                      2: Getting (Linux) ALSA midi support and MIDI networking working with Hatari
                      3: =========================================================================
                      4: 
                      5: If you don't have a real MIDI sequencer, you can use the MIDI synthesizer
                      6: of your sound card (if available) or use a software synthetizer.
                      7: 
                      8: For (Debian) package names and links to software referenced in this
                      9: text, see end of the text. Most of the distros should have in their
                     10: repositories packages at least for some of them though.
                     11: 
                     12: Contents:
                     13: - Using a soundcard with built-in MIDI synthesis capability 
                     14: - Making MIDI soft-synthetizer to work with ALSA
                     15: - Using FluidSynth instead of Timidity
                     16: - Making it all to work with Hatari
                     17: - MIDI and networking
                     18: - Software
                     19: - Additional documentation
                     20: 
                     21: 
                     22: Using a soundcard with built-in MIDI synthesis capability 
                     23: ---------------------------------------------------------
                     24: 
                     25: If your soundcard is capable of playing MIDI sound (i.e. you can play a .mid
                     26: file with the "aplaymidi" command using the appropriate port), you can use this
                     27: synthesis device for Hatari, too. However, you still might have to install and
                     28: connect a virtual midi device, so that Hatari can access it through a
                     29: /dev/snd/midiC*D* device file (see instructions below).
                     30: 
                     31: Please note that you might also have to load instrument patches into your sound
                     32: card first, for example with the program "sfxload" for AWE64 based sound cards,
                     33: or with the program "sbiload" for OPL3 based sound cards.
                     34: 
                     35: 
                     36: Making MIDI soft-synthetizer to work with ALSA
                     37: -----------------------------------------------
                     38: 
                     39: Make Timidity into an ALSA output device with:
                     40:   timidity -Os -iA
                     41: (-O: output=alsa, -i: interface=alsa)
                     42: 
                     43: To make it use less CPU and be more responsive, use:
                     44:   timidity -Os -iA -B2,8 -EFreverb=0 -EFchorus=0
                     45: (-B: 2,8=set small buffers, -EFx=0: disable effects)
                     46: 
                     47: Make vkeybd (virtual midi keyboard app) into an ALSA input device with:
                     48:   vkeybd
                     49: 
                     50: View the resulting (software) ALSA input and output devices:
                     51:   aconnect -i -o
                     52: 
                     53: Then connect the vkeybd output port to the timidity input port with:
                     54:   aconnect <vkeybd port> <timidity port>
                     55: Or use one of the GUI programs for this like kaconnect, aconnectgui etc.
                     56: 
                     57: Now you can use the virtual midi keyboard for testing the sound
                     58: synthesis.
                     59: 
                     60: 
                     61: Finally You can test how well midi files are played.
                     62: Check which ALSA port Timidity provides:
                     63:   aplaymidi -l
                     64: 
                     65: And use that port for playing a midi file:
                     66:   aplaymidi -p <port, e.g. 129:0> test.mid
                     67: (or use 'pmidi')
                     68: 
                     69: Note: Remember that you need to re-connect the (virtual) device
                     70: ports each time you restart them.
                     71: 
                     72: 
                     73: Using FluidSynth instead of Timidity
                     74: ------------------------------------
                     75: 
                     76: Instead of Timidity, you also use other soft-synthetizers,
                     77: like FluidSynth:
                     78:   fluidsynth --audio-driver=alsa --midi-driver=alsa_seq soundfont.sf2
                     79: 
                     80: You could play a bit with other options to get more performance,
                     81: sound volume etc:
                     82:   --reverb=no --chorus=no -o synth.polyphony=16 --gain=0.6
                     83: 
                     84: And if you don't like the FluidSynth shell, use:
                     85:   --no-shell --server
                     86: 
                     87: Qsynth provides a GUI for above:
                     88:   qsynth <soundfont>
                     89: 
                     90: FYI: FluidSynth v1.0.7a (in Debian Etch & Ubuntu Hardy) has buffer
                     91: overruns, but they're fixed in v1.0.8 (in Debian Lenny etc).
                     92: 
                     93: 
                     94: Making it all to work with Hatari
                     95: ---------------------------------
                     96: 
                     97: Hatari requires midi hardware devices to work, it doesn't support
                     98: ALSA directly.  To get the software synth ALSA devices to appear
                     99: as HW midi devices, run following as *root*:
                    100:   modprobe snd-virmidi
                    101: 
                    102: When you list your ALSA output devices with:
                    103:   aconnect -o
                    104: You should see in addition to Timidity also 4 virtual hardware
                    105: devices.
                    106: 
                    107: Then connect (with aconnect or one of the GUIs) the first virtual
                    108: HW port to the same Timidity port where you connected the virtual
                    109: midi keyboard.
                    110: 
                    111: Check which number was assigned by ALSA to the new virtual midi card:
                    112:   cat /proc/asound/cards
                    113: 
                    114: And give to Hatari the corresponding ALSA midi device.  In my case
                    115: VirMidi was Card 1 and as the port used above was first one, I give
                    116: Hatari the following midi device:
                    117:   hatari --midi /dev/snd/midiC1D0
                    118: 
                    119: FYI: SDL_mixer (at least in Ubuntu Feisty) takes exclusive access to
                    120: the PCM (sound) device, but as the soft synthetizer was already
                    121: connected to it, I neded to use --nosound option to get MIDI sound
                    122: working. This isn't a problem anymore in Debian Lenny.
                    123: 
                    124: 
                    125: MIDI and networking
                    126: -------------------
                    127: 
                    128: If you direct the MIDI data to stdout, you can use just ssh to
                    129: forward the MIDI output over network:
                    130:   hatari --midi-in "" --midi-out /dev/stdout --log /dev/stderr |\
                    131:     ssh [email protected] "cat>/dev/snd/midiC1D0"
                    132: 
                    133: (Note that logging is re-directed to stderr so that it doesn't
                    134: mess the MIDI output to standard output and --midi-in is set
                    135: empty in case you don't have MIDI input device locally.)
                    136: 
                    137: 
                    138: MIDI-networking two Hatari emulators can be most easily done with socat.
                    139: 
                    140: MIDI networking over normal TCP/IP network:
                    141:   @remote.site:
                    142:     socat -b1 PTY,raw,echo=0,link=/tmp/midi1 TCP4-LISTEN:33333 &
                    143:     hatari --midi-in /tmp/midi1 --midi-out /tmp/midi1 &
                    144:   @local.site:
                    145:     socat -b1 PTY,raw,echo=0,link=/tmp/midi2 TCP4:remote.site:33333 &
                    146:     hatari --midi-in /tmp/midi2 --midi-out /tmp/midi2 &
                    147: 
                    148: Buffer size (-b) is set to one just in case (by default socat buffer
                    149: size is 8K, but all the MIDI communication is done byte at the time).
                    150: 
                    151: You may need to open a hole into your firewall for the given port
                    152: (here 33333).  Usually there's a hole for the www-traffic in firewalls,
                    153: but the port for that (80) is below 1000, so if you use "www" as
                    154: the port, most likely you need to run "socat" as root.  To test this
                    155: with a single machine, use "localhost" as the "remote.site".
                    156: 
                    157: Local MIDI network:
                    158:   socat -b1 PTY,raw,echo=0,link=/tmp/midi1 PTY,raw,echo=0,link=/tmp/midi2 &
                    159:   hatari --midi-in /tmp/midi1 --midi-out /tmp/midi1 &
                    160:   hatari --midi-in /tmp/midi2 --midi-out /tmp/midi2 &
                    161: 
                    162: If you don't have "socat" installed, local-midi-ring.sh script shows how
                    163: to join several (local) Hatari emulators into a MIDI ring using fifos.
                    164: 
                    165: 
                    166: Software
                    167: --------
                    168: 
                    169: In Debian, the tools mentioned above come from following packages:
                    170: - alsa-utils (aconnect, aplaymidi)
                    171: - alsa-tools (sbiload)
                    172: - awesfx (sfxload)
                    173: - pmidi
                    174: - vkeybd
                    175: - aconnectgui
                    176: - qsynth
                    177: - fluidsynth
                    178: - fluid-soundfont-* (soundfonts)
                    179: - timidity
                    180: - socat
                    181: See http://packages.debian.org/ for more details on them.
                    182: 
                    183: Below are upstream links to some of these tools.
                    184: 
                    185: Vkeybd:
                    186:   http://alsa.opensrc.org/Vkeybd
                    187: 
                    188: Patch (ALSA connecting) utilities:
                    189:   http://alsa.opensrc.org/AlsaMidiPatchbays    
                    190: 
                    191: FluidSynth:
                    192:   http://www.iiwu.org/fluidsynth/
                    193: 
                    194: Soundfonts:
                    195:   http://alsa.opensrc.org/SoundFontHandling
                    196: 
                    197: List of some soft-synthetizers:
                    198:   http://alsa.opensrc.org/SoftSynths
                    199: 
                    200: Kaconnect:
                    201:   http://alsamodular.sourceforge.net/
                    202: 
                    203: socat:
                    204:   http://www.dest-unreach.org/socat/
                    205: 
                    206: MidiMaze:
                    207:   http://en.wikipedia.org/wiki/MIDI_Maze
                    208: 
                    209: 
                    210: Additional documentation
                    211: ------------------------
                    212: 
                    213: ALSA midi overview:
                    214:   http://alsa.opensrc.org/AlsaMidiOverview
                    215: 
                    216: How to set up soundcards with hardware MIDI synthesis capability (AWE & OPL3):
                    217:   https://help.ubuntu.com/community/Midi/HardwareSynthesisSetup
                    218: 
                    219: Virtual midi hardware setup:
                    220:   http://www.tldp.org/HOWTO/MIDI-HOWTO-10.html
                    221: 
                    222: Timidity Howto:
                    223:   http://lau.linuxaudio.org/TiMidity-howto.html
                    224: 
                    225: Midi with ALSA (old):
                    226:   http://www.linuxfocus.org/English/September2002/article259.shtml
                    227: 
                    228: Midi on Linux:
                    229:   http://www.linuxjournal.com/article/7773
                    230: 
                    231: MIDI, Musical Instrument Digital Interface protocol:
                    232:   http://en.wikipedia.org/wiki/Midi

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.