Building a DR SBAITSO Text to Speech App

I want a web interface for a Dr. Sbaitso TTS, so that I can use the doc’s voice for fun.

I was recently inspired by two beautiful pieces of content.

First, content creator nSanity, best known for the Travelling Salesman animation on Youtube, produced an incredible music video capturing the creation of a 3D printed iBM PS/2 using a Raspberry Pi emulator. Narrating the process is the extremely funny and highly nostalgic text-to-speech voice of Dr. Sbaitso.

To me, the TTS robo-voice sounded unlike others I was familiar with: Sam or Festival varieties or the IBM 7094. Instead, it reminded me of the VOX from Half Life. Once I learned about Dr. Sbaitso from nSanity’s comments section, I tried to locate an existing TTS app but only found crummy AI impressions of the voice. After much searching, I stumbled upon a blogpost by Bertrand Fan where he documented how he integrated Chat-GPT with the 1990s Dr. Sbaitso speech synthesizer.

With a set of instructions in front of me, I followed EverythingEpan’s tutorial to install 86Box, load MS-DOS and SoundBlaster Utilities images, and run the READ.EXE program to emulate speech. The READ program works perfectly, so I can type ‘READ Hello world’ and then listen to Dr. Sbaitso speak “Hello world.” (Note: Bertrand uses SAY.EXE, but I must have used more recent disk images as the relevant command is READ.EXE).

After reproducing these basic steps, I decided that my next goal would be to run a Dr. Sbaitso TTS Synthesizer on the Bad at Computer site.

Creating a Host Environment for 86Box

With my Azure account, I spun up a new virtual machine with a minimal Ubuntu image. I used SSH to access the VM, then installed a GUI and xrdp. The xrdp tool gave me ability to use Remote Desktop Protocol (RDP) to see what I was doing on the virtual machine, while the GUI was needed to navigate to Firefox, download, install, and configure 86Box.

Installing 86Box and MS-DOS

Using the GUI, I installed Firefox, then I followed EverythingEpan’s tutorial to install 86Box, the ROMS, and the MS-DOS floppy disk images. I needed to install p7zip to extract the disk images from .7z files, but everything else was straightforward.

Here is a handy list of the settings I used for my 86Box emulator, after following both tutorials from EverythingEpan and Bertrand Fan:

  • Machine
    • Machine Type: Socket 7 [Dual Voltage]
    • CPU Type: Intel Pentium MMX
    • Frequency 233
    • Memory: 128 MB
  • Display
    • Video: [PCI] S3 Trio64 (Phoenix)
    • check Voodoo 1 or 2 Graphics
  • Sound Card
    • [ISa16] Sound Blaster 16
  • Network > Network Card # 1
    • Mode: SLiRP
    • Adapter: [ISA16] Novell NE2000
  • Storage Controllers
    • HD Controller: [PCI] IDE Controller
  • Hard Disks > New
    • File Name: MSDOS
    • Size (MB) 1023
    • Say OK to warning message
  • Floppy & CD-ROM Drives:
    • Select the 1st Floppy > Select the ‘Type’ dropdown > 3.5″ 1.44M
    • Select the 2nd Floppy > Select the ‘Type’ dropdown > None

Installing SoundBlaster Utilities

The Dr Sbaitso software was found on a ‘utilities’ floppy that shipped with the purchase of a Sound Blaster sound card. Other utilities include a virtual keyboard, an animated parrot that echoed back your microphone input, and more. To get Dr Sbaitso on DOS, I copied the contents of the SoundBlaster Utilities floppy images into a new directory (making sure to use XCOPY to copy directories).

MD C:\SB
XCOPY A:\*.* C:\SB /S

Bridging the Emulated IBM PC to the Ubuntu Host

From a list of drivers here, I grabbed the driver for the NE2000 and extracted it inside the Ubuntu VM. Next, I needed to load that into the 86Box.

From within 86Box, I used the Menu > Media > Floppy > New Image to create ‘ne2000.img’ as a blank floppy disk. Then I used some commands to mount it in Ubuntu, copy the NE2000.COM file, and unmount it.

// ** In Ubuntu **
// mount the floppy disk
mkdir /mnt/floppy
sudo mount -o loop ne2000.img /mnt/floppy

// copy the packet driver to the floppy
sudo cp ~/NE2000.COM /mnt/floppy

// unmount the floppy disk
sudo umount /mnt/floppy

// ** In DOS **
XCOPY A:\*.* C:\DOS\DRIVER

I configured port forwarding per BertrandFan’s article and also followed steps to grab mTCP. Then I repeated the process: copy the mTCP files to a new floppy image, load it into the machine, and copy to the specified directory.

// ** In Ubuntu **
// mount the floppy disk
mkdir /mnt/floppy
sudo mount -o loop mTCP.img /mnt/floppy

// copy the unzipped files to the floppy
sudo cp /mTCP-files/* /mnt/floppy

// unmount the floppy disk
sudo umount /mnt/floppy

// ** In DOS **
XCOPY A:\*.* C:\MTCP\MTCP.CFG

Building a Text-to-Speech Interface

I wanted a minimalist interface to allow users to enter their text before Dr. Sbaitso returned it. I found a guide for building a prototype in Traversy Media‘s video and implemented it here as a demo.

TTS

Try Text to Speech