Making Old DOS Games Sound Better in DOSBox-X with Shan SGM-Pro V5 SoundFont

Old DOS games are already great, but let us be honest, MIDI music can sound very rough if it is played through the default Windows MIDI synthesizer. Some games still sound okay, but many of them lose a lot of character because the instruments sound thin, cheap, or just plain boring.

This is where SoundFonts come in.

A MIDI file does not actually contain recorded music like an MP3. It is more like a set of instructions. It tells the computer which notes to play, which instruments to use, how loud they are, and when they should start or stop. The final sound depends on the synthesizer and instrument bank used to play those instructions.

A SoundFont is basically an instrument bank, usually in .sf2 or .sf3 format. It gives the MIDI synthesizer better instrument samples to work with. So instead of your DOS game music sounding like basic Windows MIDI, it can sound fuller, clearer, and more dramatic.

For this setup, I used Shan SGM-Pro V40 SoundFont. It is based around the SGM-style General MIDI sound, which is popular among retro PC gaming users because it gives many DOS game soundtracks a bigger and more modern sound. More information about Shan SGM-Pro can be found at the VOGONS thread here:

Shan SGM-Pro SoundFont on VOGONS

Why Use DOSBox-X with FluidSynth

DOSBox-X already supports MIDI configuration properly, and it can use FluidSynth to play MIDI through a SoundFont. This is cleaner than routing MIDI into another external program.

The basic idea is simple:

  1. Put the SoundFont file somewhere permanent.
  2. Tell DOSBox-X to use FluidSynth.
  3. Point DOSBox-X to the .sf2 file.
  4. Configure the old DOS game to use General MIDI, Roland Sound Canvas, or MPU-401, depending on what the game supports.

For my setup, I placed the SoundFont here:

/home/mypapit/midi/shan.sf2

You can use another folder if you want. Just make sure the path in the DOSBox-X config matches the actual file location.

DOSBox-X MIDI Configuration

# fluid.soundfont: Soundfont (.SF2 or .SF3) to use with Fluidsynth.
#                  One must be specified, for example GeneralUser_GS.sf2.

mpu401          = intelligent
mpubase         = 330
mididevice      = fluidsynth
midiconfig      =
samplerate      = 48000
mpuirq          = -1
mt32.romdir     =
mt32.model      = auto

fluid.driver    = pulseaudio
fluid.soundfont = "/home/mypapit/midi/shan.sf2"
fluid.reverb    = 20
fluid.chorus    = 16

Game Setup

After changing the DOSBox-X config, you still need to configure the DOS game itself.

In the game sound setup program, choose something like:

Music device: General MIDI
Port: 330
IRQ: 9 or default

Some games may show it as:

Roland MPU-401
Sound Canvas
General MIDI

For many DOS games from the 1990s, General MIDI is the correct choice. Examples include games like Doom, Duke Nukem 3D, Descent, Warcraft II, TIE Fighter, and many LucasArts titles.

Do not choose MT-32 unless the game soundtrack was actually made for MT-32. MT-32 and General MIDI are not the same thing. If you choose the wrong one, the music can sound strange, with incorrect instruments.

TIE-FIGHTER DEMO with SHAN SGM-PRO SoundFont

TIE Fighter is a good game to test this because its MIDI soundtrack benefits a lot from a stronger SoundFont. The music becomes more cinematic and less flat compared to the default Windows MIDI output.

Here is a YouTube video showing TIE Fighter using the Shan SGM-Pro SoundFont:

Star Wars: TIE Fighter with Shan SGM-Pro SoundFont

The difference is clear. The brass, strings, and percussion sound much heavier. It does not sound like original hardware, but that is not the goal here. The goal is to make old DOS MIDI music sound better, fuller, and more enjoyable on a modern machine.

Notes:

Keep the SoundFont file in a fixed folder. Do not put it in a temporary download folder because DOSBox-X will fail to load it if the file is moved.

Use a full path in the config file, especially on Windows.

Restart DOSBox-X after editing the config.

Make sure the game itself is configured for General MIDI or MPU-401 music output.

If there is no music, check the file path first. Most problems come from a wrong SoundFont path or a typo in the filename.

yt-dlp – a verstatile video downloader tool

yt-dlp is a command-line tool for which allows a user to download audio/video from thousands of sites. The project is a fork of youtube-dl, which is based on the now inactive youtube-dlc.

yt-dlp can be installed using official releases or via package manager.

Unix-like operating system

curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o ~/.local/bin/yt-dlp
chmod a+rx ~/.local/bin/yt-dlp  # Make executable

To update yt-dlp in Unix-like operating system

yt-dlp -U

Homebrew MacOS

brew install yt-dlp

Ubuntu

sudo add-apt-repository ppa:tomtomtom/yt-dlp # Add ppa repo to apt
sudo apt update # Update package list
sudo apt install yt-dlp # Install yt-dlp

Snap

sudo snap install --edge yt-dlp

Windows operating system

yt-dlp is also available for Windows operating system by using, winget:

winget install yt-dlp

Microsoft Windows binary package

The binary package for Microsoft Windows binary package can be downloaded from yt-dlp GitHub release page

Note that yt-dlp requires ffmpeg windows binaries which can be obtained from gyan.dev’s Codex FFMPEG Build

Please refer to this post for more information on the tips and tricks on using yt-dlp.

nmap scanning for ip camera in the network

Here’s an nmap snippet for scanning for hidden cctv / ip camera in the network

nmap -sV --script=http-enum,http-title,rtsp-url-brute -p 80,443,554,8000 <ip range>

Or you can write as :

sudo nmap -sV --script=http-enum,http-title,rtsp-url-brute -p 80,443,554,8000 192.168.0.0/24

Make sure you have permission to scan on the network!

Getting Rid of /.well-known/traffic-advice 404 errors in nginx web server

It seems Google have implemented private prefetch proxy in Chrome for Android.

The upside of this private prefetch proxy is improved browsing experience for mobile users by reducing waiting time for web pages to load.

The downside is, as web server administrators – you might find a lot of 404 status in your web logs.

To solve this, you could either :

  • Write directive to ignore 404 logs for “traffic-advice”
  • Create “/.well-known/traffic-advice file for each domain and set the file to be served with “application/trafficadvice+json” MIME type [source]

Solution

Luckily, TechTitBits have come up with a convenient solution which only involves adding a few lines in configuration files to enable Chrome for Android prefetched proxy in nginx.

location = /.well-known/traffic-advice {
    types { }
    default_type "application/trafficadvice+json; charset=utf-8";
    return 200 '[{ "user_agent": "prefetch-proxy", "fraction": 1 }]';
}

With this solution, you would only need to add the location block within the server { } context in the site configurations.

Thank you for the tip: Traffic Advice configuration for Nginx

Automatically generate gallery with llgal

LLGAL (llgal) is an tool which can automatically generate gallery on your website. llgal is handy if you want to generate photo album out of photos organized in directories/folders.

Running llgal from the console is easy as typing the llgal command at the root directory of your photos.

llgal --exif --li -L -R --title "Album Name" --sx 960 --sy 720 --tx 250 --ty 150

In Ubuntu, the gallery’s theme is located in “/usr/share/llgal/” directory and my customized theme which supports mobile phone can be downloaded here: llgal.zip (mobile enabled)

llgal Screenshot

Personally, i use llgal to generate cctv tiles automatically on my Ubuntu server from which my TP-LINK NC450 and NC250 IP camera uploads through its FTP functions when it detects movements/motion.

 

Installation

llgal can be installed on Ubuntu by running this command

apt -y install llgal

Alternatively you can compile and install llgal directly from its repository
https://github.com/bgoglin/llgal

LILO Linux Bootloader project is ending

LILO – the venerable Linux Bootloader is ending its development. The news has been announced at its project’s page.

lilo-bootloader

I’ve used LILO since the very first time I’m acquainted with GNU/Linux operating system, back in 2002. LILO simplicity makes it easy to install and reinstall the bootloader using standard computer BIOS at the time.

However, guess time has changed, with multitude of the server environment which linux computer may have been deployed, LILO probably has caught up with its limitation.

Still, I could still see LILO can be useful within embedded computing environment.