*** empty log message ***
[chuck-blob.git] / exile / v1 / src / midiio_osx.h
blob06edece54cdc19cd420471d80fc3ae7fcf1943ac
1 /*----------------------------------------------------------------------------
2 ChucK Concurrent, On-the-fly Audio Programming Language
3 Compiler and Virtual Machine
5 Copyright (c) 2004 Ge Wang and Perry R. Cook. All rights reserved.
6 http://chuck.cs.princeton.edu/
7 http://soundlab.cs.princeton.edu/
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22 U.S.A.
23 -----------------------------------------------------------------------------*/
25 //-----------------------------------------------------------------------------
26 // file: midiio_osx.h
27 // desc: midi io header for osx
29 // author: Ge Wang (gewang@cs.princeton.edu)
30 // Perry R. Cook (prc@cs.princeton.edu)
31 // Ari Lazier (alazier@cs.princeton.edu)
32 //-----------------------------------------------------------------------------
33 #ifndef __MIDI_IO_H__
34 #define __MIDI_IO_H__
37 #include <CoreMIDI/CoreMIDI.h>
38 #include <pthread.h>
39 #include "util_buffers.h"
42 #ifndef CALLBACK
43 #define CALLBACK
44 #endif
47 //-----------------------------------------------------------------------------
48 // definitions
49 //-----------------------------------------------------------------------------
50 union MidiMsg
52 BYTE__ data[4];
53 DWORD__ dw;
59 //-----------------------------------------------------------------------------
60 // name: class MidiOut
61 // desc: midi out
62 //-----------------------------------------------------------------------------
63 class MidiOut
65 public:
66 MidiOut();
67 ~MidiOut();
69 public:
70 BOOL__ open( int device_num = 0 );
71 BOOL__ close();
72 const char * get_last_error() const;
74 public:
75 UINT__ send( BYTE__ status );
76 UINT__ send( BYTE__ status, BYTE__ data1 );
77 UINT__ send( BYTE__ status, BYTE__ data1, BYTE__ data2 );
78 UINT__ send( const MidiMsg * msg, DWORD__ length = 3 );
79 BOOL__ drain();
81 protected:
82 UINT__ m_device_num;
83 MIDIClientRef m_midi_out;
84 MIDIEndpointRef m_midi_endpoint;
85 MIDIPortRef m_midi_port;
86 char m_msg[1024];
92 //-----------------------------------------------------------------------------
93 // name: class MidiIn
94 // desc: midi
95 //-----------------------------------------------------------------------------
96 class MidiIn
98 public:
99 MidiIn();
100 ~MidiIn();
102 public:
103 BOOL__ open( int device_num = 0 );
104 BOOL__ close();
105 const char * get_last_error() const;
107 public:
108 UINT__ recv( MidiMsg * msg );
110 public:
111 static void midi_in_cb( const MIDIPacketList * list,
112 void * port_data,
113 void * connect_data );
115 protected:
116 UINT__ m_device_num;
117 CBuffer m_buffer;
118 MIDIClientRef m_midi_in;
119 MIDIEndpointRef m_midi_endpoint;
120 MIDIPortRef m_midi_port;
122 pthread_t m_cb_thread_id;
123 pthread_mutex_t m_mutex;
125 char m_msg[1024];
131 #endif