Music programming


Playing synthesized chords under Windows

Playing sounds under Windows is surprisingly complicated if you want to implement musical applications that go beyond the playing of simple files. I explain in this PDF article how the Windows sound API can be used to play simultaneously sounds via a single audio device, i.e. how to mix sounds. The article discusses the advantages and drawbacks for two different solutions. You will find the code, exes and some sample WAVE files in this ZIP file. The code uses threads, callback functions and events - it is certainly not for beginners.

How to use the ALSA API

When porting my program HUMidi to Linux/Ubuntu I looked for a simple sample program demonstrating how to play notes via the Linux/Alsa sequencer. To my extreme confusion all sample files I found (like pmidi.c, aplaymidi.c etc.) were extremely complicated. Moreover they all demonstrated bad C-programming style. Many of the sample file and tutorials I found confuse the APIs (OSS, Alsa) and concentrate in the largest part on the analysis of MIDI tracks. The organisation of MIDI files in tracks is not a simple MIDI topic and plays a secondary role (if any!) in the production of audible MIDI events. The applications mentioned in those tutorials (among them JACK, PulseAudio etc) have nothing to do with MIDI (but with sound administration in general).

I therefore wrote this small C Program alsa_midieh.c that concentrates on the essential problem: how to hear MIDI sound under Linux using the Alsa interface. This program simply plays some MIDI notes and a chord using the Alsa API. It doesnt use the queue mechanisms offered by the API. The time problem is handled by simple sleep() calls. The queuing of MIDI events and the timing problem can be solved by application features instead of using the corresponding API features - may be at the cost of loosing time precision. Most of the obscure C language features found in the original ALSA sampleprograms (extended use of global variables, use of "static" at many points etc.) have been eliminated.

An important note for MIDI novices in Linux: Linux has no built-in MIDI player. Normally Timidity or a similar player must be running to hear MIDI events. See the comments in my C program. This simple program is the base for my MIDI C++ classes used in HUMidi and in my upcoming notation editor HUNoteEd.


Music notation formats

With my brother Klaus Huckert I wrote an overview paper (in German) that tries to explain the essential music notation formats that are currently in use. The paper is called "Auf dem Weg zu einem universellen Austauschformat für Musiknotation". You will find here information on formats like ABC, Midi or MusicXML.

An extract from the document on music notation


Copyright for all images, texts and software on this page: Dr. E. Huckert

Contact

If you want to contact me: this is my
mail address