• MAX/MSP SDK学习05:A_GIMME方法


    今天终于将A_GIMME方法部分的描述看懂了,上周因为太赶时间加上这文档很抽象一直没看懂。也就那么一回事,记录一下。


    A_GIMME方法用于接收多个参数:

    1. #include "ext.h" // standard Max include, always required
    2. #include "ext_obex.h" // required for new style Max object
    3. typedef struct _gimme {
    4. t_object ob; // the object itself (must be first)
    5. /* 自定义属性 */
    6. } t_gimme;
    7. void* gimme_new(t_symbol* s, long argc, t_atom* argv);
    8. void gimme_free(t_gimme* x);
    9. void gimme_assist(t_gimme* x, void* b, long m, long a, char* s);
    10. // 自定义函数
    11. void gimme_printArgs(t_gimme* x, t_symbol* s, long argc, t_atom* argv);
    12. void* gimme_class;
    13. void ext_main(void* r) {
    14. t_class* c;
    15. // "gimme" 建议和项目名一样,否则在max/msp中创建自定义组件会出问题
    16. c = class_new("gimme", (method)gimme_new, (method)gimme_free, (long)sizeof(t_gimme),
    17. 0L /* leave NULL!! */, A_GIMME, 0);
    18. /* you CAN'T call this from the patcher */
    19. class_addmethod(c, (method)gimme_assist, "assist", A_CANT, 0);
    20. // 注意:这里的"gimme"为自定义的消息选择器,会被加入消息选择器表中;而"anything"为消息选择器表内置
    21. // 自定义消息选择器
    22. class_addmethod(c, (method)gimme_printArgs, "gimme", A_GIMME, 0);
    23. class_register(CLASS_BOX, c); /* CLASS_NOBOX */
    24. gimme_class = c;
    25. post("I am the gimme object");
    26. }
    27. void gimme_assist(t_gimme* x, void* b, long m, long a, char* s) {
    28. if (m == ASSIST_INLET) { // inlet
    29. sprintf(s, "I am inlet %ld", a);
    30. } else { // outlet
    31. sprintf(s, "I am outlet %ld", a);
    32. }
    33. }
    34. void gimme_free(t_gimme* x) {
    35. ;
    36. }
    37. /* argc指在创建组件时,直接跟在组件后面的参数个数;argv存储参数具体值*/
    38. void* gimme_new(t_symbol* s, long argc, t_atom* argv) {
    39. t_gimme* x = NULL;
    40. long i;
    41. x = (t_gimme*)object_alloc(gimme_class);
    42. return (x);
    43. }
    44. // 接收多个参数,并打印所有参数
    45. void gimme_printArgs(t_gimme* x, t_symbol* s, long argc, t_atom* argv) {
    46. long i;
    47. t_atom* ap = argv;
    48. for (int i = 0; i < argc; i++) {
    49. switch (atom_gettype(ap)) {
    50. case A_LONG:
    51. post("arg %ld: %ld", i, atom_getlong(ap));
    52. break;
    53. case A_FLOAT:
    54. post("arg %ld: %lf", i, atom_getfloat(ap));
    55. break;
    56. case A_SYM:
    57. post("arg %ld: %s", i, atom_getsym(ap)->s_name);
    58. break;
    59. default:
    60. post("%ld, unknown atom type: %ld", i, atom_gettype(ap));
    61. break;
    62. }
    63. ap++;
    64. }
    65. }

    运行结果:

  • 相关阅读:
    windows+python实现自动化部署
    一、C#冒泡排序算法
    LeetCode-268(Python)—— 丢失的数字
    decimal.js 中文文档
    零宽空格引发的问题
    OpenLayers-要素属性信息简单弹窗
    计算机毕业设计java共享单车小程序源码
    芯科科技推出新的8位MCU系列产品,扩展其强大的MCU平台
    每日刷题记录 (六)
    如何去推动自己团队所提出的需求
  • 原文地址:https://blog.csdn.net/qq_38967414/article/details/134538878