Hello all!
For a project I’m building sort of a video-sequencer in Windows (vs 2012). Each ‘node’ of a sequence consists of one plane in 3d. These planes are textured with videoframes and are animated with FX, translated and scaled when they perform/play video. A node also holds a separate audio file that is played back via multichannel output. To this end I incorporated vcucolo’s ofxMultiSpeakerSoundPlayer in the project. This add-on is based on ofSoundPlayer so it uses FMOD.
Several events can trigger nodes: MIDI, OSC, keypress, … So far so good…
The problem i’m facing is that the sound never really plays instantaneously when an event triggers it. For example, when I load a mono, 16bit, 44.1kHz wave file that really starts at position 0.0 (checked in an DAW) and play back it later through for instance a keypress event, the sound only comes out of the hardware a 150/200 ms later. This is a rough guess, quite difficult to time
It would be nice if I can get them to play really tight to the event, since a lot of the videos have drumming as content so every delay is very noticeable. All the samples are mono, an last between 0.5 - 3 seconds.
I’m also incorporating Resolume in this project for other parts and I can play back a combo of video/sound directly when triggered via MIDI, but only after setting the driver to ASIO. Both my onboard sound device (asio4all on a 2009 MBpro) and the projects RME fireface 800 produce the sound instantaneously…
So I started digging into FMOD to check if I can set the driver to ASIO (for lower latency):
FMOD_System_SetOutput(sys, FMOD_OUTPUTTYPE_ASIO);
But this always gives an error:
FMOD error! (66) The number of allowed instances of a plugin has been exceeded.
I went ahead and downloaded the FMOD api to check for more possible options. When I set the DSP buffersize like:
FMOD_System_SetDSPBufferSize(sys, 512, 1);
(instead of 1024) it doesn’t change a thing.
I’ve been chewing on this issue for the last two days now but I’m not getting any closer or better performance.
Can somebody give me a hint on how to manage this? Am I right that ASIO is important here? Maybe there are other factors at play here?
(I should still try to test my app on another machine)
Thanks!
Vincent