# Virtual MIDI Piano Keyboard

- Introducción
- Primeros pasos
  - Conceptos MIDI
  - Mapas de teclado y definiciones de instrumentos
  - Conexiones MIDI y cables MIDI virtuales
- Preguntas frecuentes
- Descargar
- Instalación desde fuentes
  - Requisitos
  - Notas para usuarios de Windows
  - Notas para usuarios de Mac OSX
  - Notas para empaquetadores y usuarios avanzados
- Agradecimientos

## Introducción

El teclado de piano MIDI virtual (VMPK) es un generador y receptor de eventos MIDI. No produce ningún sonido por si mismo, pero puede ser usado para dirigir un sintetizador MIDI (ya sea hardware o software, interno o externo). Puedes usar el teclado del ordenador para tocar notas MIDI, y también el ratón. Puedes usar el teclado de piano MIDI virtual para mostrar las notas tocadas desde otro instrumento o reproductor de archivos MIDI. Para ello, conecta el otro puerto MIDI al puerto de entrada de VMPK.

VMPK ha sido probado en Linux, Windows y Mac OSX, pero quizá puedas construirlo en otros sistemas. En tal caso, por favor envía un mensaje de correo electrónico al autor.

El teclado virtual de Takashi Iway (vkeybd) ha sido la inspiración de este programa. Es una pieza de software maravillosa que nos ha servido bien durante muchos años. ¡Gracias!

VMPK utiliza un moderno sistema gráfico: Qt5, que proporciona excelentes características y desempeño. Drumstick-rt proporciona las características de entrada y salida MIDI. Ambos sistemas son libres e independientes de la plataforma, disponibles para Linux, Windows y Mac OSX.

El mapa del teclado alfanumérico se puede configurar desde dentro del programa usando el interfaz gráfico de usuario, y los ajustes se almacenan en archivos XML. Se incluyen algunos mapas para las disposiciones de teclados español, alemán y francés, traducidos desde los archivos correspondientes proporcionados por vkeybd.

VMPK puede transmitir cambios de programa y controladores hacia un sintetizador MIDI. Las definiciones para diferentes estándares y dispositivos pueden ser proporcionadas como archivos .INS, el mismo formato utilizado por QTractor y TSE3. Fue desarrollado por Cakewalk y también se usa en Sonar.

Este software está en una fase alfa temprana. El archivo TODO contiene una lista de características pendientes. Por favor, no dudes en contactar con el autor para hacer preguntas, informar de fallos, y proponer nuevas funcionalidades. Puedes usar el sistema de seguimiento en el sitio del proyecto de SourceForge.

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

Virtual MIDI Piano Keyboard es software libre bajo los términos de la licencia GPL v3.

## Primeros pasos

### Conceptos MIDI

MIDI es un estándar industrial para conectar instrumentos musicales. Se basa en la transmisión de las acciones llevadas a cabo por un músico tocando un instrumento hacia otro instrumento diferente. Los instrumentos musicales habilitados con interfaces MIDI suelen tener dos tomas DIN etiquetadas MIDI IN y MIDI OUT. A veces hay un tercer conector etiquetado MIDI THRU. Para conectar un instrumento MIDI a otro, se necesita un cable MIDI conectado a la toma MIDI OUT del instrumento emisor, y al MIDI IN del receptor. Puede encontrar más información y tutoriales como este por toda la red.

También hay interfaces MIDI hardware para ordenadores, proporcionando puertos MIDI IN y MIDI OUT, en los cuales se pueden conectar cables MIDI para comunicar el ordenador con instrumentos MIDI externos. Sin necesidad de interfaces hardware, el ordenador puede usar también software MIDI. Un ejemplo es VMPK, que proporciona puertos MIDI IN y OUT. Puedes conectar cables MIDI virtuales a los puertos de VMPK, para conectar el programa a otros programas o a los puertos MIDI físicos del ordenador. Más detalles de esto más tarde. Normalmente necesitas conectar la salida MIDI de VMPK a la entrada de algún sintetizador, el cual transforma MIDI en sonido. Otro destino habitual de la conexión sería un monitor MIDI que traduce los eventos MIDI en texto legible. Esto es una ayuda para entender la clase de información que se transmite usando el protocolo MIDI. En Linux puedes probar KMidimon y en Windows MIDIOX.

VMPK no produce ningún sonido. Se necesita un sintetizador MIDI para oír las notas ejecutadas. Te recomiendo probar la salida directa a Fluidsynth proporcionada por drumstick-rt. También es posible usar el "Microsoft GS Wavetable SW Synth" que viene con Windows. Por supuesto, un sintetizador externo MIDI sería una aun mejor solución.

### Mapas de teclado y definiciones de instrumentos

VMPK puede ayudarte a cambiar los sonidos en tu sintetizador MIDI, pero solo si antes le proporcionas una definición de los sonidos del sintetizador. Las definiciones son archivos de texto con la extensión .INS, y el mismo formato utilizado por Qtractor (Linux), y Sonar (Windows).

Cuando inicies VMPK por primera vez, deberías abrir el diálogo Preferencias eligiendo un fichero de definición, y luego seleccionar el nombre del instrumento entre los proporcionados por el archivo de definiciones. Debería haber un archivo de definiciones de instrumentos instalado en el directorio de datos de VMPK (típicamente "/usr/share/vmpk" en Linux, y "C:\Program Files\VMPK" en Windows) llamado "gmgsxg.ins", que contiene definiciones para los estándares General MIDI, Roland GS y Yamaha XG. Es un formato muy simple, y puedes usar cualquier editor de textos para ver, cambiar y crear uno nuevo. Puedes encontrar una biblioteca de definiciones de instrumentos en el servidor FTP de Cakewalk.

Desde la release 0.2.5 también puedes importar archivos Sound Font (en formatos .SF2 y .DLS) como definiciones de instrumentos, utilizando un diálogo disponible en el menú Archivo->Importar SoundFont.

Otra personalización que puedes querer realizar es el mapa de teclado. La distribución por defecto mapea unas dos octavas y media del teclado alfanumérico QWERTY, pero hay algunas definiciones más en el directorio de datos, adaptadas a otras distribuciones internacionales. Puedes incluso definir tu propia distribución usando el cuadro de diálogo disponible en el menú Edición->Mapa de teclado. Hay también opciones para cargar y guardar los mapas como archivos XML. El siguiente inicio de VMPK utilizará el último mapa cargado. De hecho, todas las preferencias, los bancos y programas MIDI seleccionados, así como los valores de los controladores serán guardados al finalizar el programa, y recuperados de nuevo al iniciar VMPK en la siguiente ocasión.

### Conexiones MIDI y cables MIDI virtuales

Para conectar dispositivos MIDI hardware necesitas cables MIDI físicos. Para conectar software MIDI necesitas cables virtuales. En windows, puedes usar software que proporciona cables MIDI virtuales, como MIDI Yoke, Maple, LoopBe1 o Sony Virtual MIDI Router.

El proceso de instalación de MIDI Yoke instalará el controlador y un applet en el panel de control para cambiar el número de puertos MIDI que estarán disponibles (es necesario reiniciar el equipo después de cambiar esta configuración). MIDI Yoke funciona enviando cada evento escrito en un puerto de salida al correspondiente puerto de entrada. Por ejemplo, puede conectar la salida de VMPK al puerto 1, y otro programa como QSynth puede leer los mismos eventos desde el puerto 1.

Utilizando MIDIOX puedes agregar más rutas entre los puertos de MIDI Yoke y otros puertos MIDI del sistema. Este programa también ofrece otras interesantes funcionalidades, como un reproductor de archivos MIDI. Puedes escuchar canciones que se interpretan en un sintetizador MIDI y al mismo tiempo ver las notas ejecutadas (sólo un canal a la vez) en VMPK. Para ello, puedes utilizar la ventana de "Rutas" en MIDIOX para conectar el puerto de entrada 1 al puerto del sintetizador de Windows. Además, configurar el puerto MIDI del reproductor para enviar a MIDI Yoke 1. Y configurar en VMPK el puerto de entrada para leer desde MIDI Yoke 1. El reproductor enviará los eventos al puerto 1, que serán encaminados al puerto de entrada 1 y, al mismo tiempo, al puerto del sintetizador.

En Linux, tienes el secuenciador de ALSA que proporciona los cables virtuales. Los puertos se crean dinámicamente cuando inicias un programa, de forma que no existe un número fijo de ellos como en MIDI Yoke. El programa de línea de mandatos "aconnect" permite conectar y desconectar los cables virtuales entre puertos, ya sean interfaces hardware o aplicaciones. Una utilidad gráfica agradable para hacer lo mismo es QJackCtl. El propósito principal de este programa es controlar el demonio Jack (iniciar, parar y monitorizar su estado). Jack proporciona cables de audio virtuales para conectar los puertos de la tarjeta de sonido y los programas, de una forma similar a los cables MIDI virtuales, pero para datos de audio digital.

## Preguntas frecuentes

### ¿Como mostrar 88 teclas?

Desde la versión 0.6 se puede elegir cualquier número (entre 1 y 121) de teclas y la nota de la tecla inicial en el diálogo de Preferencias.

### No hay sonido

VMPK no produce ningún sonido por si mismo. Necesitas un sintetizador MIDI, y por favor, vuelve a leer la documentación.

### Algunas teclas no suenan

Cuando seleccionas el canal 10 en un sintetizador MIDI estándar, ejecuta sonidos de percusión asignados a muchas teclas, pero no a todas. En los canales melódicos (los que no son el 10) puedes seleccionar sonidos con un rango limitado de notas. Esto se conoce en música como Tesitura.

### Los nombres de instrumentos no corresponden con los sonidos producidos

Se necesita proporcionar un archivo .INS que describa exactamente el conjunto de sonidos del sintetizador, o del soundfont. El archivo incluido (gmgsxg.ins) contiene sólo las definiciones de instrumentos estándar GM, GS y XG. Si tu sintetizador MIDI no coincide exactamente con ninguno de ellos, es necesario obtener otro archivo .INS, o crearlo tu mismo.

### ¿Cual es la sintaxis de los archivos de definición de instrumentos (.INS)?

Una explicación del formato .INS está aquí.

### ¿Cómo puedo convertir una definición de instrumentos de vkeybd en un archivo .INS?

Usa el guión de AWK "txt2ins.awk". Puedes usar la utilidad sftovkb de vkeybd para crear un archivo .INS a partir de cualquier soundfont SF2, pero hay una función para importar los nombres de los instrumentos de archivos SF2 y DLS directamente desde VMPK.

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

Puedes encontrar el guión de AWK "txt2ins.awk" en el directorio de datos de VMPK.

## Descargar

Puedes encontrar los últimos fuentes, y paquetes para Windows y Mac OSX en el <a href="http://sourceforge.net/projects/vmpk/files">sitio del proyecto en SourceForge.

También hay paquetes Linux listos para instalar en:

- openSUSE
- Arch Linux
- Gentoo
- Fedora (viejo)
- Debian (viejo)
- Ubuntu (viejo)

## Instalación desde fuentes

Descarga los fuentes desde http://sourceforge.net/projects/vmpk/files. Descomprime los fuentes en el directorio personal, y cambia al directorio descomprimido.

    $ cd vmpk-x.y.z

Puedes elegir entre CMake y Qmake para preparar el sistema de compilación, pero qmake está indicado sólamente para pruebas y desarrollo.

    $ cmake .
    o
    $ ccmake .
    o
    $ qmake

Después, compila el programa:

    $ make

Si el programa ha sido compilado satisfactoriamente, puedes instalarlo:

    $ sudo make install

### Requisitos

Para compilar y usar satisfactoriamente VMPK se necesita Qt 5.1 o posterior. (instala el paquete -devel de tu sistema, o bien descarga la edición open source desde qt-project.org

Drumstick RT se requiere para todas las plataformas. Utiliza el secuenciador ALSA en Linux, WinMM en Windows y CoreMIDI en Mac OSX, que son los sistemas MIDI nativos en cada una de las plataformas soportadas.

El sistema de construcción se basa en CMake.

Se necesita también el compilador GCC C++. MinGW es una adaptación para Windows.

Opcionalmente, puedes crear un programa de instalación para Windows usando NSIS.

### Notas para usuarios de Windows

Para compilar los fuentes en Windows, necesitas descargar o bién el fichero .bz2 o el .gz y descomprimirlo utilizando cualquier utilidad que soporte el formato, como 7-Zip.

Para configurar los fuentes, se necesita qmake (de Qt5) o CMake. Necesitas establecer el PATH incluyendo los directorios de los binarios de Qt5, los binarios de MinGW, y también los binarios de CMake. El programa CMake-GUI es la versión gráfica de CMake para Windows.

Si necesitas un sintetizador, puedes probar Virtual MIDI Synth, o FluidSynth.

### Notas para usuarios de Mac OSX

Puedes encontrar un paquete precompilado universal, incluyendo las bibliotecas Qt5 de tiempo de ejecución en el área de descargas del proyecto. Si prefieres la instalación desde fuentes, puedes usar CMake o Qmake para construir la aplicación enlazada a las bibliotecas del sistema instaladas. Puedes usar Qt5 obtenido desde qt-project.org o bien el paquete distribuido por Homebrew.

El sistema de construcción está preparado para producir un paquete de aplicación. Necesitas las herramientas de desarrollo de Apple, así como las librerias de Qt5.

Para compilar VMPK utilizando Makefiles, generados por qmake:

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

para compilar utilizando Makefiles, generados por CMake:

    $ cmake -G "Unix Makefiles" .
    $ make

Para crear archivos de proyecto de Xcode:

    $ qmake vmpk.pro -spec macx-xcode
    o bién
    $ cmake -G Xcode .

Si necesitas algo que produzca sonido, puede que quieras echar un vistazo a SimpleSynth, o a FluidSynth. Para encaminamiento MIDI está MIDI Patchbay.

### Notas para empaquetadores y usuarios avanzados

Puedes pedir al compilador que realice una optimización al construir el programa. Hay dos formas: usando un tipo de compilación predefinida.

    $ cmake . -DCMAKE_BUILD_TYPE=Release

El tipo "Release" de CMake utiliza las opciones del compilador: "-O3 -DNDEBUG". Otros tipos de compilación predefinidos son "Debug", "RelWithDebInfo", y "MinSizeRel". La segunda forma es elegir las opciones del compilador manualmente.

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

Has de determinar las mejores opciones de CXXFLAGS para tu sistema.

Si necesitas instalar el programa en algún otro lugar distinto al predeterminado (/usr/local) utiliza la siguiente opción de CMake:

    $ cmake . -DCMAKE_INSTALL_PREFIX=/usr

## Agradecimientos

Adicionalmente a las herramientas anteriormente mencionadas, VMPK utiliza partes de los siguientes proyectos de código abierto.

- de Qtractor, por Rui Nuno Capela
  Clases de definición de instrumentos
- Icono y logo por Theresa Knott

¡Muchas gracias!