Skip to content

Commit

Permalink
debug midi, works for no pitch bend
Browse files Browse the repository at this point in the history
  • Loading branch information
marchingband committed Sep 23, 2023
1 parent 75cdf5a commit b677d91
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
9 changes: 6 additions & 3 deletions src/midi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ extern "C" uint8_t* midi_parse(uint8_t in)
midiParser.isMidiStatus(midiXparser::noteOnStatus) ||
midiParser.isMidiStatus(midiXparser::noteOffStatus) ||
midiParser.isMidiStatus(midiXparser::programChangeStatus) ||
midiParser.isMidiStatus(midiXparser::controlChangeStatus)
midiParser.isMidiStatus(midiXparser::controlChangeStatus) ||
midiParser.isMidiStatus(midiXparser::pitchBendStatus)
)
{
msg = midiParser.getMidiMsg();
Expand Down Expand Up @@ -76,7 +77,8 @@ extern "C" uint8_t* usb_midi_parse(uint8_t in)
usbMidiParser.isMidiStatus(midiXparser::noteOnStatus) ||
usbMidiParser.isMidiStatus(midiXparser::noteOffStatus) ||
usbMidiParser.isMidiStatus(midiXparser::programChangeStatus) ||
usbMidiParser.isMidiStatus(midiXparser::controlChangeStatus)
usbMidiParser.isMidiStatus(midiXparser::controlChangeStatus) ||
usbMidiParser.isMidiStatus(midiXparser::pitchBendStatus)
)
{
usb_msg = usbMidiParser.getMidiMsg();
Expand Down Expand Up @@ -104,7 +106,8 @@ extern "C" uint8_t* web_midi_parse(uint8_t in)
webMidiParser.isMidiStatus(midiXparser::noteOnStatus) ||
webMidiParser.isMidiStatus(midiXparser::noteOffStatus) ||
webMidiParser.isMidiStatus(midiXparser::programChangeStatus) ||
webMidiParser.isMidiStatus(midiXparser::controlChangeStatus)
webMidiParser.isMidiStatus(midiXparser::controlChangeStatus) ||
webMidiParser.isMidiStatus(midiXparser::pitchBendStatus)
)
{
web_msg = webMidiParser.getMidiMsg();
Expand Down
1 change: 1 addition & 0 deletions src/midi_in.c
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,7 @@ static void handle_midi(uint8_t *msg)
uint8_t fine = msg[1];
uint8_t coarse = msg[2];
channel_pitch_bend[channel] = (coarse << 7) | fine;
// log_e("pb:%d", channel_pitch_bend[channel]);
}
case MIDI_CC:
{
Expand Down
17 changes: 10 additions & 7 deletions src/wav_player.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,10 +235,13 @@ void update_pitch_bends(void)

uint16_t pitch_bend = channel_pitch_bend[i];
s15p16 bend = (pitch_bend << 16) / 8192.0 - ( 1 << 16);
s15p16 semitones = bend >= 0 ? metadata.pitch_bend_semitones_up * bend : metadata.pitch_bend_semitones_down * bend;
s15p16 exponent = semitones / 12;
s15p16 pitch_factor = fxexp2_s15p16(exponent);
pitch_bend_factor[i] = pitch_factor;
s15p16 semitones = bend >= 0 ? 2 * bend : 2 * bend;
// s15p16 semitones = bend >= 0 ? metadata.pitch_bend_semitones_up * bend : metadata.pitch_bend_semitones_down * bend;
s15p16 pitch_factor = fxexp2_s15p16(semitones / 12);
channel_pitch_bend_factor[i] = pitch_factor;
// if(i==0){
// log_e("set %d", pitch_factor); // 58387 (/ 65536)
// }
}
}

Expand Down Expand Up @@ -294,7 +297,7 @@ int16_t IRAM_ATTR scale_sample_clamped_16(int in, uint8_t volume)
{
int16_t out = (in > MAX_INT_16) ? MAX_INT_16 : (in < MIN_INT_16) ? MIN_INT_16 : in;
// return (int16_t)(out * lin_response_lut[volume].val);
return (int16_t)((out * lin_response_lut[vol].val) >> 16);
return (int16_t)((out * lin_response_lut[volume].val) >> 16);
}

bool is_playing(uint8_t voice, uint8_t note)
Expand Down Expand Up @@ -383,7 +386,7 @@ void IRAM_ATTR update_stereo_volume(uint8_t buf)
uint8_t chan = bufs[buf].wav_player_event.channel;
uint32_t left = channel_vol[chan] * channel_exp[chan] * channel_pan[chan].left_vol * bufs[buf].volume;
uint32_t right = channel_vol[chan] * channel_exp[chan] * channel_pan[chan].right_vol * bufs[buf].volume;
bufs[buf].stereo_volume.left = (uint8_t)(left / 2048383); // 127*127*127*127
bufs[buf].stereo_volume.left = (uint8_t)(left / 2048383); // 127*127*127
bufs[buf].stereo_volume.right = (uint8_t)(right / 2048383);
}

Expand Down Expand Up @@ -619,7 +622,7 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
case ONE_SHOT:
{
size_t remaining = bufs[buf].size - bufs[buf].wav_position;
u16p16 step = pitch_factor[buf];
u16p16 step = channel_pitch_bend_factor[bufs[buf].wav_player_event.channel];

if(bufs[buf].fade == 0) // dont update stereo volume while fading
{
Expand Down

0 comments on commit b677d91

Please sign in to comment.