Added VST SDK support.
This commit is contained in:
parent
a1482ec110
commit
8e09f58944
25 changed files with 850 additions and 23 deletions
43
examples/steinberg/render.c
Normal file
43
examples/steinberg/render.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/* Render the SDK sine -> half-gain examples without an audio server. */
|
||||
#include "xtc/xtc_plugin.h"
|
||||
#include "xtc/xtc_audio.h"
|
||||
#include <stdio.h>
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
xtc_plugin_spec spec;
|
||||
xtc_plugin *synth = NULL, *gain = NULL;
|
||||
xtc_recorder *writer = NULL;
|
||||
xtc_result result = XTC_ERR_INVALID_ARGUMENT;
|
||||
size_t position;
|
||||
float dry[256], wet[256];
|
||||
if (argc != 3) {
|
||||
fprintf(stderr,"Usage: steinberg-render /absolute/xtc-sdk-examples.vst3 /absolute/new.wav\n");
|
||||
return 2;
|
||||
}
|
||||
result = xtc_plugin_probe_format(XTC_PLUGIN_VST3,argv[1],1,48000,&spec);
|
||||
if (result == XTC_OK) result = xtc_plugin_create(&spec,48000,256,&synth);
|
||||
if (result == XTC_OK) result = xtc_plugin_probe_format(XTC_PLUGIN_VST3,argv[1],0,48000,&spec);
|
||||
if (result == XTC_OK) result = xtc_plugin_create(&spec,48000,256,&gain);
|
||||
if (result == XTC_OK) result = xtc_recorder_create(argv[2],48000,512,&writer);
|
||||
for (position = 0; result == XTC_OK && position < 96000; position += 256) {
|
||||
size_t frames = 96000-position < 256 ? 96000-position : 256;
|
||||
xtc_midi_event event = {0};
|
||||
size_t count = 0;
|
||||
event.channel = 0; event.pitch = 69; event.velocity = 100;
|
||||
if (!position) { event.type = XTC_MIDI_NOTE_ON; count = 1; }
|
||||
if (position <= 48000 && position+frames > 48000) {
|
||||
event.type = XTC_MIDI_NOTE_OFF; event.offset = (unsigned int)(48000-position); count = 1;
|
||||
}
|
||||
result = xtc_plugin_process_midi_at(synth,&event,count,dry,frames,position);
|
||||
if (result == XTC_OK) result = xtc_plugin_process_at(gain,dry,wet,frames,position);
|
||||
if (result == XTC_OK) {
|
||||
xtc_recorder_push(writer,wet,frames);
|
||||
result = xtc_recorder_drain(writer);
|
||||
}
|
||||
}
|
||||
if (result == XTC_OK) result = xtc_recorder_finish(writer);
|
||||
xtc_recorder_destroy(writer); xtc_plugin_destroy(gain); xtc_plugin_destroy(synth);
|
||||
if (result != XTC_OK) { fprintf(stderr,"SDK example render failed (%d).\n",(int)result); return 1; }
|
||||
puts("Rendered 2 seconds at 48 kHz: A4 for 1 second, then silence.");
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue