File: MidiDeviceImp.cs

package info (click to toggle)
cadencii 3.3.9%2Bsvn20110818.r1732-6
  • links: PTS
  • area: main
  • in suites: buster
  • size: 35,916 kB
  • sloc: cs: 160,836; java: 42,449; cpp: 7,605; ansic: 1,728; perl: 1,087; makefile: 236; php: 142; xml: 117; sh: 21
file content (62 lines) | stat: -rw-r--r-- 1,796 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#if !JAVA
/*
 * MidiDeviceImp.cs
 * Copyright © 2009-2011 kbinani
 *
 * This file is part of org.kbinani.cadencii.
 *
 * org.kbinani.cadencii is free software; you can redistribute it and/or
 * modify it under the terms of the GPLv3 License.
 *
 * org.kbinani.cadencii 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.
 */
using System;
using System.Collections.Generic;
using org.kbinani.media;

namespace org.kbinani.cadencii {

    using boolean = Boolean;

    public class MidiDeviceImp {
        const int CHANNEL = 16;
        private MidiOutDevice s_device;
        private int[] s_last_program = new int[CHANNEL];
        private boolean s_initialized = false;

        public boolean Initialized {
            get {
                return s_initialized;
            }
        }

        public MidiDeviceImp( uint device_id ){
            s_device = new MidiOutDevice( device_id );
            s_initialized = true;
            for ( int i = 0; i < CHANNEL; i++ ) {
                s_last_program[i] = -1;
            }
        }

        public void Play( byte channel, byte program, byte note, byte velocity ) {
            if ( CHANNEL < channel ) {
                return;
            }
            if ( s_last_program[channel] != program ) {
                s_device.ProgramChange( channel, program );
                s_last_program[channel] = program;
            }
            s_device.Play( channel, note, velocity );
        }

        public void Terminate() {
            if ( s_initialized && s_device != null ) {
                s_device.Close();
            }
        }
    }

}
#endif