Translating LaTex documents

I am trying to recapture Spanish after a long hiatus from four years of work in high school. As such, I decided that translating the KBD-Infinity instruction manuals would be educational as well as useful. A complete translation would take too much effort and could produce some strange results. I decided to use the resources of Google Translate (GT) combined with my reading knowledge of Spanish to remove any howlers. An instruction manual is an ideal candidate for machine translation. The original English text must be straightforward, with few idioms and no subtle turns of phrase.

LaTex is a popular markup language for typography. We use it for all our manuals. In comparison to word processors, it offers many advantages for maintaining documents. The source files are in text format that should be easy to upload to GT. Unfortunately, GT does not offer direct support for LaTex. In fact, it does some serious work mashing up the markup structure. Nonetheless, there are ways to compensate. In this article, I’ll describe an automated procedure that allows translation of an entire instruction manual, preserving all the visual structure of LaTex, in a half an hour or less.

First, a few words about using GT. For straightforward text, the translation is quite good. The service is free, and it is not necessary to be logged into Google. On the other hand, we have all come to know what “free” means on the Internet, so it would be wise not to upload documents with sensitive information. The main emphasis of GT is the translation of web pages. Accordingly, the service does a good job with the contents of an HTML pages, preserving the markup structure. Ironically, GT will not allow you to upload HTML documents directly. Supposedly, you can upload a variety of other document types (.doc, .docx, .odf, .pdf, .ppt, .pptx, .ps, .rtf,.xls, or .xlsx), but the performance is spotty. I found it refused to accept my .doc files for reasons unknown. It did accept PDF files, making a spare text-only translation with no visual elements. The best option is to use straight text (.txt).

There are some steps to prepare a Latex document for translation. First, GT will not accept a .tex file. It also refuses a .tex file with the suffix changed to .txt. Use a text editor to grab the content between \begin{document} and \end{document} and paste it in a .txt file. The second issue is that GT imposes an undocumented character limit. The general suspicion on the Internet is that the limit is 5000 characters. I found (as of this date) that GT would accept somewhat more than 20,000 characters. With larger documents, GT translates the first 20,000 characters and then fills out the remaining space with the original text, issuing no warning message. In consequence, input files larger than 20 kB must be split into parts. If you are concerned about issues of privacy or performance, it may not be useful to search for alternatives. Google has made GT open to websites and applications, so many translation services are simply front ends.

The translation process is simple.

  1. Set the language preferences, click on Documents and browse for a file to upload,
  2. The translated text appears in a text window. Press Ctrl-A then Ctrl-C to capture the output and paste it into a text file.

The aftermath is not so simple. In a long document, GT may introduce thousands of errors in the LaTex markup structures. For example, in a Spanish translation “\normalsize” becomes ” \ talla normal”. Note the addition of extra spaces, one of the primary problems. I realized that it would take days of hand labor to correct all the errors. My first thought was to create macros in my text editor, but this proved unworkable. In a typical LaTex document translation, there may be more than 70 different types of corrections to make. My ultimate solution was to write a utility code in which I could define any number of global replacements. This approach allowed almost instantaneous document correction.

ChangeIt interface

Figure 1. ChangeIt interface.

Figure 1 shows the interface of my program ChangeIt. The critical concept is the ability to load custom template files that define multiple rules for global search and replace operations. Here’s an example of the template that evolved for my use in Spanish translations, SpanishTemplate.CTP:

* ChangeIt template
$\ begin {$\begin{$
$\ end {$\end{$
$\nueva pagina$\newpage$
$\Tabla de contenido$\tableofcontents$
$\ textbf {$\textbf{$
$\ textit {$\textit{$
$\ textsf {$\textsf{$
$\ texttt {$\texttt{$
$\ textsl {$\textsl{$


$\ bigskip$\bigskip$
$ \ rightarrow $\rightarrow$
$\ footnote $\footnote$
$ ~ \ ref {$~\ref{$
$\ #$\#$
$\ _$\_$
$\ nota al pie {$\footnote{$

The first line of the text file is a required identifier while the second line defines the delimiter. The file may contain any number of data lines, each giving a replacement rule. Each data line has the format Delim:Before:Delim:After:Delim. For example, the first rule in the example removes extra spaces, so that ” \ begin {document}” becomes “\begin{document}”. Note that ChangeIt can be used to correct any type of text file by using different templates.

Once a template is loaded, ChangeIt can either fix an entry pasted in the text area or correct an entire file. The procedure for the first option is to load text in the clipboard and then left-click inside the text area. When the Process text button is pressed, the program corrects the text, updates the area and places the result on the clipboard. In a correction, ChangeIt runs through the list of rules, applying each one in turn to the entire file. Because it’s easy to add new rules to a template as needed, the program works better the more it’s used. Typically, only a few subsequent hand corrections may be necessary, so the total translation and conversion time for a 15-page manual may be only 15-30 minutes. The resulting text can then be pasted into the original LaTex document between \begin{document} and \end{document}. To display the correct accent marks in the Spanish translation, I added one line to header:


Figure 2 shows an output example for the translation of a LaTex document with extensive markup messages. Click here to download a full PDF manual translation: MIDI Doctor.

Example: translation of a Latex document to Spanish

Figure 2. Example: translation of a Latex document to Spanish.



[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at

Turbocharging Yamaha-format styles

Styles are great additions to Yamaha keyboards. They make it possible for players with moderate ability to create good sounding songs. On the other hand, standard style files have several limitations. Like MIDI files, they are constrained to support all hardware designed over a span of 40 years. The challenge for improving styles is to make changes in a manner that preserves back-compatibility.

There are 10s of thousands of Yamaha-format style files available on the Internet. Unfortunately, they are far from user friendly. The standard file has an arcane binary format that is difficult to decipher, even for a computer programmer. Many styles are sandbagged so that they perform well only on a specific keyboard. The major drawback is that it is difficult, if not impossible, for a musician to control the content.

Over several years, we have worked to make style files more accessible. One effort is the development of PureStyle, an organized binary style format that conforms to MIDI standards and is compatible with all Yamaha keyboards. The second effort is the development of a program to allow non-technical users to modify the content of style files. The program started with the unimposing name of Style Voice Optimizer. Then, it’s main function was to enable user control over the instrument voices of style MIDI channels. In this way, users could change the sound of styles and optimize voices for their keyboards. Since then, we have added many features.

  • Set baseline tempo. time-signature and volume level.
  • Shift the channel of extra percussion information for compatibility with computer output via soundfonts.
  • Clear tempo changes for compatibility with performance software.
  • Bulk convert styles to PureStyle with user selected options.
  • Export style sections to individual MIDI files for modifications with MIDI editors.
  • Import MIDI file data to create styles.
Figure 1. Style Master setup.

With expanding features, the program name changed to Style Optimizer and finally to Style Master. This article describes a new program feature that removes a major limitation of style files.

Standard styles are cast in concrete. You can choose from a maximum of four main loops, three introductions, three endings and six fill measures, all similar in content. On most instruments, it is impossible to switch styles in the middle of a piece without breaking the flow of the music. In this case, what do you do if a style has nice Main loops but a lame Intro or Ending? Or how can you play a medley? The latest version of Style Master offers a solution. With it, you can assemble a composite style with sections you add from different styles. In other words, the style could include Main sections for four different styles and three independent intro/ending choices.

To be realistic, the creation of a composite style takes some planning and effort. I’ll go through the procedure so you can decide if it’s a feature you can use. I’ll assume you have a basic knowledge of the style format. For the example, I picked two source styles that differed widely in style and instrumentation — one designated KarachiDance (KarachiDance_120_4-4_ps.sty) and the other BachPrelude (BachPrelude_80_4-4_ps.sty).

Step 1. Load the files in Style Master and save them with the options shown in Fig. 1. The files should be saved in a working directory — we’ll call it c:\temp. The program generates a file in PureStyle format. The options have the following effects:

  • General MIDI compliant Only GM commands are included, no XG specifications. This creates a file that may be distributed and then optimized for individual keyboards.
  • Tempo clear. Remove any tempo change messages that may occur in the sections (e.g., ritardandos in Endings). In this case, the sections will play correctly if the baseline tempo of the style is changed.
  • Keyboard compatible. Add dummy information so that the style will work when loaded on a Yamaha keyboard. This directive is not necessary for use in software like the Accompaniment Machine.
  • Percussion channel compress. This directive moves any percussion events from Channel 08h to Channel 09h. This is necessary if you are playing the style on a computer using a soundfont.
  • Include section voices. Check this if you want different instrumentation for different sections. Otherwise, the standard instrument selection is recorded in the SInt section of the file and is applied to all sections. In the example, I’ll illustrate how the sound of style sections can differ markedly.

Step 2. Make two sub-directories in the working directory to hold the MIDI file sets created from the style sections, c:\temp\Karachi and c:\temp\bach. Create a third directory for the combined style, c:\temp\backinkarachi.

File structure for making a combination style

Figure 2. File structure for making a combination style.

Step 3. Reload each source style in Style Master, click Export and choose the appropriate sub-directory. Figure 2 shows the contents of the directories. The program creates one standard MIDI file per section of the source style. (Note: it’s coincidental that the two styles in Fig. 2 have the same set of sections.)

Step 4. Preview the source styles in Style Master to determine which ones you want to keep. Copy these to the combined directory. You may need to change some names to avoid overlap. A map like this is helpful:

MainA --> MainA
MainB --> MainB
EndingA --> EndingA
IntroA --> IntroA
FillAA --> FillAA
FillCC --> FillAB

MainA --> MainC
MainC --> MainD
IntroB --> IntroB
IntroC --> IntroC
EndingB --> EndingB
EndingC --> EndingC
FIllAA --> FillBB
FillBB --> FillBA
FillBA --> FillCC
FillDD --> FillDD

Step 5. Click the Import button in Style Master and point to the directory c:\temp\backinkarachi. The program immediately loads the represented sections and builds a style. Many background operations occur to ensure that the different sections play at a consistent tempo.

Step 6. At this point, you can try out the style sections and save the combined PureStyle file. The combination technique has been tested on the Accompaniment Machine, and the resulting file should be compatible with any Yamaha keyboard. If you would like to make a test on your hardware, this zip file contains the original and combined styles: Download style demo.

There are some limitations. Changes of instrumentation made in Style Master affect only the standard voices messages recorded in the SInt section. In creating a combined style, the standard voices are determined when importing the MainA section. Changes made in Style Master do not affect voice messages that occur in individual sections. Therefore, you should make any desired changes to the source style channel voices before exporting them. Finally, the current versions of Style Master and the Accompaniment Machine require that the source styles have the same time signature. Future versions will address this issue.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at

Replace Mac Launchpad

LaunchPad on the Mac is an attempt to replicate the main screen in Windows — an area filled with icons to launch installed programs (shortcuts in Windows parlance). There is one big difference. In Windows, users can add or remove shortcuts. In macOS, the process is performed automatically — users are prevented from making any changes. This follows from the general Apple philosophy:

  1. Users are incapable of effort.
  2. The company knows best how everything should be set up.

This approach might be tenable if LaunchPad worked correctly. After installing several programs, it became apparent to me that LaunchPad was not reflecting the current content of the Applications folder. Some programs were not represented by icons no matter how many times I reinstalled them. Furthermore, icons remained even after I dragged the apps to the Trash bin. I made an Internet search and turned up hundreds of entries where people complained about the inability to add to and remove programs in LaunchPad. There were many suggested solutions (e.g., drag the program icon from Finder to the LaunchPad icon on the Dock, reinitialize the system,…). I tried them all with no success. I suspect the solutions worked in some past version of macOS (Heroic Marmot 7.56), but were sandbagged by Apple engineers for reasons unknown.

Fortunately, KBD Infinity offers an effective solution with more power and reliability than LaunchPad. We have recently ported Computer Task Organizer to the Mac. The full-functioned program is distributed at no charge — it includes no advertisements and sends no information to the Internet. Users who would thoroughly enjoy the program meet two criteria:

  1. They are willing to spend a few seconds to add and remove entries.
  2. They are open to the concept that it is easier to pick out a item from an alphabetized list of titles as opposed to staring at a screen full of icons.

Beside user control, Computer Task Organizer offers two advantages over LaunchPad:

  • CTO can perform a variety of operations besides simply launching programs. The key is that a document as well as a program can be associated with a task. This means that you can do things like open a spreadsheet, connect to an FTP site, open a reference work,…
  • Tasks can be grouped in categories — you can switch between them with simple button clicks. In contrast, items in LaunchPad must be organized by dragging icons back and forth between screens. Changing between screens involves either sweeping with the mouse or clicking microscopic buttons. Furthermore, there is no option to title the screens.

For those of you bold enough to eschew the cutting edge, here is a brief description of CTO.

Screenshot of CTO as a program launcher

Figure 1. Screenshot of CTO as a program launcher.

Figure 1 shows a screenshot of a CTO category I created named Applications. Here, the program performs the same function as LaunchPad. I use the category to run less-commonly used programs that I have not included in the Dock. Note that there are no documents associated with the entries. To run a program, you simply click the blue button on the left. Adding a program is easy. Click New entry, edit the task name and then click on the Task program cell. CTO opens a navigation window where you can find the app (usually, in the Applications folder).

Screenshot of CTO as a task organizer

Figure 2. Screenshot of CTO as a task organizer.

Figure 2 illustrates a function that cannot be performed by LaunchPad. I wanted quick access to all our PDF instruction manuals. In this case, the application (Preview) is always the same. A quick way to make a new entry is to copy-and-paste an existing row and then change the task name and target document.

You can also define tasks to automatically open FTP or web sites. I’ll discuss this topic in the next article. Use this link to download Computer Task Organizer. Here is a link to check out the instruction manual.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at


Most Yamaha-format accompaniment styles for keyboards include multiple introductory sections (IntroA, IntroB, IntroC). The loose convention is that IntroA is relatively simple and starts with a measure of downbeats. This presents a problem if you want to use the introduction in a performance. Furthermore, the downbeat is unnecessary in the Accompaniment Machine — the program includes a visual beat indicator. Here’s a quick way to silence the taps when you’re in the AutoSequence mode of the Accompaniment Machine:

 -4 0 IntroA
 -4 0 StyleVolume 0.00
 -4 0 G
 -3 0 StyleVolume 1.00
  1 0 MainA

The command sequence drops the volume to zero through one measure of the five measure introduction. In performance, you need to remember that there will be a measure of silence after you start the accompaniment.

A cleaner solution is to modify the style to eliminate the measure. I’ll go through the steps in this article. We’ll see how to use the Export and Import functions of Style Master and how to set up automatic program launching in MIDI File Organizer. Then, we’ll review some techniques for the useful Speedy MIDI utility.


Step 1. Use MIDI File Organizer (or another file management program) to set up a work environment. Figure 1 shows an example. The working directory, C:\TEMP, contains a subdirectory to hold individual sections of the style.

Set up a directory to hold the individual style sections.

Figure 1. Set up a directory to hold the individual style sections.


Step 2. Run Style Master and load the style (Figure 2). If you preview IntroA, here’s what it sounds like:

It’s a nice introduction to the song if we can eliminate the downbeat. Click the Export button, navigate to the directory C:\TEMP\SmallHotel and click OK. Style Master breaks the style into the individual MIDI sections (right-hand window of Fig. 1).

Style Master with the sample style loaded

Figure 2. Style Master with the sample style loaded.

Step 3. Speedy MIDI is an essential freeware program to install if you do any work with MIDI files. You can download the program at Over the years, I have tried at least ten different MIDI editors and digital workstations. There is no perfect solution. Here are the pros and cons of Speedy MIDI:


  1. It has by far the best display of the structure of MIDI files of any available program.
  2. It does the things it does simply and logically. These things include changing the MIDI file structure (e.g., remove tracks, remove measures,…), set the MIDI channel voices, listen to file, make global changes like transpositions,…


  1. Speedy MIDI was not designed for composing or musical editing. You can’t modify individual notes. MuseScore ( is a good option for creating or modifying the musical content of MIDI files.
  2. There are no instructions, neither a manual nor even a help file.

In light of the later, I will go over the Speedy MIDI operations for this simple example in detail.


Step 4. Speedy MIDI has another drawback — when you want to open a new file, the load dialog always starts in a default directory rather than the last place you were working. This problem is easily rectified with MIDI File Organizer. In the Settings window, you can define a tool to launch a highlighted file automatically in Speedy MIDI. Figure 3 shows the setup for Speedy MIDI and MuseScore. Now, you can highlight a file in either navigation window of MIDI File Organizer and then right-click and choose the Speedy MIDI tool. The file is immediately available in the program. Use this method to open IntroA.mid in C:\TEMP\SMALLHOTEL.

Settings window of MIDI File Organizer

Figure 3. Settings window of MIDI File Organizer showing a tool to launch a file in Speedy MIDI.


Step 5. In Speedy MIDI, press Control-F to display all tracks (Fig. 4). In this case, each track corresponds to a MIDI channel. There are no additional tracks (e.g., lyrics) because Style Master exports Type 0 files with only musical information. Click the green arrow in the toolbar at the top if you want to listen to the section content. An inspection of Fig. 4 shows that the downbeat occurs in the style percussion channel (09h). There is no musical information in the other channels, so we can simply eliminate the first measure. Click in the measure box above the first track to highlight the measure in all tracks (Figure 5). Then press Control-Delete to remove it. Save the file.

Speedy MIDI display with IntroA of the style loaded

Figure 4. Speedy MIDI display with IntroA of the style loaded.

Speedy MIDI with the first measure highlighted

Figure 5. Speedy MIDI with the first measure highlighted.


Step 6. If we inspect the modified IntroA.mid with MIDI Microscope, we find that Speedy MIDI has saved the information to a Type 1 MIDI file with individual tracks for each MIDI channel. This brings up a general issue of MIDI editors. Because musical data allows many interpretations, editors always seem to do something that you don’t want. In this case, there is no problem because Style Master automatically converts the information to the required Type 0 format on import. Click the Import button in Style Master, choose the directory C:\TEMP\SMALLHOTEL\ and click OK. The section files are reloaded, reformatted if necessary and organized. Now when you preview IntroA, the downbeat is gone. The final step is to save the modified style.

I’ll discuss other Speedy MIDI operations in future articles. In the meantime, the program logic is straightforward and you can discover most capabilities by experimenting with test files.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at

Creating and editing keyboard styles

Styles are the automatic accompaniments on digital keyboards from Yamaha, Roland, Korg and other manufacturers. They can create the sound of a backup group, turning a simple melody into a performance piece. Style files in Yamaha format are the most common. Thousands of styles in every genre are available for download on the Internet.

The content of standard Yamaha-format style files is poorly documented, cumbersome and arcane. One consequence is that the same styles may appear in individual versions for specific keyboards, leading to considerable redundancy. Another problem is that styles for high-end keyboards like Tyros may be sandbagged with hidden information giving a poor sound on ordinary keyboards.

We have taken two steps to make style files an open, standardized medium of information exchange. The first is the creation of the PureStyle format described in this reference. With the elimination of unnecessary information, PureStyle files contain only MIDI messages that follow simple organization rules. The styles are compatible with all Yamaha keyboards and performance software like the Accompaniment Machine. Extensive libraries of PureStyle files are available on our site.

The second step is the addition of new features to our Style Master program. With the software, you can now edit or create Yamaha-format styles using any MIDI editor or digital workstation. The problem we addressed is that most MIDI editors cannot directly edit styles. They make changes to the structure of the file and do not preserve the correct order of marker messages used to identify style sections. For example, many editors divide MIDI channels (instruments) into individual tracks when loading and save files in Type 1 format. Style Master uses the following solution:

  • On export, the program saves each section (e.g., MainA, EndingB,…) of the currently-loaded style as an individual standard MIDI file in a working directory.
  • On import, Style Customizer searches the working directory for section files, converts them to Type 0 format and then loads them in correct order, adding marker messages as needed. The resulting data may then be saved in PureStyle format using any of the filters available in Style Master .

The conversion of a style into an organized set of MIDI files has additional applications. For example, style sections may be imported into sequencers. Section 6 of the Style Master instruction manual gives a complete description of the capability.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at

Menu bars in Xojo applications

Menu bars appear near the top of most applications. They consist of menus (e.g., File, Edit, Help,…), each containing several action options (e.g., Load, Save, Quit,...) that appear when you click the menu. Oddly, I found it difficult to locate guidelines for implementing this basic feature in either the Xojo documentation, examples supplied with the package or Internet forums. I found many discussions of advanced features but nothing on how to make a simple setup. I solved it eventually, but there were several features that were non-intuitive. For my own information and to save others needless effort, I’ll document the operations in this article.

I’ll limit this discussion to building menu bars and assigning properties in the App design phase (that is, static menus). I won’t cover dynamic menus (i.e., those that depend on the current state of the user’s computer) and contextual menus (i.e., right-click). These are covered fairly well in the Xojo Language Reference entries for MenuBar and MenuItem.

Step 1. In your project, add a menu bar. Click Insert and choose Menu Bar. You can add and customize multiple bars. Each bar can be used in one or more windows. For a simple app with one window, the single bar is typically called MainMenuBar.

Step 2. If you have multiple windows with multiple menu bars, you can set which window uses which bar (or whether a window has no menu bar). Highlight the window and view the properties with Inspector (Figure 1). The option to choose a menu bar appears at the bottom.

Connect a menu bar with a window

Figure 1. Connect a menu bar with a window.

Step 3. Important definitions. A Menu contains one or more MenuItems. Actions are associated with MenuItems. One or more Menus appear across the menu bar. Clicking on a Menu displays its set of Menu Items in a dropdown. A Menu Item may be converted to a Menu to display a SubMenu of MenuItems (generally, off to the side).

Step 4. When you highlight a menu bar, the central section if the IDE changes to a menu bar editor, as shown in Figure 2. Menu bars are created with two default menus: File and Edit with a set of default selections. To remove them, highlight them and press the Delete key. Note that you need to click twice to highlight a menu — the first click highlights the Menu Name.

Menu bar editor

Figure 2. Menu bar editor.

Step 5. Build the menu using the tools above the display area. The tools (left to right) have the following functions.

a) Create a new Menu in the MenuBar.
b) Create a new MenuItem in the highlighted Menu.
c) Add a separator line to the Menu.
d) Create a new SubMenu in the Menu.
e) Convert an existing MenuItem to a Menu to support a new SubMenu.

Within a Menu, you can change the order of MenuItems by dragging them.

Step 6. Highlight a Menu Item to display its properties in Inspector.

a) The Name is important because it will be used to connect with the associated menu action.
b) You can liven the appearance by displaying on icon on the command line.
c) You can add a keyboard shortcut. For example, to invoke the menu command with Control-G, activate MenuModifier and enter the letter G.
d) There is also a button the convert the MenuItem to a Menu (the same function as Tool e).

Step 7. If you run the program at this point, all the menu entries are inactive. They will become active only when they are connected with actions. The actions may apply in all windows that use the Menu Bar, or you may set things up so that different actions occur in different windows. To set up global actions, highlight the App, click Insert and choose Menu Handler. An entry called Menu Handlers will be added as a category of App contents (joining such categories as Constants, Event Handlers,…). To set window specific actions, highlight the target window and add a Menu Handler. Here is the non-evident part. To add a Menu Item, highlight Menu Handlers and again insert a Menu Handler. The IDE actually creates a MenuItem. Highlight it. In the Inspector on the right hand side, supply the Menu Item Name to correspond to the name of one of the Menu Items in the Menu Bar. You can then type in the action in the central edit area. When you click the MenuItem in the Menu Bar, the action is executed.

Here’s a link to a simple sample project: Xojo Menu Test Project.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at

New features in MIDI Doctor

MIDI Doctor (Fig. 1) is a versatile tool to fix or to customize MIDI files. With it, you can adjust the volume and instrumentation of MIDI channels, transpose the key, modify the tempo, remove channels and perform several other operations. Recently, we’ve added powerful new capabilities. One improvement is a display of the exact temporal position in the file during playback (lower arrow in Fig. 1). This is a useful feature when excerpting sections (discussed below). We’ve also added the feature to MIDI Microscope, MiniMIDI player and MIDI File Organizer.

MIDI Doctor, main window

Figure 1. MIDI Doctor, main window.

A new Global settings button brings up the dialog shown in Fig. 2. There are three operations: 1) adjust the dynamic range, 2) adjust the play duration and 3) make an excerpt. The operations are global in the sense that they change the entire file.

MIDI Doctor, global settings dialog

Figure 2. MIDI Doctor, global settings dialog.

Dynamic range

There are many differences between western art music (i.e., classical) and popular music. One of them is that classical music gets soft and loud while popular music proceeds at a fairly uniform volume level. I was sharply reminded of this when I hoped to relax in the evening by listening to a MIDI file of Rachmaninoff’s Rhapsody on a Theme by Paganini. It was a great file except that the arranger had gone overboard with the dynamics. It ranged from inaudible to painful, and I was constantly clicking the volume control on my headphones.

In response, I added a method to compress or to expand the dynamic range of MIDI files. When the Global settings dialog opens, MIDI Doctor computes the minimum, maximum and average velocity values of all NoteOn messages with non-zero velocity. You can set new values in the boxes. The choices allow you to change the average volume or to compress/expand the low and high volume ranges individually. Click the Apply button to change all velocity values in the file. Be sure to save the modified file with a different name. There are many possible applications of this tool, including converting classical music to easy listening. Here are examples of effect that you can download: Original file with high dynamic range. Modified file with compressed dynamic range.

Play duration

One of the advantages of working with MIDI is that you can change the tempo of a piece without affecting the pitch. With this tool, you can set an exact duration for the file playback. One application — suppose you’re creating a video and need background music that ends exactly at the last fade. When the dialog opens, MIDI Doctor shows the current file duration in minutes and seconds. Simply fill in the desired values, click the Apply button and save the modified file.

Make excerpt

Use this tool is you want to make a demo or to pull out a favorite section. The end result is a modified file that only plays the specified interval. When the dialog opens, the Start and End values are set to the beginning and end of the file. Narrow the range to make an excerpt by changing the times. You can use the time display in the main window to determine values.

You may notice that when you save the excerpted file, it has the same length as the original file. This is because it’s tricky to cut out a piece of a MIDI file. The state of the synthesizer at any time depends on the sequence of all preceding MIDI messages. If you simply cut out a set of messages, you may wind up with a hanging note that plays to infinity. The solution I used in MIDI Doctor was to include all messages in the file, but to adjust those before the excerpt so they play at t = 0 with the velocity of NoteOn messages set to zero. The message time within the excerpt is adjusted to (t – TStart). Messages after the excerpt are all sent at (TEnd – TStart) and NoteOn message have zero velocity.


[1] MIDI Doctor users — to update, download and run the installer at download_software.html. The program will be replaced with affecting your license activation.

[2] Find out more about KBD-Infinity: Home page.

[3] If you have comments or questions, please contact us at

Running AMac on a Windows tablet

In the past, there were limited choices of tablet computers running Microsoft Windows, generally in the price range $700 and up. Now, you can get models for less than $100. A user recently asked whether the Accompaniment Machine will run on a small Windows tablet, so I decided to check it out.

As of April, 2018, there are two low-price choices on Amazon: the Nuvison 8″ at about $70 and the RCA Cambio 10″ at about $100. Besides the larger screen, the RCA device includes a detachable keyboard, a built-in stand and a real USB port to supplement the standard micro port. This was a major decision point for me because of the need to attach a keyboard. True, you can buy an OTG USB hub for the smaller tablet, but it’s not possible to charge the tablet and use the USB functions at the same time.

I purchased the RCA tablet and also a utility kit that included a USB hub, wireless mouse and HDMI cable. Figure 1 shows the RCA tablet (with keyboard detached) running AMac in Windows 10. The hub attached on the left accommodates the mouse adapter, the keyboard connection and a USB stick with MIDI files. Installation of the Yamaha keyboard driver was no more difficult than on any Windows computer.

Accompaniment Machine on a tablet computer

Figure 1. The Accompaniment Machine running on an RCA Cambio tablet driving a Yamaha keyboard.

The Accompaniment Machine is ideally suited to this type of computing environment. It was designed to make efficient use of CPU resources as well as screen area. We have run the program successfully on an old Windows NT HP Netbook, so there are no problems on this relatively powerful machine. The program display fits nicely on the tablet (1280 x 800 resolution). From the beginning, AMac featured control by screen buttons rather than menus. This means that you can invoke all performance functions by single touches without the need to navigate menus or raise the popup keyboard. Alternatively, the program can be controlled with the wireless mouse. The tablet runs all of our software, including Pancho.

The RCA tablet provides extraordinary functionality for the price. It’s a nice choice for a portable performance vehicle, and it wouldn’t be a financial tragedy if it got rained on or lost. In addition to music applications, I plan to use it as a business computer for travel. It can run all my standard applications (e.g., OpenOffice). With the addition of a $20 micro SD card, you can raise the built-in storage to 96 GB.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at

Installing KBD-Infinity programs using Windows or macOS

Program installation is quite simple. In Windows, use the Download link to retrieve the executable installer. Typically, you would save the file in your Download folder or on the Desktop. In Windows Explorer or other file manager, double-click on the installer icon. The operating system may ask for permission to proceed. Windows 10 may issue the message:

Windows protected your PC
Windows Defender SmartScreen prevented an unrecognized app from
starting. Running this app might put your PC at risk.
More info

Despite the tone, it simply means that the program is not registered on the Microsoft Store. Click on More info to proceed. The program, instruction manual and examples are automatically copied to the correct locations. The installer also makes a shortcut on the Desktop. Double-click on the shortcut to run the program. Press F1 to open the instruction manual.

For the macOS, when you click the Download button a file ProgName.dmg is copied to your Download folder. Open Finder and navigate to the Applications folder. Then, open the Download folder and double click on ProgName.dmg. The compressed disk image is opened and a new Finder window shows the contents, a single folder with the name ProgName. To complete the installation, drag the program folder to the Applications folder. The program folder contains the app, the instruction manual and possibly other documents. After you run the program, the folder will also contain the configuration file which records program features and settings (e.g., the position of the program window).

An icon for the program may or may not appear in Launchpad. When you start the program, the Mac may issue a message like:

“MIDIDoctor” can’t be opened because it is from an unidentified developer. Your security preferences allow installation of only apps from the App Store and identified developers.

To continue, you will need to click System preferences/Security and privacy  Click OK in the previous warning dialog. The option to approve the program appears in the security dialog. Thereafter, the program runs like any other Mac software. To deinstall the package, simply drag the folder ProgName to the trash bin.

Two general usage tips for Mac users:

1) Finder does not include a button to go up one folder in the tree, which makes navigation problematic. For this function, use Command-UpArrow.

2) For compatibility with Windows, our programs make extensive use of mouse right-clicks. New Macs are supplied with a stylish monolith that appears to be a one-button mouse. Actually, it is a disguised two-button mouse with scroll wheel. To realize the full capabilities, go to System preference/Mouse. Uncheck Scroll direction: Natural, which is totally unnatural for Windows users. Check Secondary click/Click on right side to activate two-button performance. If this doesn’t work, note that you can plug any standard two-button mouse into the Mac to get full capabilities.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at

New features in MiniMIDI Player

MiniMIDI Player (Figure 1), a component of the MIDI Utility Pack, is a compact program to play MIDI files. It provides a quick method to preview files and to determine their properties. We recently added some features to enhance its utility.

Screenshot of MiniMIDI Player

Figure 1. Screenshot of MiniMIDI Player

MiniMIDI Player can be used as a standard interactive program in a window. It can also be launched from the command line with the target file as the pass parameter. If MiniMIDI Player is defined as the Windows default program for the extension MID, it will launch when you double-click a MIDI file in Windows Explorer or other file manager. It also responds if you click on a link to MIDI file on the Internet in a browser. By default, in command-line mode the program closes after playing the file. If you want to repeat the play or load another file, click either the Play/Stop or Pause/Resume button. In this case, MiniMIDI Player exits command-line mode and stays active until you click the Exit button.

In addition to the MIDI file type and number of tracks, the program now displays the exact play duration in minutes and seconds including effects of tempo changes. Finally, we reduced the program footprint so it occupies minimal space on your desktop.


[1] Find out more about KBD-Infinity: Home page.

[2] If you have comments or questions, please contact us at