#include "nh_hall.hpp" #include "chuck_dl.h" #include "chuck_def.h" CK_DLL_CTOR(nhhall_ctor); CK_DLL_DTOR(nhhall_dtor); CK_DLL_MFUN(nhhall_getRt60); CK_DLL_MFUN(nhhall_setRt60); CK_DLL_MFUN(nhhall_getStereo); CK_DLL_MFUN(nhhall_setStereo); CK_DLL_MFUN(nhhall_getLowFreq); CK_DLL_MFUN(nhhall_setLowFreq); CK_DLL_MFUN(nhhall_getLowRatio); CK_DLL_MFUN(nhhall_setLowRatio); CK_DLL_MFUN(nhhall_getHiFreq); CK_DLL_MFUN(nhhall_setHiFreq); CK_DLL_MFUN(nhhall_getHiRatio); CK_DLL_MFUN(nhhall_setHiRatio); CK_DLL_MFUN(nhhall_getEarlyDiffusion); CK_DLL_MFUN(nhhall_setEarlyDiffusion); CK_DLL_MFUN(nhhall_getLateDiffusion); CK_DLL_MFUN(nhhall_setLateDiffusion); CK_DLL_MFUN(nhhall_getModRate); CK_DLL_MFUN(nhhall_setModRate); CK_DLL_MFUN(nhhall_getModDepth); CK_DLL_MFUN(nhhall_setModDepth); CK_DLL_TICKF(nhhall_tickf); class NHHall { public: // NOTE: The default allocator calls malloc. nh_ugens::NHHall<> m_core; float m_rt60 = 1.0f; float m_stereo = 0.5; float m_lowFreq = 200; float m_lowRatio = 0.5; float m_hiFreq = 4000; float m_hiRatio = 0.5; float m_earlyDiffusion = 0.5; float m_lateDiffusion = 0.5; float m_modRate = 0.2; float m_modDepth = 0.3; NHHall(float sample_rate) : m_core(sample_rate) { m_core.set_rt60(m_rt60); m_core.set_stereo(m_stereo); m_core.set_low_shelf_parameters(m_lowFreq, m_lowRatio); m_core.set_hi_shelf_parameters(m_hiFreq, m_hiRatio); m_core.set_early_diffusion(m_earlyDiffusion); m_core.set_late_diffusion(m_lateDiffusion); m_core.set_mod_rate(m_modRate); m_core.set_mod_rate(m_modDepth); } }; t_CKINT nhhall_unit_offset = 0; CK_DLL_QUERY(NHHall) { QUERY->setname(QUERY, "NHHall"); QUERY->begin_class(QUERY, "NHHall", "UGen"); QUERY->add_ctor(QUERY, nhhall_ctor); QUERY->add_dtor(QUERY, nhhall_dtor); QUERY->add_ugen_funcf(QUERY, nhhall_tickf, NULL, 2, 2); QUERY->add_mfun(QUERY, nhhall_setRt60, "float", "rt60"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getRt60, "float", "rt60"); QUERY->add_mfun(QUERY, nhhall_setStereo, "float", "stereo"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getStereo, "float", "stereo"); QUERY->add_mfun(QUERY, nhhall_setLowFreq, "float", "lowFreq"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getLowFreq, "float", "lowFreq"); QUERY->add_mfun(QUERY, nhhall_setLowRatio, "float", "lowRatio"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getLowRatio, "float", "lowRatio"); QUERY->add_mfun(QUERY, nhhall_setHiFreq, "float", "hiFreq"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getHiFreq, "float", "hiFreq"); QUERY->add_mfun(QUERY, nhhall_setHiRatio, "float", "hiRatio"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getHiRatio, "float", "hiRatio"); QUERY->add_mfun(QUERY, nhhall_setEarlyDiffusion, "float", "earlyDiffusion"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getEarlyDiffusion, "float", "earlyDiffusion"); QUERY->add_mfun(QUERY, nhhall_setLateDiffusion, "float", "lateDiffusion"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getLateDiffusion, "float", "lateDiffusion"); QUERY->add_mfun(QUERY, nhhall_setModRate, "float", "modRate"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getModRate, "float", "modRate"); QUERY->add_mfun(QUERY, nhhall_setModDepth, "float", "modDepth"); QUERY->add_arg(QUERY, "float", "arg"); QUERY->add_mfun(QUERY, nhhall_getModDepth, "float", "modDepth"); nhhall_unit_offset = QUERY->add_mvar(QUERY, "int", "@data", false); QUERY->end_class(QUERY); return TRUE; } CK_DLL_CTOR(nhhall_ctor) { OBJ_MEMBER_INT(SELF, nhhall_unit_offset) = 0; NHHall* unit = new NHHall(API->vm->get_srate(API, SHRED)); OBJ_MEMBER_INT(SELF, nhhall_unit_offset) = (t_CKINT)unit; } CK_DLL_DTOR(nhhall_dtor) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); if (unit) { delete unit; OBJ_MEMBER_INT(SELF, nhhall_unit_offset) = 0; unit = NULL; } } CK_DLL_TICKF(nhhall_tickf) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); for (int i = 0; i < nframes; i++) { float in_left = in[i * 2 + 0]; float in_right = in[i * 2 + 1]; std::array core_out = unit->m_core.process(in_left, in_right); out[i * 2 + 0] = core_out[0]; out[i * 2 + 1] = core_out[1]; } return TRUE; } CK_DLL_MFUN(nhhall_getRt60) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_dur = unit->m_rt60; } CK_DLL_MFUN(nhhall_setRt60) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_rt60 = GET_NEXT_FLOAT(ARGS); unit->m_core.set_rt60(unit->m_rt60); unit->m_core.set_low_shelf_parameters(unit->m_lowFreq, unit->m_lowRatio); unit->m_core.set_hi_shelf_parameters(unit->m_hiFreq, unit->m_hiRatio); RETURN->v_dur = unit->m_rt60; } CK_DLL_MFUN(nhhall_getStereo) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_stereo; } CK_DLL_MFUN(nhhall_setStereo) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_stereo = GET_NEXT_FLOAT(ARGS); unit->m_core.set_stereo(unit->m_stereo); RETURN->v_float = unit->m_stereo; } CK_DLL_MFUN(nhhall_getLowFreq) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_lowFreq; } CK_DLL_MFUN(nhhall_setLowFreq) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_lowFreq = GET_NEXT_FLOAT(ARGS); unit->m_core.set_low_shelf_parameters(unit->m_lowFreq, unit->m_lowRatio); RETURN->v_float = unit->m_lowFreq; } CK_DLL_MFUN(nhhall_getLowRatio) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_lowRatio; } CK_DLL_MFUN(nhhall_setLowRatio) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_lowRatio = GET_NEXT_FLOAT(ARGS); unit->m_core.set_low_shelf_parameters(unit->m_lowFreq, unit->m_lowRatio); RETURN->v_float = unit->m_lowRatio; } CK_DLL_MFUN(nhhall_getHiFreq) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_hiFreq; } CK_DLL_MFUN(nhhall_setHiFreq) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_hiFreq = GET_NEXT_FLOAT(ARGS); unit->m_core.set_hi_shelf_parameters(unit->m_hiFreq, unit->m_hiRatio); RETURN->v_float = unit->m_hiFreq; } CK_DLL_MFUN(nhhall_getHiRatio) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_hiRatio; } CK_DLL_MFUN(nhhall_setHiRatio) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_hiRatio = GET_NEXT_FLOAT(ARGS); unit->m_core.set_hi_shelf_parameters(unit->m_hiFreq, unit->m_hiRatio); RETURN->v_float = unit->m_hiRatio; } CK_DLL_MFUN(nhhall_getEarlyDiffusion) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_earlyDiffusion; } CK_DLL_MFUN(nhhall_setEarlyDiffusion) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_earlyDiffusion = GET_NEXT_FLOAT(ARGS); unit->m_core.set_early_diffusion(unit->m_earlyDiffusion); RETURN->v_float = unit->m_earlyDiffusion; } CK_DLL_MFUN(nhhall_getLateDiffusion) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_lateDiffusion; } CK_DLL_MFUN(nhhall_setLateDiffusion) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_lateDiffusion = GET_NEXT_FLOAT(ARGS); unit->m_core.set_late_diffusion(unit->m_lateDiffusion); RETURN->v_float = unit->m_lateDiffusion; } CK_DLL_MFUN(nhhall_getModRate) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_modRate; } CK_DLL_MFUN(nhhall_setModRate) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_modRate = GET_NEXT_FLOAT(ARGS); unit->m_core.set_mod_rate(unit->m_modRate); RETURN->v_float = unit->m_modRate; } CK_DLL_MFUN(nhhall_getModDepth) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); RETURN->v_float = unit->m_modDepth; } CK_DLL_MFUN(nhhall_setModDepth) { NHHall* unit = (NHHall*)OBJ_MEMBER_INT(SELF, nhhall_unit_offset); unit->m_modDepth = GET_NEXT_FLOAT(ARGS); unit->m_core.set_mod_depth(unit->m_modDepth); RETURN->v_float = unit->m_modDepth; }