| 152 | } |
| 153 | |
| 154 | class CsPerfThreadMsg_Record: public CsoundPerformanceThreadMessage { |
| 155 | public: |
| 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); |
nothing calls this directly
no outgoing calls
no test coverage detected