TTSampleMatrix::TTSampleMatrix(const TTValue& arguments) : TTMatrix(arguments), mSampleRate(ttEnvironment->mSampleRate) { this->setTypeWithoutResize(kTypeFloat64); this->setElementCountWithoutResize(1); this->resize(); this->mUserCount = 0; this->mBufferPoolStage = kSM_Idle; addAttributeWithGetterAndSetter(NumChannels, kTypeInt32); addAttributeWithGetterAndSetter(LengthInSeconds, kTypeFloat64); addAttributeWithGetterAndSetter(LengthInSamples, kTypeInt32); addAttribute(SampleRate, kTypeUInt32); addAttribute( UserCount, kTypeUInt16); addAttributeProperty( UserCount, readOnly, YES); addMessage(normalize); addMessageWithArguments(fill); addMessageWithArguments(getValueAtIndex); registerMessage("peek", (TTMethod)&TTSampleMatrix::getValueAtIndex); registerMessage("peeki", (TTMethod)&TTSampleMatrix::getValueAtIndex); addMessageWithArguments(setValueAtIndex); registerMessage("poke", (TTMethod)&TTSampleMatrix::setValueAtIndex); addMessageWithArguments(load); // TODO: more messages to implement // "readFile" (requires libsndfile straightening-out) // "writeFile" (requires libsndfile straightening-out) // a way to query attributes: for example what is the sr and bpm of an AIFF file? }
TTSampleMatrix::TTSampleMatrix(TTValue& arguments) : TTMatrix(arguments), mSampleRate(44100.0) { this->setType("float64"); this->setElementCount(1); addAttributeWithGetterAndSetter(NumChannels, kTypeUInt16); addAttributeWithGetterAndSetter(Length, kTypeFloat64); addAttributeWithGetterAndSetter(LengthInSamples, kTypeUInt64); addAttribute(SampleRate, kTypeFloat64); addMessage(normalize); addMessageWithArguments(fill); addMessageWithArguments(getValueAtIndex); registerMessage("peek", (TTMethod)&TTSampleMatrix::getValueAtIndex); registerMessage("peeki", (TTMethod)&TTSampleMatrix::getValueAtIndex); addMessageWithArguments(setValueAtIndex); registerMessage("poke", (TTMethod)&TTSampleMatrix::setValueAtIndex); // TODO: more messages to implement // "readFile" (requires libsndfile straightening-out) // "writeFile" (requires libsndfile straightening-out) // a way to query attributes: for example what is the sr and bpm of an AIFF file? }
TTBuffer::TTBuffer(TTValue& arguments) : TTAudioObject(arguments) { // By convention, the first argument for a TTAudioObject is the number of channels // So we'll maintain that here, and then use the second argument for the name of the buffer TTUInt16 channelCount = 1; TTSymbol name = kTTSymEmpty; if (arguments.getSize() > 0) { arguments.get(0, channelCount); // TODO: should we limit range? should zero mean to just reference an existing buffers channelcount? if (arguments.getSize() > 1) arguments.get(1, name); } if (!gTTBufferNameMap) gTTBufferNameMap = new TTHash; addMessageWithArguments(getNames); addAttributeWithSetter(Name, kTypeSymbol); addAttributeWithGetterAndSetter(NumChannels, kTypeUInt16); addAttributeWithGetterAndSetter(Length, kTypeFloat64); addAttributeWithGetterAndSetter(LengthInSamples, kTypeUInt64); // addAttribute(SampleRate, kTypeFloat64); addMessage(normalize); addMessageWithArguments(fill); addMessageWithArguments(getValueAtIndex); registerMessage("peek", (TTMethod)&TTBuffer::getValueAtIndex); addMessageWithArguments(setValueAtIndex); registerMessage("poke", (TTMethod)&TTBuffer::setValueAtIndex); // initialize setAttributeValue("name", name); if (channelCount) setAttributeValue("numChannels", channelCount); }
TTData::TTData(const TTValue& arguments) : TTCallback(arguments), mValue(TTValue(0.0)), mValueDefault(TTValue(0.0)), mValueStepsize(TTValue(0.1)), // this default value is expected in #TTData::setType method mType(kTTSym_generic), mTags(TTValue(kTTSym_none)), mPriority(0), mDescription(kTTSym_none), mRepetitionsFilter(NO), mActive(YES), mInitialized(NO), mRangeBounds(0.0, 1.0), // this default value is expected in #TTData::setType method mRangeClipmode(kTTSym_none), mDynamicInstances(NO), mInstanceBounds(0, -1), mRampDrive(kTTSym_none), mRampDriveDefault(TTSymbol("system")), #ifndef TT_NO_DSP mRampFunction(kTTSym_none), // this default value is expected in #TTData::setType method #endif mRampStatus(NO), mDataspace(kTTSym_none), mDataspaceUnit(kTTSym_none), mService(kTTSymEmpty) { if (arguments.size() == 1) mService = arguments[0]; registerAttribute(kTTSym_value, kTypeNone, NULL, (TTGetterMethod)&TTData::getValue, (TTSetterMethod)&TTData::setGenericValue); addAttributeWithGetterAndSetter(ValueDefault, kTypeNone); addAttributeWithGetterAndSetter(ValueStepsize, kTypeNone); addAttributeWithSetter(Type, kTypeSymbol); addAttributeWithSetter(Tags, kTypeLocalValue); addAttributeWithSetter(Priority, kTypeInt32); addAttributeWithSetter(Description, kTypeSymbol); addAttributeWithSetter(RepetitionsFilter, kTypeBoolean); addAttributeWithSetter(Active, kTypeBoolean); addAttribute(Initialized, kTypeBoolean); addAttributeProperty(Initialized, readOnly, YES); addAttributeProperty(Initialized, hidden, YES); addAttributeWithSetter(RangeBounds, kTypeLocalValue); addAttributeWithSetter(RangeClipmode, kTypeSymbol); // this is a temporary solution for Blue Yéti addAttribute(DynamicInstances, kTypeBoolean); addAttributeProperty(DynamicInstances, hidden, YES); addAttributeWithSetter(InstanceBounds, kTypeLocalValue); addAttributeProperty(InstanceBounds, hidden, YES); addAttributeWithSetter(RampDrive, kTypeSymbol); addAttribute(RampDriveDefault, kTypeSymbol); addAttributeProperty(RampDriveDefault, hidden, YES); #ifndef TT_NO_DSP addAttributeWithSetter(RampFunction, kTypeSymbol); #endif addAttribute(RampFunctionParameters, kTypeLocalValue); addAttributeProperty(RampFunctionParameters, readOnly, YES); addAttribute(RampStatus, kTypeBoolean); addAttributeProperty(RampStatus, readOnly, YES); addAttributeProperty(RampStatus, hidden, YES); // hidden for Max addAttributeWithSetter(Dataspace, kTypeSymbol); addAttributeWithSetter(DataspaceUnit, kTypeSymbol); addAttribute(Service, kTypeSymbol); //addAttributeProperty(Service, hidden, YES); // we don't hide this attribute to mirror it (even if we want to hide it for Max) registerMessage(kTTSym_Init, (TTMethod)&TTData::GenericInit, kTTMessagePassNone); addMessageWithArguments(Inc); addMessageWithArguments(Dec); addMessageWithArguments(Command); addMessageProperty(Command, hidden, YES); addMessageWithArguments(RampSet); addMessageProperty(RampSet, hidden, YES); addMessageWithArguments(RampTarget); addMessageProperty(RampTarget, hidden, YES); addMessageWithArguments(RampGo); addMessageProperty(RampGo, hidden, YES); addMessageWithArguments(RampSlide); addMessageProperty(RampSlide, hidden, YES); // needed to be handled by a TTTextHandler addMessageWithArguments(WriteAsText); addMessageProperty(WriteAsText, hidden, YES); mIsSending = NO; mIsOverridingDataspaceUnit = NO; commandMethod = (TTMethodValue)&TTData::GenericCommand; // cache some message and attribute for observer notification this->findAttribute(kTTSym_value, &valueAttribute); this->findAttribute(kTTSym_initialized, &initializedAttribute); // set no time for external ramp drive externalRampTime = 0; }