User Tools

Site Tools


acmidiprotocol

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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>​
acmidiprotocol.txt ยท Last modified: 2008/07/29 01:37 (external edit)