Emulation of the Creative Labs Sound Blaster 16 (SB16) sound card is now available on VMware Workstation for Windows hosts, VMware Workstation for Linux hosts, and VMware Fusion for macOS hosts. The Sound Blaster 16 emulation is vastly improved from Workstation releases prior to Workstation 15.5, and is entirely new for VMware Fusion 11.5.
Note: Despite these improvements, the Sound Blaster 16 is a legacy device; Ongoing development and support is not guaranteed.
Activating any of these features requires the use of a configuration option (now quite inaccurately named):
sound.opl3.enabled = "TRUE"
Check if your VM already has a config option for sound.virtualDev. If one is not present, create it, otherwise edit the existing entry and set:
sound.virtualDev = "sb16"
Please be aware that MS-DOS programs and games use a wide variety of techniques to detect and manage sound devices, and it is not possible to guarantee compatibility or functionality when used with the emulated Sound Blaster 16. Programs may vary in their support for hardware music and sound devices.
This facility is double-super-duper-experimental and is disabled by default, but is also double-super-duper-cool. Remember that MIDI dongle that could plug into the Sound Blaster 16's Game Port? This is that. To try it out, edit a powered-off VM's configuration file to add
sound.mpu401.host = "TRUE"
The SB16 MIDI output will only attempt to connect to a host MIDI service at the moment that the virtual machine is powered on or resumed, or at the moment the Sound Card is toggled to Connected in the Workstation or Fusion user interface. If no host MIDI device is available at that time, the SB16 MIDI output will remain disconnected. If the host MIDI device becomes unavailable during use, the SB16 MIDI output will be disconnected and no attempt will be made to reconnect. As a result, if a software synthesizer (see below) is terminated and relaunched, it might be necessary to take additional actions (e.g. disconnecting and reconnecting the Sound Card, and/or running aconnect again on a Linux host) before MIDI output is active.
Suspending or powering off a VM will not perform any "cleanup" of the MIDI output; If the MIDI output is in active use, lingering notes are likely. It is therefore recommended that the VM be put into a state where it is not actively using its MIDI output before it is suspended or powered off. Similarly, resuming a VM will not attempt to restore the prior state of the host MIDI device. If the host MIDI device's state has been changed since the VM was suspended, results will be unpredictable.
VMware Workstation will send MIDI messages to the default host MIDI device, which is likely to be the Microsoft GS Wavetable Synthesizer. Recent versions of Windows appear to require a 3rd-party tool to direct the MIDI output to any other MIDI device.
VMware Workstation will send MIDI messages to an ALSA virtual rawmidi device created for that purpose. After the VM is powered on, you may need to use aconnect command on the host to direct the MIDI messages output by the virtual machine to a software synthesizer or external MIDI device. Refer to the manpage for aconnect for further details.
Other MIDI programming interfaces are not presently supported.
One option for rendering MIDI output into audible music is FluidSynth. As usual with Linux, you have an abundance of ways to configure things; You may need to refer to documentation from your Linux distribution or from the FluidSynth, ALSA or PulseAudio projects. You might even need to refer to the source...
Here is how it works on my Debian 9 amd64 host:
If you haven't already done so, install the fluidsynth and fluid-soundfont-gm packages as follows:
sudo apt-get install fluidsynth fluid-soundfont-gm
To launch the software synthesizer, retrieving its inputs from the ALSA sequencer and rendering audio to the host's PulseAudio sound server:
fluidsynth -m alsa_seq -a pulseaudio /usr/share/sounds/sf2/FluidR3_GM.sf2
Note that aconnect -l will show the current connections, so once things are connected successfully, it should look something like this:
client 129: 'FLUID Synth (2143)' [type=user,pid=2143]
0 'Synth input port (2143:0)'
Connected From: 130:0
client 130: 'Client-130' [type=user,pid=3127]
0 'Virtual RawMIDI '
Connecting To: 129:0
Note also that connections made by aconnect are not persistent; Each time the VM or the synthesizer are relaunched, the connection must be re-established. There's probably some way to make them connect automatically, but I haven't yet discovered it.
VMware Fusion will send MIDI messages to the macOS CoreMIDI service. There is no built-in facility for directing the MIDI messages to a particular device.
The SB16's MIDI output should now be audible through the host's default audio output device. Refer to the FluidSynth documentation for further detail.
Look for a SETUP.EXE or some other configuration program which can be used to select sound and music output. If possible, choose General MIDI or MPU-401 or Roland MT-32 for the output device. If an I/O port must be specified, use 330 – typically that is the default anyway. Using DOOM as an example, run SETUP.EXE, select Choose Music Sound Card, and choose General MIDI, and choose 330 as the MIDI port.
Some programs will use command-line arguments to specify the sound system, such as specifying m for MPU-401 or r for Roland MT-32. Using the LucasArts Day of the Tentacle demo as an example, run dottdemo r to launch the demo with MIDI music – versus dottdemo a to use Adlib/OPL3 music.
For further information, refer to your program's command-line help or documentation.
With the Creative Labs Sound Blaster 16 or AWE-32 driver installed in the Windows 95 virtual machine, go into the guest's Control Panel > Multimedia, and go to the MIDI tab. With Single Instrument selected, you should be able to choose between MIDI for External MIDI Port (which will use the Sound Blaster 16's MPU-401 interface and send MIDI to the host) and MIDI for Internal OPL2/OPL3 FM Synthesis (which will use the Sound Blaster 16's Adlib/OPL3 emulation to render MIDI into audio).
Windows Media Player will use the MIDI settings in Control Panel when playing back MIDI files. Try it out using the CANYON.MID and PASSPORT.MID files included with Windows.
These Sound Blaster 16 emulation improvements would not have been possible without the patient support of my sound-enthusiast colleagues, most notably Kamen – who helped with countless code reviews – and my manager Richard, who can finally play DOOM with sound and music. Many others provided quiet encouragement and feedback to help along the way.