MCPcopy Create free account
hub / github.com/csound/csound / CsPerfThreadMsg_Record

Class CsPerfThreadMsg_Record

interfaces/csPerfThread.cpp:154–240  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

152}
153
154class CsPerfThreadMsg_Record: public CsoundPerformanceThreadMessage {
155public:
156 CsPerfThreadMsg_Record(CsoundPerformanceThread *pt,
157 std::string filename,
158 int samplebits = 16,
159 int numbufs = 4)
160 : CsoundPerformanceThreadMessage(pt)
161 {
162 this->filename = filename;
163 CsoundPerformanceThreadMessage::lockRecord();
164 recordData_t *recordData = CsoundPerformanceThreadMessage::getRecordData();
165 if (recordData->running) {
166 CsoundPerformanceThreadMessage::unlockRecord();
167 return;
168 }
169 CSOUND * csound = pt_->GetCsound();
170 if (!csound) {
171 return;
172 }
173 int bufsize = csoundGetOutputBufferSize(csound)
174 * csoundGetNchnls(csound) * numbufs;
175 recordData->cbuf = csoundCreateCircularBuffer(csound,
176 bufsize,
177 sizeof(MYFLT));
178
179 if (!recordData->cbuf) {
180 csoundMessage(csound, "Could create recording buffer.");
181 return;
182 }
183
184 SF_INFO sf_info;
185 sf_info.samplerate = csoundGetSr(csound);
186 sf_info.channels = csoundGetNchnls(csound);
187 switch (samplebits) {
188 case 32:
189 sf_info.format = SF_FORMAT_FLOAT;
190 break;
191 case 24:
192 sf_info.format = SF_FORMAT_PCM_24;
193 break;
194 case 16:
195 default:
196 sf_info.format = SF_FORMAT_PCM_16;
197 break;
198 }
199
200 sf_info.format |= SF_FORMAT_WAV;
201
202 recordData->sfile = (void *) sf_open(filename.c_str(),
203 SFM_WRITE,
204 &sf_info);
205 if (!recordData->sfile) {
206 csoundMessage(csound, "Could not open file for recording.");
207 csoundDestroyCircularBuffer(csound, recordData->cbuf);
208 return;
209 }
210 sf_command((SNDFILE *) recordData->sfile, SFC_SET_CLIPPING,
211 NULL, SF_TRUE);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected