Fixed volume control

This commit is contained in:
BERTHAUT Florent 2020-05-08 11:50:19 +02:00
parent 32fd85b909
commit addab6e9be
2 changed files with 25 additions and 8 deletions

View file

@ -17,11 +17,8 @@ void Gdpd::_register_methods() {
int Gdpd::audioCallback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData){ int Gdpd::audioCallback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData){
Gdpd* gdpd = static_cast<Gdpd*>(userData); Gdpd* gdpd = static_cast<Gdpd*>(userData);
int ticks = nBufferFrames / 64; gdpd->processAudio(outputBuffer, inputBuffer, nBufferFrames, streamTime,
gdpd->m_pd.processFloat(ticks, (float*)inputBuffer, (float*)outputBuffer); status, userData);
for(int b=0; b<nBufferFrames; ++b) {
((float*)outputBuffer)[b]*=gdpd->get_volume();
}
return 0; return 0;
} }
@ -63,8 +60,8 @@ int Gdpd::init(int nbInputs, int nbOutputs, int sampleRate) {
unsigned int sr = m_audio.getDeviceInfo(outParams.deviceId).preferredSampleRate; unsigned int sr = m_audio.getDeviceInfo(outParams.deviceId).preferredSampleRate;
outParams.deviceId = m_audio.getDefaultOutputDevice(); outParams.deviceId = m_audio.getDefaultOutputDevice();
inParams.deviceId = m_audio.getDefaultOutputDevice(); inParams.deviceId = m_audio.getDefaultOutputDevice();
outParams.nChannels = nbInputs; outParams.nChannels = m_nbInputs = nbInputs;
inParams.nChannels = nbOutputs; inParams.nChannels = m_nbOutputs = nbOutputs;
m_bufferFrames = 128; m_bufferFrames = 128;
RtAudio::StreamOptions options; RtAudio::StreamOptions options;
@ -89,6 +86,19 @@ int Gdpd::init(int nbInputs, int nbOutputs, int sampleRate) {
return 0; return 0;
} }
void Gdpd::processAudio(void *outputBuffer, void *inputBuffer,
unsigned int nBufferFrames, double streamTime,
RtAudioStreamStatus status, void *userData) {
int ticks = nBufferFrames / libpd_blocksize();
m_pd.processFloat(ticks, (float*)inputBuffer, (float*)outputBuffer);
//volume control on the output
for(int b=0; b<nBufferFrames*m_nbOutputs; ++b) {
((float*)outputBuffer)[b]*=m_vol;
}
}
void Gdpd::openfile(godot::String baseStr, godot::String dirStr) { void Gdpd::openfile(godot::String baseStr, godot::String dirStr) {
std::wstring baseWs = baseStr.unicode_str(); std::wstring baseWs = baseStr.unicode_str();
std::string baseS(baseWs.begin(), baseWs.end()); std::string baseS(baseWs.begin(), baseWs.end());

View file

@ -26,6 +26,8 @@ private:
RtAudio m_audio; RtAudio m_audio;
unsigned int m_bufferFrames; unsigned int m_bufferFrames;
float m_vol; float m_vol;
int m_nbInputs;
int m_nbOutputs;
public: public:
static void _register_methods(); static void _register_methods();
@ -57,7 +59,12 @@ public:
//rtaudio //rtaudio
static int audioCallback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData); static int audioCallback(void *outputBuffer, void *inputBuffer,
unsigned int nBufferFrames, double streamTime,
RtAudioStreamStatus status, void *userData);
void processAudio(void *outputBuffer, void *inputBuffer,
unsigned int nBufferFrames, double streamTime,
RtAudioStreamStatus status, void *userData);
}; };