MAX/MSP SDK学习03:Atoms and Messages的使用

今天终于把Message消息选择器看得有点头绪了,主要是这个官方英文文档理解起来有点抽象。


编写IsMatchABC自定义Object,要求:

①若左入口(入口0)收到 "int" 型消息,则从出口发送数值 "888";

②若左入口(入口0)收到 "ABC" 消息,则从出口发送 "Message match!!!(Send)";

③若右入口(入口1)收到 "int" 型消息,则打印该int数值;

#include "ext.h"			// standard Max include, always required
#include "ext_obex.h"		// required for new style Max objecttypedef struct _IsMatchABC {t_object ob;			  // the object itself (must be first)// 可把t_symbol看成字符串类型t_symbol* messagePrintSymbol;  // 若消息选择器匹配,则打印messagePrintSymbolt_symbol* messageSendSymbol;   // 若消息选择器匹配,则从出口发送messageSendSymbolt_atom messageSendInt;         // 若消息选择器匹配,则从出口发送messageSendInt// t_atom类型可存储整型、浮点型、t_symbol类型、指针void* outLet;
} t_IsMatchABC;// function prototypes
// 必备函数
void* IsMatchABC_new(t_symbol* s, long argc, t_atom* argv);
void IsMatchABC_free(t_IsMatchABC* x);
void IsMatchABC_assist(t_IsMatchABC* x, void* b, long m, long a, char* s);
// 自定义函数
void IsMatchABC_testMessageSelector(t_IsMatchABC* x);
void handleInt(t_IsMatchABC* x);
void handleIn1(t_IsMatchABC* x, long n);// global class pointer variable
void* IsMatchABC_class;void ext_main(void* r) {t_class* c;// "IsMatchABC" 建议和项目名一样,否则在max/msp中创建自定义组件会出问题c = class_new("IsMatchABC", (method)IsMatchABC_new, (method)IsMatchABC_free, (long)sizeof(t_IsMatchABC),0L /* leave NULL!! */, A_GIMME, 0);/* you CAN'T call this from the patcher */class_addmethod(c, (method)IsMatchABC_assist, "assist", A_CANT, 0);// 收到"ABC"消息,则调用IsMatchABC_testMessageSelector方法class_addmethod(c, (method)IsMatchABC_testMessageSelector, "ABC", 0); class_addmethod(c, (method)handleInt, "int", A_LONG, 0);class_addmethod(c, (method)handleIn1, "in1", A_LONG, 0);class_register(CLASS_BOX, c); /* CLASS_NOBOX */IsMatchABC_class = c;post("I am the IsMatchABC object");
}void IsMatchABC_assist(t_IsMatchABC* x, void* b, long m, long a, char* s) {if (m == ASSIST_INLET) { // inletsprintf(s, "I am inlet %ld", a);} else {	// outletsprintf(s, "I am outlet %ld", a);}
}void IsMatchABC_free(t_IsMatchABC* x) {;
}/* argc指在创建组件时,直接跟在组件后面的参数个数;argv存储参数具体值 */
void* IsMatchABC_new(t_symbol* s, long argc, t_atom* argv) { t_IsMatchABC* x = NULL;long i;if ((x = (t_IsMatchABC*)object_alloc(IsMatchABC_class))) { intin(x, 1);   // 创建入口1(入口0默认存在)x->outLet = outlet_new(x, NULL);   // 创建通用出口// t_symbol型数据得使用gensym函数进行赋值,返回t_symbol型指针x->messagePrintSymbol = gensym("Message match!!!(Print)");  x->messageSendSymbol = gensym("Message match!!!(Send)");atom_setlong(&(x->messageSendInt), 888);}return (x);
}// 入口0收到"ABC"消息,则调用IsMatchABC_testMessageSelector方法
void IsMatchABC_testMessageSelector(t_IsMatchABC* x) {post("%s", x->messagePrintSymbol->s_name);outlet_anything(x->outLet, gensym(x->messageSendSymbol->s_name), 0, 0);
}// 入口0收到int型消息,则发送"666"
void handleInt(t_IsMatchABC* x) {outlet_anything(x->outLet, gensym("int"), 1, &(x->messageSendInt));
}// 入口1收到int型消息,则发送收到的int数值
void handleIn1(t_IsMatchABC* x, long n) {t_atom t_int;atom_setlong(&t_int, n);outlet_anything(x->outLet, gensym("int"), 1, &t_int);
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机/STM32F103/STM32F407学习1_点亮LED灯

目录: 基础知识单片机从0实现单片机GPIO介绍 参考连接: 野火霸天虎教程 https://doc.embedfire.com/products/link/zh/latest/mcu/stm32/ebf_stm32f407_batianhu_v1_v2/download/stm32f407_batianhu_v1_v2.html x.1 基础知识 x.1.1 指针中的取地址&a…

数据标注:猫目标检测数据集label标签制作

对于猫十二分类数据标注部分,可以使用官方制作的标注软件 下载地址:精灵标注助手-人工智能数据集标注工具 (jinglingbiaozhu.com) 标注图片为150张猫的图片 如下:

java智慧校园信息管理系统源码带微信小程序

一、智慧校园的定义 智慧校园指的是以云计算和物联网为基础的智慧化的校园工作、学习和生活一体化环境。以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合,让校园实现无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、…

适合学校或高校老师、学生学习用的网盘推荐

现代教育中,数字化的教学资源和家长的参与度越来越重要。然而文件传输的问题一直是学校和家长面临的一个挑战,网络限制、U盘病毒和文件管理不便等问题,都对教学质量和家校沟通造成了影响。Zoho WorkDrive企业网盘为学校还有教辅机构提供了一个…

基于单片机智能液位水位监测控制系统设计

**单片机设计介绍, 基于单片机智能液位水位监测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能液位水位监测控制系统可以用来检测和控制液位的高低,并可以用于水泵的控制和自…

键鼠自动化2.0展示

软件介绍:桌面键鼠自动化工具 Qtc 编写: 本软件采用Qt C编写,旨在提供高效、跨平台的桌面键鼠自动化解决方案。Qt C框架的选择确保了软件的稳定性、可靠性,并通过其图形用户界面实现了用户友好的操作体验。 鼠标移动与点击&#…

亚马逊车灯外贸出口CE认证标准办理解析

车灯是车辆夜间行驶在道路照明的工具,也是发出各种车辆行驶信号的提示工具。车灯一般分为前照灯、尾灯、转向灯等。车灯出口欧盟需要办理CE认证。 CE认证是欧盟对进入欧洲市场的产品强制性的认证标志,是指符合欧盟安全、健康、环境保护等标准和要求的产…

中国城镇化时空分异及影响因素数据集(2010-2020)

基于《中国统计年鉴》、各省份统计年鉴及EPS全球统计数据库等相关统计数据,从人居生活、人文环境、人城关系等维度界定了城镇化内涵框架与指标体系,利用改进的熵值法计算综合评价指数,并运用泰尔指数、方差分解及地理探测器等方法&#xff0c…

【Android Jetpack】理解ViewModel

文章目录 ViewModel实现ViewModelViewModel的生命周期在Fragments间分享数据ViewModel和SavedInstanceState对比ViewModel原理ViewModel与AndroidViewModel ViewModel Android系统提供控件,比如Activity和Fragment,这些控件都是具有生命周期方法&#x…

Playcanvas后处理-辉光bloom

(一)Bloom介绍 Bloom(辉光、光晕、泛光)是一种常见的摄像机后处理(PostProcessing)效果,用于再现真实世界相机的成像伪影。这种效果会产生从图像中明亮区域边界延伸的光条纹(或羽毛…

Altium Designer学习笔记2

原理图的绘制 需要掌握的是系统自带原理图库元件的添加。

[WUSTCTF 2020]level2 脱壳

这里我们发现ida打开后是有报错的 所以猜测是否有壳 所以我们去看看是否有壳 发现去壳了 然后再放到IDA中看即可

Atlassian发布最新补贴政策,Jira/Confluence迁移上云最低可至零成本

到2024年2月15日,Atlassian将不再提供对Jira、Confluence、Jira Service Management等Server版产品的支持。 近期,Atlassian推出了一项针对云产品的特殊优惠。现在从Server版迁移到云版,您能享受到高额补贴,甚至成本低至零元。立…

Odoo:行业领先的免费开源财务管理解决方案

面向现代企业的财务和会计软件 可靠关账,更快速、更准确地报告财务数据 Odoo ERP财务和会计软件可帮助财务主管设计、革新和理顺财务流程和运营。Odoo ERP无缝整合各种核心财务和会计功能,提供强大的合规管理特性,有助于企业改善业务绩效、提…

Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?

今天在做练习题的时候,发现几个问题捣鼓了好久,写下这篇来记录 问题一: 有层级的复选框无法定位到二级目录 对于这种拥有二级框的选项无法定位,也不是<select>属性. 我们查看下HTML,发现它是被单独封装在body内拥有动态属性的独立<div>,当窗口点击的时候才会触发…

十六、RabbitMQ快速入门

目录 一、在centos上下载MQ镜像 二、安装运行容器 三、登录进入MQ 1、添加一个新的用户 2、新建虚拟机 3、 为用户分配权限 四、RabbitMQ的基本概念 RabbitMQ中的几个概念: 五、常见消息模型 六、简单的消息生产与消费 1、消费者类 2、生产者类 3、基本消息队列的消…

数据库中的undo与redo的作用

undo与redo的作用 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期…

Kubernetes Gateway API 攻略:解锁集群流量服务新维度!

Kubernetes Gateway API 刚刚 GA&#xff0c;旨在改进将集群服务暴露给外部的过程。这其中包括一套更标准、更强大的 API资源&#xff0c;用于管理已暴露的服务。在这篇文章中&#xff0c;我将介绍 Gateway API 资源&#xff0c;并以 Istio 为例来展示这些资源是如何关联的。通…

C语言之sizeof 和 strlen 详细介绍

C语言之sizeof 和 strlen 文章目录 C语言之sizeof 和 strlen1. sizeof 和 strlen 的比较1.1 sizeof1.2 strlen1.3 sizeof 和 strlen 的对比 2. 练习2.1.1 一维数组2.1.2 字符数组 1. sizeof 和 strlen 的比较 1.1 sizeof sizeof是C语言中的一个关键字&#xff0c;计算的是变量…

设计模式常见面试题

简单梳理下二十三种设计模式&#xff0c;在使用设计模式的时候&#xff0c;不仅要对其分类了然于胸&#xff0c;还要了解每个设计模式的应用场景、设计与实现&#xff0c;以及其优缺点。同时&#xff0c;还要能区分功能相近的设计模式&#xff0c;避免出现误用的情况。 什么是…