summaryrefslogtreecommitdiff
path: root/src/midimapper.cc
blob: 1d2c7a845baeff5c3f04d89bc7ff876a71c42272 (plain)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/***************************************************************************
 *            midimapper.cc
 *
 *  Mon Jul 21 15:24:08 CEST 2008
 *  Copyright 2008 Bent Bisballe Nyeng
 *  deva@aasimon.org
 ****************************************************************************/

/*
 *  This file is part of DrumGizmo.
 *
 *  DrumGizmo 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.
 *
 *  DrumGizmo 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 DrumGizmo; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
 */
#include "midimapper.h"

#define NOTE_ON 0x90

MidiMapper::MidiMapper(DrumKit *drumkit)
{
  this->drumkit = drumkit;
  /*
35  Acoustic Bass Drum  59  Ride Cymbal 2
36  Bass Drum 1         60  Hi Bongo
37  Side Stick          61  Low Bongo
38  Acoustic Snare      62  Mute Hi Conga
39  Hand Clap           63  Open Hi Conga
40  Electric Snare      64  Low Conga
41  Low Floor Tom       65  High Timbale
42  Closed Hi-Hat       66  Low Timbale
43  High Floor Tom      67  High Agogo
44  Pedal Hi-Hat        68  Low Agogo
45  Low Tom             69  Cabasa
46  Open Hi-Hat         70  Maracas
47  Low-Mid Tom         71  Short Whistle
48  Hi-Mid Tom          72  Long Whistle
49  Crash Cymbal 1      73  Short Guiro
50  High Tom            74  Long Guiro
51  Ride Cymbal 1       75  Claves
52  Chinese Cymbal      76  Hi Wood Block
53  Ride Bell           77  Low Wood Block
54  Tambourine          78  Mute Cuica
55  Splash Cymbal       79  Open Cuica
56  Cowbell             80  Mute Triangle
57  Crash Cymbal 2      81  Open Triangle
58  Vibraslap
  */
}

//http://ccrma-www.stanford.edu/~craig/articles/linuxmidi/misc/essenmidi.html
Sample *MidiMapper::map(jack_midi_event_t event)
{
  Sample *sample = NULL;

  if(event.size != 3) return NULL;
  if(event.buffer[0] != NOTE_ON) return NULL;

  int key = event.buffer[1];
  int velocity = event.buffer[2];

  if(velocity == 0) return NULL;
  /*
  // Parse midi event
  printf("[ Time: %d  Size: %d  ", event.time, event.size);
  for(size_t j = 0; j < event.size; j++) {
    jack_midi_data_t m = event.buffer[j];
    printf("  Data: %d ", m);
  }
  printf("]\n");
  */
  if(drumkit->instruments.find(key) == drumkit->instruments.end()) {
    printf("Unknown intrsument %d\n", key);
    return NULL;
  }

  Velocity *v = drumkit->instruments[key]->getVelocity(velocity);
  
  if(!v) return NULL;
  sample = v->getSample();

  return sample;
}