Select Git revision
-
BERTHAUT Florent authoredBERTHAUT Florent authored
gdpd.cpp 4.01 KiB
#include "gdpd.hpp"
using namespace godot;
void Gdpd::_register_methods() {
register_method("init", &Gdpd::init);
register_method("openfile", &Gdpd::openfile);
register_method("closefile", &Gdpd::closefile);
register_method("has_message", &Gdpd::has_message);
register_method("get_next", &Gdpd::get_next);
register_method("start_message", &Gdpd::start_message);
register_method("add_symbol", &Gdpd::add_symbol);
register_method("add_float", &Gdpd::add_float);
register_method("finish_list", &Gdpd::finish_list);
}
int Gdpd::audioCallback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData){
// pass audio samples to/from libpd
int ticks = nBufferFrames / 64;
libpd_process_float(ticks, (float*)inputBuffer, (float*)outputBuffer);
return 0;
}
Gdpd::Gdpd() {
}
void Gdpd::_init() {
}
Gdpd::~Gdpd() {
// add your cleanup here
}
int Gdpd::init(int nbInputs, int nbOutputs, int sampleRate) {
if(!m_pd.init(nbInputs, nbOutputs, sampleRate, true)) {
Godot::print("GDPD : Error starting libpd");
return 1;
}
/*
int bufsize = 128;
m_inBuf = new float[bufsize * nbInputs];
m_outBuf = new float[bufsize * nbOutputs];
*/
//create message array
m_messages = new Array();
//create message hook
m_pd.subscribe("to_gdpd");
m_pd.setReceiver(this);
//start dsp
m_pd.computeAudio(true);
//intialize rtaudio
if(m_audio.getDeviceCount()==0){
Godot::print("There are no available sound devices.");
}
RtAudio::StreamParameters outParams, inParams;
unsigned int sr = m_audio.getDeviceInfo(outParams.deviceId).preferredSampleRate;
outParams.deviceId = m_audio.getDefaultOutputDevice();
inParams.deviceId = m_audio.getDefaultOutputDevice();
outParams.nChannels = nbInputs;
inParams.nChannels = nbOutputs;