Pregunta

Tomemos, por ejemplo, el VSTi Trifuerza , por Tweakbench. Cuando se carga en cualquier host VST en el mercado, que permite que el host envía una señal (presumiblemente MIDI) a la VSTi. El VSTi entonces procesar dicha señal y de audio sintetizada de salida como creado por un software del instrumento dentro del VSTi.

Por ejemplo, el envío de un (nota MIDI, creo) A4 a la VSTi hará que se sintetice la A anterior Medio C. Se envía la parte posterior de datos de audio al anfitrión VST, lo que podría jugar ya sea en mis altavoces o guardarlo en .wav o algún otro formato de archivo de audio.

Digamos que tengo Trifuerza , y estoy tratando de escribir un programa en mi idioma de su elección que podría interactuar con el VSTi mediante el envío de una nota A4 que se sintetizan y guardarlo automáticamente a una archivo en el sistema?

Finalmente, me gustaría ser capaz de analizar un archivo MIDI toda de una sola pista (usando bibliotecas establecidas, estables ya disponibles para este propósito) y enviarlo a la VSTi a "rendir" / sintetizarlo en un archivo de audio .

¿Cómo hago para esto, y en idioma debería mirar para construir el marco básico?

En última instancia, se va a utilizar en un proyecto basado en Ruby, por lo que cualquier punteros a recursos específicos de Ruby sería bueno también.

Sin embargo, sólo estoy tratando de entender básicamente cómo el API de un VSTi funciona . (Me he dado cuenta de que esta pregunta está muy relacionada con la cuestión de la construcción de un VST, en primer lugar, aunque uno que sólo puede guardar salidas VST a archivo y no el juego de vuelta, y con un alcance considerablemente menor)

Gracias de antemano por cualquier ayuda =)

¿Fue útil?

Solución

Bueno, ya que preguntas, el lenguaje ideal para un proyecto como éste va a ser C ++. Aunque existen contenedores para lenguajes de alto nivel como Java y .NET para el SDK VST, no pude encontrar uno para Ruby (aunque he encontrado este proyecto en lugar fresco, que le permite plugins VST programa en Ruby ). Por lo que será pegado haciendo algún grado de integración C / C ++ en su cuenta.

Dicho esto, usted tiene básicamente dos opciones:

  1. Escribir un host VST en C ++, y lanzarlo como un proceso independiente desde el interior de Ruby.
  2. Integrar el código Ruby directamente al SDK VST, y cargar el plugin de DLL / paquetes directamente desde el código. Este es probablemente el más limpio pero mucho más difícil de lograr su objetivo.

Me escribió una VST de acogida tutorial de programación en mi blog hace un tiempo atrás que pueden serle útiles en cualquiera de los casos. Se detalla cómo se abre y se comunica con los plugins VST en Mac OS X y Windows. Una vez que haya llegado a su anfitrión para cargar los plugins, tiene que ser capaz de cualquiera enviar eventos MIDI directamente al plugin, ya sea mediante la lectura de ellas desde un archivo o algún tipo de comunicación entre su código Ruby y el anfitrión VST (es decir, una tubería con nombre, zócalo, archivo, etc.). Si no está familiarizado con el protocolo MIDI, visita estos links:

Como es posible que ya se han dado cuenta, VST es fundamentalmente un protocolo basado en bloques. Usted solicita pequeños bloques de datos de audio desde el plugin, y se envía a lo largo de los eventos MIDI a la derecha plug-in antes de procesar que el bloque respectivo. Asegúrese no para ignorar el campo delta MIDI; esto asegurará que el plug-in comienza a procesar el evento MIDI directamente en la muestra deseada. De lo contrario, el plugin sonar un poco fuera de tempo, especialmente en el caso de instrumentos.

El SDK VST se basa también en torno a bloques de punto flotante, por lo que cualquier dato que vuelvas contendrá muestras individuales en el rango de -1.0 {1,0} ... Dependiendo de su formato de salida deseado, es posible que necesite para convertir estos a algún otro formato. Afortunadamente, parece que hay una vinculante para la biblioteca audiofile Ruby, por lo que puede ser capaz de enviar su salida en que, a fin de generar un archivo adecuado AIFF / WAV.

En total, será una buena cantidad de trabajo para llegar a su objetivo final deseado, pero no es imposible, por cualquier medio. Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top