void WebSocketOpcode_allocateArrayArgument(MYFLT *argument, OpcodeArgument *argumentArrayItem, CSOUND *csound) { ARRAYDAT *array = (ARRAYDAT *)argument; if (array->dimensions == 0) { csound->Die(csound, Str("websocket: error array variable %s has not been " "initialised\nExiting"), argumentArrayItem->name); } argumentArrayItem->dataPointer = array->data; argumentArrayItem->itemsCount = WebSocketOpcode_getArrayElementCount(array); argumentArrayItem->bytesCount = array->arrayMemberSize * argumentArrayItem->itemsCount; argumentArrayItem->circularBuffer = csoundCreateCircularBuffer(csound, argumentArrayItem->itemsCount * ringBufferItemsCount + 1, array->arrayMemberSize); csound->AuxAlloc(csound, argumentArrayItem->bytesCount, &argumentArrayItem->auxillaryMemory); argumentArrayItem->readBuffer = argumentArrayItem->auxillaryMemory.auxp; }
void WebSocketOpcode_allocateVariableArgument(MYFLT *argument, OpcodeArgument *argumentArrayItem, CSOUND *csound, int bytesCount) { argumentArrayItem->dataPointer = argument; argumentArrayItem->itemsCount = 1; argumentArrayItem->bytesCount = bytesCount; argumentArrayItem->circularBuffer = csoundCreateCircularBuffer(csound, ringBufferItemsCount + 1, argumentArrayItem->bytesCount); csound->AuxAlloc(csound, argumentArrayItem->bytesCount, &argumentArrayItem->auxillaryMemory); argumentArrayItem->readBuffer = argumentArrayItem->auxillaryMemory.auxp; }
void WebSocketOpcode_allocateStringArgument(MYFLT *argument, OpcodeArgument *argumentArrayItem, CSOUND *csound, bool isInputArgument) { STRINGDAT *string = (STRINGDAT *)argument; if (isInputArgument == true) { csound->Die(csound, Str("websocket: this opcode does not send strings, " "only receiving them is supported\nExiting"), argumentArrayItem->name); } else { if (string->size != 0) { csound->Die(csound, Str("websocket: error output string variable %s must " "not be initialised\nExiting"), argumentArrayItem->name); } else { argumentArrayItem->itemsCount = stringVarMaximumBytesCount; string->data = csound->ReAlloc(csound, string->data, stringVarMaximumBytesCount); } } argumentArrayItem->dataPointer = string->data; argumentArrayItem->bytesCount = sizeof(char) * stringVarMaximumBytesCount; argumentArrayItem->circularBuffer = csoundCreateCircularBuffer(csound, argumentArrayItem->itemsCount * ringBufferItemsCount + 1, sizeof(char)); csound->AuxAlloc(csound, argumentArrayItem->bytesCount, &argumentArrayItem->auxillaryMemory); argumentArrayItem->readBuffer = argumentArrayItem->auxillaryMemory.auxp; }
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(); }