This shows you the differences between two versions of the page.
acmidiprotocol [2008/07/29 01:37] |
acmidiprotocol [2008/07/29 01:37] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | [[audiocommander|audiocommander's]] ACMidiProtocol implements default CC controllers to enable inter-application and inter-device communication and synching possibilities. | ||
+ | If, for example, two devices have implemented this protocol, one can change the harmony or bpm at one device and the other device automatically changes its harmony/bpm to the new values. | ||
+ | |||
+ | This version can be used for plain C as well as Objective-C: | ||
+ | |||
+ | <code> | ||
+ | /* | ||
+ | * ACMidiProtocol.h | ||
+ | * mX series | ||
+ | * | ||
+ | * Created by audiocommander on 08.03.2007 | ||
+ | * Copyright 2006-2007 Michael Markert, http://www.audiocommander.de | ||
+ | * | ||
+ | * v0.0.1 08.03.07 first version as one protocol document | ||
+ | * v0.0.2 29.03.07 added 4-char scale identifiers | ||
+ | * v0.0.3 01.05.07 added ACMidiProcessing <NSProtocol> | ||
+ | * | ||
+ | * | ||
+ | * description: | ||
+ | * MIDI Definition Listing for AC- & ZS-Applications | ||
+ | * Protocol Definitions for MIDI Controller Numbers | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | /* | ||
+ | * Released under GNU General Public License | ||
+ | * http://www.gnu.org/licenses/gpl.html | ||
+ | * | ||
+ | * 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 | ||
+ | * | ||
+ | * YOU ARE ALLOWED TO COPY AND CHANGE | ||
+ | * BUT YOU MUST RELEASE THE SOURCE TOO (UNDER GNU GPL) IF YOU RELEASE YOUR PRODUCT | ||
+ | * YOU ARE NOT ALLOWED TO USE IT WITHIN PROPRIETARY CLOSED-SOURCE PROJECTS | ||
+ | */ | ||
+ | |||
+ | |||
+ | #ifdef __OBJC__ | ||
+ | #pragma mark Cocoa ACMidiProtocol | ||
+ | | ||
+ | #import <Foundation/Foundation.h> | ||
+ | |||
+ | @protocol ACMidiProcessing <NSCoding> | ||
+ | |||
+ | -(unsigned int)processMIDIMessage:(Byte*)message | ||
+ | ofLength:(unsigned int)length | ||
+ | atTime:(unsigned int)timeStamp; | ||
+ | |||
+ | @end | ||
+ | |||
+ | #endif /* __OBJC__ */ | ||
+ | |||
+ | |||
+ | |||
+ | #ifndef _ACMIDIPROTOCOL_H | ||
+ | #define _ACMIDIPROTOCOL_H | ||
+ | |||
+ | |||
+ | |||
+ | // Protocol Version Number for future compatibily | ||
+ | #define ACMIDICTRLPROTOCOL_VERSION 0x03 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | // ***** CONTROLLER CHANGES ***** | ||
+ | // The CC's use unused entries from the official Midi Tables (ACMidiDefines.h) | ||
+ | // Controllers 14..31 undefined & general purpose & undefined and | ||
+ | // Controllers 80..90 general purpose & undefined | ||
+ | // Controllers 102..119 undefined | ||
+ | #ifdef _DEBUG_C | ||
+ | #pragma mark - | ||
+ | #pragma mark ++ CONTROLLER ++ | ||
+ | #endif | ||
+ | |||
+ | // ** SENSORS / AIN ** | ||
+ | // These are the default CC numbers for sensory measures | ||
+ | // send: YES | ||
+ | // receive: NO | ||
+ | // forward: NO | ||
+ | #ifdef _DEBUG_C | ||
+ | #pragma mark Sensors / AIN | ||
+ | #endif | ||
+ | |||
+ | #define MIDI_CC_SENSOR_A 20 // 0x14 | ||
+ | #define MIDI_CC_SENSOR_B 21 // 0x15 | ||
+ | #define MIDI_CC_SENSOR_C 22 // 0x16 | ||
+ | #define MIDI_CC_SENSOR_D 23 // 0x17 | ||
+ | #define MIDI_CC_SENSOR_E 24 // 0x18 | ||
+ | #define MIDI_CC_SENSOR_F 25 // 0x19 | ||
+ | #define MIDI_CC_SENSOR_G 26 // 0x20 | ||
+ | #define MIDI_CC_SENSOR_H 27 // 0x21 | ||
+ | |||
+ | // ** HARMONY ** | ||
+ | // harmony & scale setting methods | ||
+ | // send: YES if input by HUI | ||
+ | // receive: YES | ||
+ | // forward: NO | ||
+ | #ifdef _DEBUG_C | ||
+ | #pragma mark Harmony | ||
+ | #endif | ||
+ | |||
+ | #define MIDI_CC_HARMONY_BASE 80 // 0x50, 0-11, see MIDI_NOTE_x | ||
+ | #define MIDI_CC_HARMONY_SCALE 81 // 0x51, 0:none, 1-127:scaleNum | ||
+ | #define MIDI_CC_HARMONY_BASE_LISTEN 82 // 0x52, 0-63:OFF, 64-127:ON | ||
+ | #define MIDI_CC_HARMONY_SCALE_RELATIVE_PREV 83 // 0x53, 0-63:OFF, 64-127:ON | ||
+ | #define MIDI_CC_HARMONY_SCALE_RELATIVE_NEXT 84 // 0x54, 0-63:OFF, 64-127:ON | ||
+ | #define MIDI_CC_HARMONY_RANDOM 85 // 0x55, 0x63:OFF, 64-127:ON | ||
+ | #define MIDI_CC_HARMONY_RANDOM_RELATIVE 86 // 0x56, 0x63:OFF, 64-127:ON | ||
+ | |||
+ | #define MIDI_CC_HARMONY_DETECTION 79 // 0x49, 0x63:OFF, 64-127:ON | ||
+ | |||
+ | // ** SCALES ** | ||
+ | // scale names | ||
+ | #ifdef _DEBUG_C | ||
+ | #pragma mark Scales | ||
+ | #endif | ||
+ | |||
+ | #define SCALE_NONE @" " | ||
+ | #define SCALE_AEOLIAN @"AEO " | ||
+ | #define SCALE_AHABA_RABBA @"AHAB" | ||
+ | #define SCALE_ALGERIAN @"ALG " | ||
+ | #define SCALE_ARABIAN @"arab" | ||
+ | #define SCALE_AUGMENTED @"AUGM" | ||
+ | #define SCALE_BLUES @"Blue" | ||
+ | #define SCALE_BLUES_MAJOR @"BLUE" | ||
+ | #define SCALE_BLUES_MINOR @"blue" | ||
+ | #define SCALE_BYZANTINE @"BYZ " | ||
+ | #define SCALE_CHROMATIC @"chro" | ||
+ | #define SCALE_DIATONIC @"DIA " | ||
+ | #define SCALE_DORIAN @"DOR " | ||
+ | #define SCALE_FULLTONE @"FULL" | ||
+ | #define SCALE_GIPSY_MINOR @"gyps" | ||
+ | #define SCALE_HARMONIC_DOUBLE @"hrmD" | ||
+ | #define SCALE_HARMONIC_MINOR @"harm" | ||
+ | #define SCALE_HUNGARIAN_MAJOR @"HUNG" | ||
+ | #define SCALE_HUNGARIAN_MINOR @"hung" | ||
+ | #define SCALE_HUNGARIAN_PERSIAN @"PERH" | ||
+ | #define SCALE_JAPANESE @"JAP " | ||
+ | #define SCALE_JAPANESE_DIMINISHED @"JAPd" | ||
+ | #define SCALE_KUMOI @"KUMO" | ||
+ | #define SCALE_LOCRIAN @"LOC " | ||
+ | #define SCALE_LYDIAN @"LYD " | ||
+ | #define SCALE_MAJOR @"MAJ " | ||
+ | #define SCALE_MELODIC_MAJOR @"MELO" | ||
+ | #define SCALE_MELODIC_MINOR @"melo" | ||
+ | #define SCALE_MINOR @"min " | ||
+ | #define SCALE_MI_SHEBERACH @"MISH" | ||
+ | #define SCALE_MIXOLYDIAN @"MIX " | ||
+ | #define SCALE_MOHAMMEDAN @"MOHA" | ||
+ | #define SCALE_NEOPOLITAN_MAJOR @"NEO " | ||
+ | #define SCALE_NEOPOLITAN_MINOR @"neo " | ||
+ | #define SCALE_ORIENTAL @"ORNT" | ||
+ | #define SCALE_OVERTONE @"OVER" | ||
+ | #define SCALE_PELOG @"PLOG" | ||
+ | #define SCALE_PENTATONIC @"PENT" | ||
+ | #define SCALE_PENTATONIC_BLUES @"PBLU" | ||
+ | #define SCALE_PENTATONIC_MAJOR @"PMAJ" | ||
+ | #define SCALE_PENTATONIC_MINOR @"Pmin" | ||
+ | #define SCALE_PERSIAN @"PERS" | ||
+ | #define SCALE_PHRYGIAN @"PHRY" | ||
+ | #define SCALE_SPANISH @"SPAN" | ||
+ | |||
+ | // indian scales | ||
+ | #define SCALE_INDIAN_ | ||
+ | #define SCALE_INDIAN_ | ||
+ | #define SCALE_INDIAN_BHAVAPRIYA @"BAVA" | ||
+ | #define SCALE_INDIAN_DHATUVARDHANI @"DATU" | ||
+ | #define SCALE_INDIAN_HEMAVITI @"HEMA" | ||
+ | #define SCALE_INDIAN_JHANKARADHVANI @"JHAN" | ||
+ | #define SCALE_INDIAN_KAMAVARDHANI @"KAMA" | ||
+ | #define SCALE_INDIAN_NAVANITAM @"NAVA" | ||
+ | #define SCALE_INDIAN_NITIMATI @"NITI" | ||
+ | #define SCALE_INDIAN_RAGHUPRIYA @"RAGU" | ||
+ | #define SCALE_INDIAN_RAMAPRIYA @"RAMA" | ||
+ | #define SCALE_INDIAN_SALAGAM @"SALA" | ||
+ | #define SCALE_INDIAN_SANMUKHAPRIYA @"SAMU" | ||
+ | #define SCALE_INDIAN_SUBHAPANTUVARALI @"SUBH" | ||
+ | #define SCALE_INDIAN_SUVARNANGI @"SUVA" | ||
+ | |||
+ | |||
+ | // scale-ID's | ||
+ | #define SCALE_ID_NONE 0 | ||
+ | #define SCALE_ID_MAJOR 1 | ||
+ | #define SCALE_ID_MINOR 2 | ||
+ | #define SCALE_ID_HARMONIC_MINOR 3 | ||
+ | #define SCALE_ID_BLUES_MINOR 4 | ||
+ | #define SCALE_ID_BLUES_MAJOR 5 | ||
+ | #define SCALE_ID_DORIAN 6 | ||
+ | #define SCALE_ID_JAPANESE 7 | ||
+ | #define SCALE_ID_JAPANESE_DIMINISHED 8 | ||
+ | #define SCALE_ID_KUMOI 9 | ||
+ | #define SCALE_ID_LOCRIAN 10 | ||
+ | #define SCALE_ID_LYDIAN 11 | ||
+ | #define SCALE_ID_MI_SHEBERACH 12 | ||
+ | #define SCALE_ID_MIXOLYDIAN 13 | ||
+ | #define SCALE_ID_PELOG 14 | ||
+ | #define SCALE_ID_PENTATONIC 15 | ||
+ | #define SCALE_ID_PENTATONIC_BLUES 16 | ||
+ | #define SCALE_ID_PENTATONIC_MAJOR 17 | ||
+ | #define SCALE_ID_PENTATONIC_MINOR 18 | ||
+ | #define SCALE_ID_PHRYGIAN 19 | ||
+ | #define SCALE_ID_SPANISH 20 | ||
+ | |||
+ | |||
+ | // ** QUANTIZERS ** | ||
+ | #ifdef _DEBUG_C | ||
+ | #pragma mark Quantizers | ||
+ | #endif | ||
+ | |||
+ | #define QUANTIZE_BPM 87 // 0: 60bpm to 127: 187bpm | ||
+ | #define QUANTIZE_TOGGLE_NEXT 89 | ||
+ | #define QUANTIZE_SET 90 | ||
+ | |||
+ | #define SYNC_STOP 62 // like System Realtime Stop | ||
+ | #define SYNC_START 63 // like System Realtime Start | ||
+ | |||
+ | |||
+ | |||
+ | #endif /* _ACMIDIPROTOCOL_H */ | ||
+ | </code> |