void generate_items_sequence(std::shared_ptr<breakpoint_envelope> env, const char* fn) { SetCursorContext(1, NULL); Main_OnCommand(40182, 0); // select all items Main_OnCommand(40006, 0); // remove selected items MediaTrack* dest_track = GetTrack(nullptr, 0); double timepos = 0.0; double seqlen = 30.0; int sanity = 0; while (timepos < seqlen) { create_item_result r = create_item_with_take_and_source(dest_track, fn); SetMediaItemPosition(r.item, timepos, false); double srclen = GetMediaSourceLength(r.src, nullptr); double normtime = 1.0 / seqlen * timepos; double directionfactor = skip_near_zero(-1.0 + 2.0*env->interpolate(normtime), 0.02); if (directionfactor < 0.0) { //readbg() << "item " << sanity << " should be reversed\n"; SetMediaItemSelected(r.item, true); Main_OnCommand(41051, 0); // toggle reverse SetMediaItemSelected(r.item, false); } double absfactor = fabs(directionfactor); double itemlen = bound_value(0.02, srclen*absfactor, srclen); SetMediaItemLength(r.item, itemlen, false); SetMediaItemTakeInfo_Value(r.take, "D_PLAYRATE", 1.0 / absfactor); timepos += srclen*absfactor; ++sanity; if (sanity > 1000) { readbg() << "too many items created!\n"; break; } } UpdateArrange(); }
void SCL::update_edge_cache(fe_func_t& v_h) { fe_space_t::DGElementIterator the_dgele = fem_space->beginDGElement(), end_dgele = fem_space->endDGElement(); for (;the_dgele != end_dgele;++ the_dgele) { GET_EDGE_CACHE(*the_dgele); const element_t& neigh0 = the_dgele->neighbourElement(0); u_h_val0 = v_h.value(bas_val0, neigh0); if (the_dgele->p_neighbourElement(1) != NULL) { /// 内部边 const element_t& neigh1 = the_dgele->neighbourElement(1); u_h_val1 = v_h.value(bas_val1, neigh1); } else if (the_dgele->boundaryMark() <= 0) { /// 分区间的内边界 std::vector<double> * p_buf = syncer.get_send_buffer(*the_dgele); (*p_buf) = u_h_val0; } else { /// 物理区域的边界 u_h_val1 = u_h_val0; bound_value(q_pnt, u_h_val1, un, *the_dgele); } } syncer.sync(is_update_transmit_map); /// 完成分区间的数据交换 is_update_transmit_map = false; /// 将旗标改变为假 the_dgele = fem_space->beginDGElement(); for (;the_dgele != end_dgele;++ the_dgele) { GET_EDGE_CACHE(*the_dgele); /** * 第一个邻居单元为空,并且自身的边界标识为 0 的情形就是分区间的内 * 边界。首先拿出数据接收缓冲区,然后将其中的数据拷贝到变量中。 */ if (the_dgele->p_neighbourElement(1) == NULL && the_dgele->boundaryMark() <= 0) { std::vector<double> * p_buf = syncer.get_recv_buffer(*the_dgele); u_h_val1 = (*p_buf); } } }
delete vecptr; g_active_mrp_arrays.erase(arg[0]); } return (void*)nullptr; }, "Destroy a previously created MRP_Array" ); function_entry MRP_GenerateSine("void", "MRP_Array*,double,double", "array,samplerate,frequency", [](params) { if (g_active_mrp_arrays.count(arg[0]) == 0) { ReaScriptError("MRP_GenerateSine : passed in invalid MRP_Array"); return (void*)nullptr; } std::vector<double>& vecref = *(std::vector<double>*)arg[0]; double sr = bound_value(1.0,*(double*)arg[1],1000000.0); double hz = bound_value(0.0001,*(double*)arg[2],sr/2.0); int numsamples = vecref.size(); for (size_t i = 0; i < numsamples; ++i) vecref[i] = sin(2*3.141592653/sr*hz*i); return (void*)nullptr; }, "Generate a sine wave into a MRP_Array" ); function_entry MRP_MultiplyArrays("void", "MRP_Array*,MRP_Array*,MRP_Array*", "array1, array2, array3", [](params) { if (g_active_mrp_arrays.count(arg[0]) == 0 || g_active_mrp_arrays.count(arg[1]) == 0 || g_active_mrp_arrays.count(arg[2]) == 0) { ReaScriptError("MRP_MultiplyArrays : passed in invalid MRP_Array(s)"); return (void*)nullptr;