void Gear_AudioInput::internalInit() { std::cout << "Initializing AudioInput..." << std::endl; initPortAudio(); std::cout << "Initializing AudioInput...done" << std::endl; }
void AudioControl::run() { PaError err; m_synth = new Synth(); err = initPortAudio(); if (err != paNoError ) terminateAudioStream(err); m_startLock.unlock(); exec(); stopAudioStream(); delete m_releaseTimer; delete m_synth; QApplication::quit(); }
void startAudioSystem(void *data) { initPortAudio(); stream = Audio::openDefaultStream(data,audioDspPipelineCallback); Audio::startStream(stream); }
int main(int argc, char ** argv){ int fftSize = 1024 * 32, fftWinInc = 1024 * 1, windowWidth = 640, windowHeight = 480; SDL_Window * win; SDL_Renderer * renderer = initSDL("FFT-SDL", &win, windowWidth, windowHeight); pthread_t ffThread1; struct aBuf buf = initABuf(1024 * 32, 1024 * 2); double freq, intens, hDiff; int harmonic = 0, octave = 0; const char * note; const char * line; size_t i, idx; int x, y; PaStream * stream = initPortAudio(&buf, recordCallback); buf.panama = fftw_plan_dft_r2c_1d(buf.length, buf.fftIn, buf.fftOut, FFTW_ESTIMATE); for(i = 0; i < buf.length; i++){ buf.fftOut[i][0] = 0.0; buf.fftOut[i][1] = 0.0; buf.fftIn[i] = 0.0; } for(i = 0; i < buf.fftWinInc; i++){ buf.samples[i] = 0.0; } genHarmonics(); //pthread_create(&ffThread1, NULL, fftThread, &buf); printf("- Init done\n"); Pa_StartStream(stream); pthread_mutex_lock(&buf.mutex); while(1){ pthread_cond_wait(&buf.cond, &buf.mutex); while(!SDL_PollEvent(NULL)); // intenionally empty: poll ALL the events! fftw_execute(buf.panama); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); for(i = 0; i < windowWidth; i++){ /*harmonic = (double)(UMIN_HARMONIC + MAX_HARMONIC) * ((double)i / (double)windowWidth); freq = harmonicToFreq(harmonic - UMIN_HARMONIC); idx = freq / (double)buf.samplerate * ((double)buf.length / 2.0); y = (sqrt(buf.fftOut[idx][0]*buf.fftOut[idx][0] + buf.fftOut[idx][1]*buf.fftOut[idx][1]) / ((double)buf.length / 2.0)) * 2.0 * windowHeight;*/ x = ((double)i / ((double)windowWidth)) * ((double)buf.length / 2.0 + 1); y = (sqrt(buf.fftOut[x][0]*buf.fftOut[x][0] + buf.fftOut[x][1]*buf.fftOut[x][1]) / ((double)buf.length / 2.0 + 1)) * windowHeight; SDL_RenderDrawLine(renderer, i, windowHeight, i, windowHeight - y); } SDL_RenderPresent(renderer); i = highFreq(buf.fftOut, buf.length, &intens); freq = (double)i/(double)buf.length*(double)buf.samplerate; harmonic = freqToHarmonic(freq < 16.0 ? 16.0 : freq, &hDiff); note = harmonicToNote(harmonic, &octave); line = harmonicToLine(harmonic); printf("%12.6f: (~%12.6f) % 3i %s%s%i %s %12.6f\n", freq, harmonicToFreq(harmonic) - freq, harmonic, note, strlen(note) == 1 ? " " : "", octave, line, intens); } //while(Pa_IsStreamActive(stream)) Pa_Sleep(100); Pa_StopStream(stream); Pa_CloseStream(stream); //SDL_DestroyWindow(win); return 0; }