double PyQcsObject::getSampleRate(int index) { double sr = -1.0; CsoundEngine *e = m_qcs->getEngine(index); if (e != NULL) { CSOUND *cs = e->getCsound(); if (cs != NULL) { sr = (double) csoundGetSr (cs); } } return sr; }
CsPerfThreadMsg_Record(CsoundPerformanceThread *pt, std::string filename, int samplebits = 16, int numbufs = 4) : CsoundPerformanceThreadMessage(pt) { this->filename = filename; CsoundPerformanceThreadMessage::lockRecord(); recordData_t *recordData = CsoundPerformanceThreadMessage::getRecordData(); if (recordData->running) { CsoundPerformanceThreadMessage::unlockRecord(); return; } CSOUND * csound = pt_->GetCsound(); if (!csound) { return; } int bufsize = csoundGetOutputBufferSize(csound) * csoundGetNchnls(csound) * numbufs; recordData->cbuf = csoundCreateCircularBuffer(csound, bufsize, sizeof(MYFLT)); if (!recordData->cbuf) { csoundMessage(csound, "Could create recording buffer."); return; } SF_INFO sf_info; sf_info.samplerate = csoundGetSr(csound); sf_info.channels = csoundGetNchnls(csound); switch (samplebits) { case 32: sf_info.format = SF_FORMAT_FLOAT; break; case 24: sf_info.format = SF_FORMAT_PCM_24; break; case 16: default: sf_info.format = SF_FORMAT_PCM_16; break; } sf_info.format |= SF_FORMAT_WAV; recordData->sfile = (void *) sf_open(filename.c_str(), SFM_WRITE, &sf_info); if (!recordData->sfile) { csoundMessage(csound, "Could not open file for recording."); csoundDestroyCircularBuffer(csound, recordData->cbuf); return; } sf_command((SNDFILE *) recordData->sfile, SFC_SET_CLIPPING, NULL, SF_TRUE); recordData->running = true; recordData->thread = csoundCreateThread(recordThread_, (void*) recordData); CsoundPerformanceThreadMessage::unlockRecord(); }