📄 asequencer.h
字号:
/* * Main header file for the ALSA sequencer * Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl> * (c) 1998-1999 by Jaroslav Kysela <perex@suse.cz> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */#ifndef __SOUND_ASEQUENCER_H#define __SOUND_ASEQUENCER_H/** version of the sequencer */#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)/** * definition of sequencer event types *//** system messages * event data type = #snd_seq_result */#define SNDRV_SEQ_EVENT_SYSTEM 0#define SNDRV_SEQ_EVENT_RESULT 1/** note messages (channel specific) * event data type = #snd_seq_ev_note */#define SNDRV_SEQ_EVENT_NOTE 5#define SNDRV_SEQ_EVENT_NOTEON 6#define SNDRV_SEQ_EVENT_NOTEOFF 7#define SNDRV_SEQ_EVENT_KEYPRESS 8 /** control messages (channel specific) * event data type = #snd_seq_ev_ctrl */#define SNDRV_SEQ_EVENT_CONTROLLER 10#define SNDRV_SEQ_EVENT_PGMCHANGE 11#define SNDRV_SEQ_EVENT_CHANPRESS 12#define SNDRV_SEQ_EVENT_PITCHBEND 13 /**< from -8192 to 8191 */#define SNDRV_SEQ_EVENT_CONTROL14 14 /**< 14 bit controller value */#define SNDRV_SEQ_EVENT_NONREGPARAM 15 /**< 14 bit NRPN address + 14 bit unsigned value */#define SNDRV_SEQ_EVENT_REGPARAM 16 /**< 14 bit RPN address + 14 bit unsigned value *//** synchronisation messages * event data type = #snd_seq_ev_ctrl */#define SNDRV_SEQ_EVENT_SONGPOS 20 /* Song Position Pointer with LSB and MSB values */#define SNDRV_SEQ_EVENT_SONGSEL 21 /* Song Select with song ID number */#define SNDRV_SEQ_EVENT_QFRAME 22 /* midi time code quarter frame */#define SNDRV_SEQ_EVENT_TIMESIGN 23 /* SMF Time Signature event */#define SNDRV_SEQ_EVENT_KEYSIGN 24 /* SMF Key Signature event */ /** timer messages * event data type = snd_seq_ev_queue_control */#define SNDRV_SEQ_EVENT_START 30 /* midi Real Time Start message */#define SNDRV_SEQ_EVENT_CONTINUE 31 /* midi Real Time Continue message */#define SNDRV_SEQ_EVENT_STOP 32 /* midi Real Time Stop message */ #define SNDRV_SEQ_EVENT_SETPOS_TICK 33 /* set tick queue position */#define SNDRV_SEQ_EVENT_SETPOS_TIME 34 /* set realtime queue position */#define SNDRV_SEQ_EVENT_TEMPO 35 /* (SMF) Tempo event */#define SNDRV_SEQ_EVENT_CLOCK 36 /* midi Real Time Clock message */#define SNDRV_SEQ_EVENT_TICK 37 /* midi Real Time Tick message */#define SNDRV_SEQ_EVENT_QUEUE_SKEW 38 /* skew queue tempo *//** others * event data type = none */#define SNDRV_SEQ_EVENT_TUNE_REQUEST 40 /* tune request */#define SNDRV_SEQ_EVENT_RESET 41 /* reset to power-on state */#define SNDRV_SEQ_EVENT_SENSING 42 /* "active sensing" event *//** echo back, kernel private messages * event data type = any type */#define SNDRV_SEQ_EVENT_ECHO 50 /* echo event */#define SNDRV_SEQ_EVENT_OSS 51 /* OSS raw event *//** system status messages (broadcast for subscribers) * event data type = snd_seq_addr */#define SNDRV_SEQ_EVENT_CLIENT_START 60 /* new client has connected */#define SNDRV_SEQ_EVENT_CLIENT_EXIT 61 /* client has left the system */#define SNDRV_SEQ_EVENT_CLIENT_CHANGE 62 /* client status/info has changed */#define SNDRV_SEQ_EVENT_PORT_START 63 /* new port was created */#define SNDRV_SEQ_EVENT_PORT_EXIT 64 /* port was deleted from system */#define SNDRV_SEQ_EVENT_PORT_CHANGE 65 /* port status/info has changed *//** port connection changes * event data type = snd_seq_connect */#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED 66 /* ports connected */#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67 /* ports disconnected *//** synthesizer events * event data type = snd_seq_eve_sample_control */#define SNDRV_SEQ_EVENT_SAMPLE 70 /* sample select */#define SNDRV_SEQ_EVENT_SAMPLE_CLUSTER 71 /* sample cluster select */#define SNDRV_SEQ_EVENT_SAMPLE_START 72 /* voice start */#define SNDRV_SEQ_EVENT_SAMPLE_STOP 73 /* voice stop */#define SNDRV_SEQ_EVENT_SAMPLE_FREQ 74 /* playback frequency */#define SNDRV_SEQ_EVENT_SAMPLE_VOLUME 75 /* volume and balance */#define SNDRV_SEQ_EVENT_SAMPLE_LOOP 76 /* sample loop */#define SNDRV_SEQ_EVENT_SAMPLE_POSITION 77 /* sample position */#define SNDRV_SEQ_EVENT_SAMPLE_PRIVATE1 78 /* private (hardware dependent) event *//** user-defined events with fixed length * event data type = any */#define SNDRV_SEQ_EVENT_USR0 90#define SNDRV_SEQ_EVENT_USR1 91#define SNDRV_SEQ_EVENT_USR2 92#define SNDRV_SEQ_EVENT_USR3 93#define SNDRV_SEQ_EVENT_USR4 94#define SNDRV_SEQ_EVENT_USR5 95#define SNDRV_SEQ_EVENT_USR6 96#define SNDRV_SEQ_EVENT_USR7 97#define SNDRV_SEQ_EVENT_USR8 98#define SNDRV_SEQ_EVENT_USR9 99/** instrument layer * variable length data can be passed directly to the driver */#define SNDRV_SEQ_EVENT_INSTR_BEGIN 100 /* begin of instrument management */#define SNDRV_SEQ_EVENT_INSTR_END 101 /* end of instrument management */#define SNDRV_SEQ_EVENT_INSTR_INFO 102 /* instrument interface info */#define SNDRV_SEQ_EVENT_INSTR_INFO_RESULT 103 /* result */#define SNDRV_SEQ_EVENT_INSTR_FINFO 104 /* get format info */#define SNDRV_SEQ_EVENT_INSTR_FINFO_RESULT 105 /* get format info */#define SNDRV_SEQ_EVENT_INSTR_RESET 106 /* reset instrument memory */#define SNDRV_SEQ_EVENT_INSTR_STATUS 107 /* instrument interface status */#define SNDRV_SEQ_EVENT_INSTR_STATUS_RESULT 108 /* result */#define SNDRV_SEQ_EVENT_INSTR_PUT 109 /* put instrument to port */#define SNDRV_SEQ_EVENT_INSTR_GET 110 /* get instrument from port */#define SNDRV_SEQ_EVENT_INSTR_GET_RESULT 111 /* result */#define SNDRV_SEQ_EVENT_INSTR_FREE 112 /* free instrument(s) */#define SNDRV_SEQ_EVENT_INSTR_LIST 113 /* instrument list */#define SNDRV_SEQ_EVENT_INSTR_LIST_RESULT 114 /* result */#define SNDRV_SEQ_EVENT_INSTR_CLUSTER 115 /* cluster parameters */#define SNDRV_SEQ_EVENT_INSTR_CLUSTER_GET 116 /* get cluster parameters */#define SNDRV_SEQ_EVENT_INSTR_CLUSTER_RESULT 117 /* result */#define SNDRV_SEQ_EVENT_INSTR_CHANGE 118 /* instrument change *//* 119-129: reserved *//* 130-139: variable length events * event data type = snd_seq_ev_ext * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set) */#define SNDRV_SEQ_EVENT_SYSEX 130 /* system exclusive data (variable length) */#define SNDRV_SEQ_EVENT_BOUNCE 131 /* error event *//* 132-134: reserved */#define SNDRV_SEQ_EVENT_USR_VAR0 135#define SNDRV_SEQ_EVENT_USR_VAR1 136#define SNDRV_SEQ_EVENT_USR_VAR2 137#define SNDRV_SEQ_EVENT_USR_VAR3 138#define SNDRV_SEQ_EVENT_USR_VAR4 139/* 150-151: kernel events with quote - DO NOT use in user clients */#define SNDRV_SEQ_EVENT_KERNEL_ERROR 150#define SNDRV_SEQ_EVENT_KERNEL_QUOTE 151 /* obsolete *//* 152-191: reserved *//* 192-254: hardware specific events *//* 255: special event */#define SNDRV_SEQ_EVENT_NONE 255typedef unsigned char snd_seq_event_type_t;/** event address */struct snd_seq_addr { unsigned char client; /**< Client number: 0..255, 255 = broadcast to all clients */ unsigned char port; /**< Port within client: 0..255, 255 = broadcast to all ports */};/** port connection */struct snd_seq_connect { struct snd_seq_addr sender; struct snd_seq_addr dest;};#define SNDRV_SEQ_ADDRESS_UNKNOWN 253 /* unknown source */#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS 254 /* send event to all subscribed ports */#define SNDRV_SEQ_ADDRESS_BROADCAST 255 /* send event to all queues/clients/ports/channels */#define SNDRV_SEQ_QUEUE_DIRECT 253 /* direct dispatch */ /* event mode flag - NOTE: only 8 bits available! */#define SNDRV_SEQ_TIME_STAMP_TICK (0<<0) /* timestamp in clock ticks */#define SNDRV_SEQ_TIME_STAMP_REAL (1<<0) /* timestamp in real time */#define SNDRV_SEQ_TIME_STAMP_MASK (1<<0)#define SNDRV_SEQ_TIME_MODE_ABS (0<<1) /* absolute timestamp */#define SNDRV_SEQ_TIME_MODE_REL (1<<1) /* relative to current time */#define SNDRV_SEQ_TIME_MODE_MASK (1<<1)#define SNDRV_SEQ_EVENT_LENGTH_FIXED (0<<2) /* fixed event size */#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE (1<<2) /* variable event size */#define SNDRV_SEQ_EVENT_LENGTH_VARUSR (2<<2) /* variable event size - user memory space */#define SNDRV_SEQ_EVENT_LENGTH_MASK (3<<2)#define SNDRV_SEQ_PRIORITY_NORMAL (0<<4) /* normal priority */#define SNDRV_SEQ_PRIORITY_HIGH (1<<4) /* event should be processed before others */#define SNDRV_SEQ_PRIORITY_MASK (1<<4) /* note event */struct snd_seq_ev_note { unsigned char channel; unsigned char note; unsigned char velocity; unsigned char off_velocity; /* only for SNDRV_SEQ_EVENT_NOTE */ unsigned int duration; /* only for SNDRV_SEQ_EVENT_NOTE */}; /* controller event */struct snd_seq_ev_ctrl { unsigned char channel; unsigned char unused1, unused2, unused3; /* pad */ unsigned int param; signed int value;}; /* generic set of bytes (12x8 bit) */struct snd_seq_ev_raw8 { unsigned char d[12]; /* 8 bit value */}; /* generic set of integers (3x32 bit) */struct snd_seq_ev_raw32 { unsigned int d[3]; /* 32 bit value */}; /* external stored data */struct snd_seq_ev_ext { unsigned int len; /* length of data */ void *ptr; /* pointer to data (note: maybe 64-bit) */} __attribute__((packed));/* Instrument cluster type */typedef unsigned int snd_seq_instr_cluster_t;/* Instrument type */struct snd_seq_instr { snd_seq_instr_cluster_t cluster; unsigned int std; /* the upper byte means a private instrument (owner - client #) */ unsigned short bank; unsigned short prg;}; /* sample number */struct snd_seq_ev_sample { unsigned int std; unsigned short bank; unsigned short prg;}; /* sample cluster */struct snd_seq_ev_cluster { snd_seq_instr_cluster_t cluster;}; /* sample position */typedef unsigned int snd_seq_position_t; /* playback position (in samples) * 16 */ /* sample stop mode */enum { SAMPLE_STOP_IMMEDIATELY = 0, /* terminate playing immediately */ SAMPLE_STOP_VENVELOPE = 1, /* finish volume envelope */ SAMPLE_STOP_LOOP = 2 /* terminate loop and finish wave */}; /* sample frequency */typedef int snd_seq_frequency_t; /* playback frequency in HZ * 16 */ /* sample volume control; if any value is set to -1 == do not change */struct snd_seq_ev_volume { signed short volume; /* range: 0-16383 */ signed short lr; /* left-right balance; range: 0-16383 */ signed short fr; /* front-rear balance; range: 0-16383 */ signed short du; /* down-up balance; range: 0-16383 */}; /* simple loop redefinition */struct snd_seq_ev_loop { unsigned int start; /* loop start (in samples) * 16 */ unsigned int end; /* loop end (in samples) * 16 */};struct snd_seq_ev_sample_control { unsigned char channel; unsigned char unused1, unused2, unused3; /* pad */ union { struct snd_seq_ev_sample sample; struct snd_seq_ev_cluster cluster; snd_seq_position_t position; int stop_mode; snd_seq_frequency_t frequency; struct snd_seq_ev_volume volume; struct snd_seq_ev_loop loop; unsigned char raw8[8]; } param;};/* INSTR_BEGIN event */struct snd_seq_ev_instr_begin { int timeout; /* zero = forever, otherwise timeout in ms */};struct snd_seq_result { int event; /* processed event type */ int result;};struct snd_seq_real_time { unsigned int tv_sec; /* seconds */ unsigned int tv_nsec; /* nanoseconds */};typedef unsigned int snd_seq_tick_time_t; /* midi ticks */union snd_seq_timestamp { snd_seq_tick_time_t tick; struct snd_seq_real_time time;};struct snd_seq_queue_skew { unsigned int value; unsigned int base;}; /* queue timer control */struct snd_seq_ev_queue_control { unsigned char queue; /* affected queue */ unsigned char pad[3]; /* reserved */ union { signed int value; /* affected value (e.g. tempo) */ union snd_seq_timestamp time; /* time */ unsigned int position; /* sync position */ struct snd_seq_queue_skew skew; unsigned int d32[2]; unsigned char d8[8]; } param;}; /* quoted event - inside the kernel only */struct snd_seq_ev_quote { struct snd_seq_addr origin; /* original sender */ unsigned short value; /* optional data */ struct snd_seq_event *event; /* quoted event */} __attribute__((packed)); /* sequencer event */struct snd_seq_event { snd_seq_event_type_t type; /* event type */ unsigned char flags; /* event flags */ char tag; unsigned char queue; /* schedule queue */ union snd_seq_timestamp time; /* schedule time */ struct snd_seq_addr source; /* source address */ struct snd_seq_addr dest; /* destination address */ union { /* event data... */ struct snd_seq_ev_note note; struct snd_seq_ev_ctrl control; struct snd_seq_ev_raw8 raw8; struct snd_seq_ev_raw32 raw32; struct snd_seq_ev_ext ext; struct snd_seq_ev_queue_control queue; union snd_seq_timestamp time; struct snd_seq_addr addr; struct snd_seq_connect connect; struct snd_seq_result result; struct snd_seq_ev_instr_begin instr_begin; struct snd_seq_ev_sample_control sample; struct snd_seq_ev_quote quote; } data;};/* * bounce event - stored as variable size data */struct snd_seq_event_bounce { int err; struct snd_seq_event event; /* external data follows here. */}; /* system information */struct snd_seq_system_info { int queues; /* maximum queues count */ int clients; /* maximum clients count */ int ports; /* maximum ports per client */ int channels; /* maximum channels per port */ int cur_clients; /* current clients */ int cur_queues; /* current queues */ char reserved[24];};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -