KMid2 is a MIDI/Karaoke player for KDE. 

Developed by Antonio Larrosa more than ten years ago, KMid it is a venerable 
classic deserving some love and a big revamping.

KMid2 is a rewrite from scratch, with a new architecture consisting in that MIDI
sequencing is implemented on pluggable backends. Only the ALSA sequencer backend
(for Linux) is included here, but it should be possible to write native backends
for Windows and Mac OSX in the future. Also, a multiplatform backend based on
FluidSynth would be interesting for casual users, needing only to configure a
SoundFont file and the audio output.

Here are some major features from KMid that have been implemented in KMid2:
* Playback to external hardware MIDI devices.
* Allow to use software synths as well, like Timidity++ and QSynth/FluidSynth.
* Tempo and volume controls.
* Added a pitch (transpose) control.
* Configurable character encodings for lyrics.
* Channel view, with mute and solo controls and instrument selector.
* Player Piano view.

Some changes in this prototype regarding the former KMid are:
* Removed the deprecated OSS /dev/sequencer interface support. It has been 
dropped from OSSv4, anyway.
* Avoid using fork/kill for play/pause/stop actions.
* The new ALSA sequencer implementation doesn't create/destroy the client and
port instances on each play/pause/stop action. This enables the usage of MIDI
patch bay applications like aconnect, kaconnect and qjackctl.

Technical details
-----------------

The KMid::Backend is modelled after several Phonon interfaces. There is not a
dependency on Phonon, only inspiration and C&P. There is a KMid::MIDIObject
abstract class that resembles more or less a Phonon::MediaObject encapsulating
the sequencer functionality, and a KMid::MIDIOutput class that represents a MIDI
output port, similar to Phonon::AudioOutput. Main differences are:
* KMid::MIDIObject time is measured in musical time (ticks) instead of
milliseconds. Additions: timeSkew, textEncoding, lyrics and tempo properties,
and several signals, one for each MIDI event type.
* KMid::MIDIOutput has pitchShift and midiMap properties. Volume and mute
properties take a MIDI channel argument. There are also some MIDI event slots,
one for each MIDI event type.

The ALSA sequencer backend uses a C++/Qt wrapper around the ALSA library
sequencer interface (Drumstick) that is too young to be used as an external
dynamic library, so the sources have been included here and are statically
linked to the ALSA backend.

How To Build KMid2
------------------

cd <project_name_path>
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$KDEDIRS ..  <- do not forget the ".."
make
make install or su -c 'make install'

to uninstall the project:
make uninstall or su -c 'make uninstall'

Note: you can use another build path. Then cd in your build dir and:
export KDE_SRC=path_to_your_src
cmake $KDE_SRC -DCMAKE_INSTALL_PREFIX=$KDEDIR -DCMAKE_BUILD_TYPE=debugfull

Comments?
---------

Please send comments, questions, rants, suggestions, complaints 
to: Pedro Lopez-Cabanillas <plcl@users.sf.net>
