# Virtual MIDI Piano Keyboard

- Introductie
- Hoe te beginnen
  - MIDI-concepten
  - Toetsenbordtoewijzingen en instrumentdefinities
  - MIDI-verbindingen en virtuele MIDI-kabels
- Veelgestelde vragen
- Downloaden
- Installatie vanuit de sourcecode
  - Benodigdheden
  - Opmerkingen voor windowsgebruikers
  - Opmerkingen voor Mac OSX-gebruikers
  - Opmerkingen voor geavanceerde gebruikers en samenstellers van packages
- Dankwoord

## Introductie

Virtual MIDI Piano Keyboard is een MIDI-eventgenerator en -ontvanger. Het programma produceert zelf geen geluid, maar kan worden gebruikt om een MIDI-synthesizer aan te sturen (zowel hardware als software, intern of extern). U kunt het computertoetsenbord en/of de muis gebruiken om MIDI-noten te spelen. Daarnaast kunt u VMPK gebruiken om MIDI-noten weer te geven die worden afgespeeld door een ander instrument of door een programma om MIDI-bestanden af te spelen. Maak, om dat te doen een verbinding van de andere MIDI-poort naar de ingangspoort van VMPK.

VMPK is getest in Linux, Windows en Mac OSX; mogelijk kan het ook worden gecompileerd op andere systemen. In dat geval stelt de auteur het zeer op prijs als u hem op de hoogte stelt.

Het virtuele keyboard door Takashi Iway (VKeybd) is de inspiratie geweest voor dit virtuele keyboard. Het is een wonderbaarlijk programma en heeft vele jaren goede diensten bewezen. Erg bedankt!

VMPK gebruikt Qt4, een modern GUI-framework dat erg veel mogelijkheden en hoge performance biedt. RtMIDI biedt daarnaast MIDI-input/-outputmogelijkheden. Beide frameworks zijn open source en platformonafhankelijk, beschikbaar voor Linux, Windows en Mac OSX.

De alfanumerieke toetsenbordtoewijzing kan worden geconfigureerd via de GUI van het programma, de instellingen worden opgeslagen in XML-bestanden. Voor een aantal toetsenbordindelingen (Spaans, Duits en Frans) zijn al toewijzingen aanwezig, deze zijn aangepast vanuit de indelingen in VKeybd.

VMPK kan programma- en controllerchanges naar een MIDI-synthesizer sturen. De definities voor verschillende standaarden en apparaten kunnen worden aangeboden als .INS-bestanden, het formaat dat ook wordt gebruikt door QTractor en TSE3. Het is ontwikkeld door Cakewalk en wordt ook gebruikt in Sonar.

Deze software bevindt zich in een vroeg alfastadium. Zie het TODO-bestand voor een lijst van mogelijkheden die nog zullen worden toegevoegd. Aarzel niet om contact op te nemen met de auteur als u vragen hebt, een bug wilt rapporteren, of nieuwe mogelijkheden wilt aandragen. U kunt het trackingsysteem op de SourceForge projectwebsite gebruiken.

Copyright (C) 2008-2013, Pedro Lopez-Cabanillas <plcl AT users.sourceforge.net>

Virtual MIDI Piano Keyboard is vrije software gelicenseerd onder de voorwaarden van de GPL v3-licentie.
Een onofficiële vertaling van de GPL v3-licentie is op deze website te vinden.

## Hoe te beginnen

### MIDI-concepten

MIDI is een industriestandaard om muziekinstrumenten met elkaar te verbinden. De werking berust op het versturen van de gebeurtenissen op het ene instrument naar een ander instrument, waarbij het eerste wordt bespeeld door een muzikant. Gewoonlijk hebben muziekinstrumenten met een MIDI-interface twee DIN-poorten genaamd 'MIDI IN' en 'MIDI OUT'. Soms is er een derde poort met de naam 'MIDI THRU'. Om een MIDI-instrument met een ander te verbinden, moet een MIDI-kabel verbonden zijn met de MIDI OUT van het verzendende instrument en met de MIDI IN van het ontvangende instrument. Meer informatie en tutorials zoals deze zijn overal op het Internet te vinden.

Voor computers bestaan ook hardware-MIDI-interfaces met MIDI IN- en MIDI OUT-poorten, waardoor de computer met behulp van MIDI-kabels kan communiceren met externe MIDI-instrumenten. Echter, ook zonder hardware-interfaces nodig te hebben kan de computer MIDI-software gebruiken. Neem VMPK als voorbeeld: het stelt MIDI IN- en MIDI OUT-poorten ter beschikking waarmee het met behulp van virtuele MIDI-kabels kan worden verbonden met andere programma's of met fysieke MIDI-interfacepoorten. Verdere details hierover volgen nog.
Gewoonlijk wordt de MIDI-output van VMPK verbonden met de input van een synthesizer die geluid genereert op basis van MIDI. Een ander veelgebruikt eindpunt van de verbinding is een MIDI-monitor die MIDI-events omzet in leesbare tekst. Dit is handig om te zien wat voor informatie er wordt verzonden via het protocol. In Linux is KMidimon het proberen waard en in Windows MIDIOX.

VMPK produceert geen geluid, om de gespeelde noten te kunnen horen is er een MIDI-synthesizer nodig. Ik raad aan om QSynth te proberen, een grafisch front-end voor Fluidsynth. Het is ook mogelijk om de "Microsoft GS Wavetable SW Synth" te gebruiken die in Windows XP is ingebouwd. Een externe MIDI hardwaresynthesizer is natuurlijk een nog betere aanpak.

### Toetsenbordtoewijzingen en instrumentdefinities

VMPK kan helpen om van instrument te veranderen in een MIDI-synthesizer, maar heeft daar wel een definitie van de synthesizergeluiden voor nodig. De definities zijn tekstbestanden met de .INS-extensie, en gebruiken hetzelfde formaat dat wordt gebruikt door Qtractor (Linux) en Sonar (Windows).

Wanneer u VMPK voor het eerst gebruikt, opent u dan de dialoog Voorkeuren, laad een definitiebestand en kies dan een van de instrumentnamen die vanuit het definitiebestand zijn geladen. Er is een bestand met de naam "gmgsxg.ins" geïnstalleerd in de data-directory van VMPK (gewoonlijk "/usr/share/vmpk" in Linux en "C:\Program Files\VMPK" in Windows). Dit bestand bevat definities voor de General MIDI-, Roland GS- en Yamaha XG-standaarden. Het is een eenvoudig formaat, u kunt een willekeurige teksteditor gebruiken om het te bekijken, aan te passen, of een nieuw bestand te maken. Een bibliotheek van instrumentdefinities is te vinden op de Cakewalk FTP-server.

Sinds de 0.2.5-release is het mogelijk om SoundFontbestanden (in .SF2- of DLS-formaat) te importeren als instrumentdefinities, door middel van het menu Bestand->Importeer SoundFont.

Andere instellingen die u mogelijk wilt aanpassen zijn de toetsenbordtoewijzingen. De standaardlayouts wijzen ongeveer tweeënhalf octaaf toe aan het QWERTY-alfanumerieke toetsenbord; er zijn meer definities in de data-directory aanwezig die zijn aangepast voor andere internationale layouts. Daarnaast kunt u uw eigen toewijzingen definiëren met behulp van de dialoog in het menu Bewerken->Toetsenbordtoewijzingen. Ook bestaat de mogelijkheid om de toewijzingen te laden uit en op te slaan als XML-bestanden.
De laatst geladen toewijzing wordt onthouden voor de volgende keer dat het programma wordt gestart. Sterker nog, al uw voorkeuren, geselecteerde MIDI-bank en -programma en controllerwaarden worden opgeslagen tijdens het afsluiten van het programma, en hersteld wanneer VMPK de volgende keer weer wordt gestart.

### MIDI-verbindingen en virtuele MIDI-kabels

Om hardware-MIDI-apparaten te verbinden zijn fysieke MIDI-kabels nodig. Zo zijn er ook virtuele kabels nodig om MIDI-software te verbinden. In Windows kunt u gebruik maken van een aantal verschillende programma's voor virtuele MIDI-kabels, zoals: MIDI Yoke, Maple, LoopBe1 of Sony Virtual MIDI Router.

De MIDI Yoke-setup installeert een driver en voegt een item toe aan het configuratiescherm waarmee het aantal beschikbare MIDI-poorten kan worden ingesteld (na het aanpassen van deze instelling moet de computer opnieuw worden gestart). MIDI Yoke stuurt ieder MIDI-event dat naar een OUT-poort wordt geschreven door naar de corresponderende IN-poort. VMPK kan bijvoorbeeld zijn uitgang verbinden met poort 1, waarna een ander programma zoals QSynth de verzonden events kan uitlezen op die poort.

Door middel van MIDIOX kunnen er meer routes worden toegevoegd tussen MIDI Yoke- en systeem-MIDI-poorten. Dit programma beschikt ook over andere interessante functionaliteit, zoals het afspelen van MIDI-bestanden. U kunt luisteren naar de muziek die wordt afgespeeld door een MIDI-synthesizer en tegelijkertijd in VMPK de afgespeelde noten zien (slechts één kanaal tegelijkertijd). U kunt dit doen door in het "Routes"-venster van MIDIOX een verbinding te maken tussen ingangspoort 1 en de Windows-synthesizerpoort. Configureer daarnaast de MIDI-poort van het afspeelprogramma om zijn MIDI-data naar poort 1 te sturen en stel tenslotte de ingangspoort van VMPK in om te lezen vanaf MIDI Yoke-poort 1. Het afspeelprogramma zal nu zijn events naar uitgangspoort 1 sturen, waar ze zowel naar de ingangspoort 1 als naar de synthesizerpoort verstuurd zullen worden.

In Linux is er de ALSA-sequencer om voor virtuele kabels te zorgen. De poorten worden dynamisch gecreërd wanneer u een programma start, er is dus geen vast aantal zoals in MIDI Yoke. Met het command-line-programma "aconnect" kunt u verbindingen tussen poorten maken en verbreken, of het nu applicaties of hardware interfaces zijn. Een handige GUI-applicatie om datzelfde te doen is QJackCtl. Het hoofddoel van dit programma is het aansturen van de Jack-daemon (starten, stoppen en inspecteren van de huidige staat). Jack stelt virtuele audiokabels beschikbaar om poorten van de geluidskaart met audiosoftware te verbinden, dus net zoals de virtuele MIDI-kabels, maar in plaats daarvan voor digitale audio.

## Veelgestelde vragen

### Hoe kan ik 88 toetsen weergeven?

Het getal 88 is een willekeurig gekozen aantal dat door de meeste moderne pianofabrikanten wordt gebruikt, maar orgel- en synthesizerfabrikanten volgen deze conventie niet altijd.
VMPK kan worden geconfigureerd om tussen de een en tien octaven weer te geven. Met zeven octaven worden 84 toetsen weergegeven en met acht octaven zijn dat er 98. Het is niet mogelijk om precies zeven en een kwart octaven weer te geven.

### Er is geen geluid hoorbaar

VMPK produceert zelf geen geluid. U hebt een MIDI-synthesizer nodig, zoals duidelijk in de documentatie vermeld.

### Sommige toetsen geven geen geluid

Wanneer u op een standaard MIDI-synthesizer kanaal 10 selecteert, zijn percussiegeluiden gekoppeld aan een groot deel van de toetsen, maar niet aan alle. Op melodische kanalen (alle behalve 10) kunt u een patch geselecteerd hebben met een beperkt notenbereik. In de muziek is dit bekend onder de naam omvang of tessituur.

### De optie om het toetsenbord over te nemen werkt niet

Dit is een bekend probleem voor Linuxgebruikers. Deze optie werkt goed op KDE3/4-desktops die de standaard KWin-window manager gebruiken. Het werkt ook met Enlightenment en Window Maker, maar niet met de Metacity- en Compiz-window managers, die vaak worden gebruikt in combinatie met Gnome. Verder is het bekend dat het gebruik van deze optie normaal gebruik van dropdown-menu's in GTK2 onmogelijk maakt. Er is geen oplossing bekend voor dit probleem, behalve het ontwijken van de probleemscenario's tijdens het gebruik van de optie.

### Patchnamen komen niet overeen met de daadwerkelijke geluiden

U hebt een .INS-bestand nodig dat precies overeenkomt met de geluiden danwel het SoundFont van uw synthesizer. Het meegeleverde bestand (gmgsxg.ins) bevat alleen definities voor standaard GM-, GS- en XG-instrumenten. Als uw MIDI-synthesizer niet geheel overeenkomt met één van die standaarden hebt u een ander .INS-bestand nodig, of moet u er zelf een maken.

### Syntaxis van de instrumentdefinitiebestanden (.INS)

Eén mogelijke uitleg van het INS-formaat is hier te vinden.

### Kan ik mijn instrumentdefinitie voor vkeybd naar een .INS-bestand converteren?

Natuurlijk, gebruik het AWK-script "txt2ins.awk". U kunt ook het hulpprogramma 'sftovkb' van vkeybd gebruiken om een .INS.bestand te genereren op basis van een SF2-SoundFont. Overigens heeft VMPK ook een functie om instrumentnamen te importeren vanuit SF2- en DLS-bestanden.

    $ sftovkb SF2NAME.sf2 | sort -n -k1,1 -k2,2 > SF2NAME.txt
    $ awk -f txt2ins.awk SF2NAME.txt > SF2NAME.ins

Het AWK-script "txt2ins.awk" is te vinden in de data-directory van VMPK.

## Downloaden

De nieuwste source code, Windows- en Max OSX-packages kunt u vinden op de SourceForge projectwebsite.

Ook zijn direct installeerbare packages beschikbaar voor de volgende Linuxdistributies:

- openSUSE, van de openSUSE Build Service
- Debian, officiële repositories
- Ubuntu From Scratch
- Arch Linux
- Pardus
- Gentoo
- Zenwalk

## Installatie vanuit de sourcecode

Download the sourcecode van http://sourceforge.net/projects/vmpk/files. Pak het bestand uit in uw home-directory en ga naar de directory die nu is aangemaakt.

    $ cd vmpk-x.y.z

Om het systeem te bouwen hebt u de keus tussen CMake en QMake; die laatste is alleen bedoeld voor test- en ontwikkeldoeleinden.

    $ cmake .
    of
    $ ccmake .
    of
    $ qmake

Compileer daarna het programma:

    $ make

Als het programma succesvol is gecompileerd, kunt u het installeren:

    $ sudo make install

### Benodigdheden

Om VMPK succesvol te kunnen bouwen en gebruiken, hebt u Qt 4.6 of nieuwer nodig. (Installeer het '-devel'-package voor uw systeem, of download de opensource-editie van qtsoftware.com, voorheen Trolltech.)

RtMIDI is in de sourcecode opgenomen. Het gebruikt de ALSA-sequencer in Linux, WinMM in windows en CoreMIDI in Mac OSX; deze subsystemen zijn ingebouwde onderdelen van hun respectievelijke platforms.

Het buildsysteem is gebaseerd op CMake.

U hebt ook de GCC C++ compiler nodig. MinGW is daarvan een Windows-port.

Optioneel kunt u een Windowssetup bouwen met behulp van NSIS.

### Opmerkingen voor windowsgebruikers

Om in Windows de sourcecode te kunnen compileren hebt u het .bz2- of het .gz-archief nodig, om dat uit te pakken hebt u een programma nodig dat het formaat ondersteunt, zoals 7-Zip.

Om de sourcecode te configureren hebt u QMake (onderdeel van Qt4) of CMake nodig. De PATH-variabele moet worden ingesteld om de directories te bevatten voor zowel de Qt4-binaries, de MinGW-binaries en de CMake-binaries.

### Opmerkingen voor Mac OSX-gebruikers

Een vooraf gecompileerde applicatiebundel, die ook de Qt4-runtimebibliotheken bevat, is te vinden bij de projectdownloads. Geeft u er de voorkeur aan te installeren vanuit de sourcecode, dan kunt u CMake of Qmake gebruiken om een applicatiebundel te bouwen die gebruik maakt van de geïnstalleerde systeembibliotheken.

Het buildsysteem is geconfigureerd om een zogenaamde universal binary (x86+ppc) te creëren voor de applicatiebundel. U hebt de ontwikkeltools en frameworks van Apple nodig, en daarnaast ook de Qt4-SDK van Nokia.

Om VMPK te compileren door middel van Makefiles gegenereerd door Qmake:

    $ qmake vmpk.pro -spec macx-g++
    $ make
    en optioneel:
    $ macdeployqt build/vmpk.app

Om VMPK te compileren door middel van Makefiles gegenereerd door CMake:

    $ cmake -G "Unix Makefiles" .
    $ make

Om projectbestanden voor Xcode te creëren:

    $ qmake vmpk.pro -spec macx-xcode
    of
    $ cmake -G Xcode .

Hebt u iets nodig om geluid te produceren, kijkt u dan eens naar SimpleSynth, of FluidSynth (beschikbaar in Fink). Voor routing van MIDI bestaat er MIDI Patchbay.

### Opmerkingen voor geavanceerde gebruikers en samenstellers van packages

U kunt de compiler vragen optimalisatie toe te passen tijdens het compileren van het programma. Er zijn twee mogelijkheden om dit te doen. Ten eerste:

    $ cmake . -DCMAKE_BUILD_TYPE=Release

Het CMake "Release"-type gebruikt de compilervlaggen: "-O3 -DNDEBUG". Andere voorgedefinieerde buildtypes zijn "Debug", "RelWithDebInfo" en "MinSizeRel".
De tweede mogelijkheid om te optimaliseren is zelf compilervlaggen te kiezen:

    $ export CXXFLAGS="-O2 -march=native -mtune=native -DNDEBUG"
    $ cmake .

Mochten deze vlaggen niet werken, kiest u dan zelf de goede CXXFLAGS-opties.

Wilt u het programma niet op de standaardlocatie (/usr/local) installeren, gebruik dan de volgende CMake-optie:

    $ cmake . -DCMAKE_INSTALL_PREFIX=/usr

## Dankwoord

Behalve de eerder genoemde software gebruikt VMPK werk van de volgende opensource-projecten:

- van Qtractor, door Rui Nuno Capela
  Classes voor instrumentdefinitiedata
- van QSynth, door Rui Nuno Capela
  Draaiknop-widget
- Pictogram en logo door Theresa Knott

Heel erg bedankt!