User Tools

Site Tools


korg_wavedrum_midification

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
korg_wavedrum_midification [2014/03/26 17:21]
midisaron moved how to add the library to separate chapter
korg_wavedrum_midification [2015/02/09 17:55]
midisaron [MIDIfying the Wavedrum - Software] Updated Software download
Line 39: Line 39:
  
 ====MIDIfying the Wavedrum - Software==== ====MIDIfying the Wavedrum - Software====
-{{:​wavedrum_midi:​wavedrummidi_1_0.zip|Download the source code here}} This does not include the FFT stuff yetI will share it here, but I do have to tidy it up first.LOL+{{:​wavedrum_midi:​wavedrummidi.zip|Download the source code here}} This does include the FFT stuff. ​Still haven'​t tidied ​it up.m(
 ==Capturing the head's and the rim's signals== ==Capturing the head's and the rim's signals==
 The ADC takes a sample every 50 microseconds. When idle, the head piezo, the rim piezos and the force sensor are sampled in turns. When a trigger on the head or on the rim is detected, i. e. a threshold is crossed, the force sensor is temporarily not sampled until 64 samples on the triggered channel (head or rim) are recorded and the event is processed. During that time the non-triggered channel (i. e. head if rim is triggered and vice versa) can still be triggered, so "​simultaneous"​ triggers on head and rim are possible. Because the force sensor is not sampled while the head or rim signal is recorded, the sample rate here is 10 kHz. The ADC takes a sample every 50 microseconds. When idle, the head piezo, the rim piezos and the force sensor are sampled in turns. When a trigger on the head or on the rim is detected, i. e. a threshold is crossed, the force sensor is temporarily not sampled until 64 samples on the triggered channel (head or rim) are recorded and the event is processed. During that time the non-triggered channel (i. e. head if rim is triggered and vice versa) can still be triggered, so "​simultaneous"​ triggers on head and rim are possible. Because the force sensor is not sampled while the head or rim signal is recorded, the sample rate here is 10 kHz.
Line 58: Line 58:
 ===Processing the signals=== ===Processing the signals===
 After 64 samples of the head or rim signal have been captured, a FFT (Fast Fourier Transform) on these samples is performed. This results in 33 (usable) frequency bins representing the spectrum of the signal. I did not program the FFT myself but took it from NXP'​s ​ After 64 samples of the head or rim signal have been captured, a FFT (Fast Fourier Transform) on these samples is performed. This results in 33 (usable) frequency bins representing the spectrum of the signal. I did not program the FFT myself but took it from NXP'​s ​
-[[http://​www.nxp.com/​documents/​application_note/​AN10913_CM3_DSP_library_v1_0_0.zip|AN10913]]. See below How to add the DSP library to the project. A short yet comprehensible introduction into the concept of the FFT including examples on how to use NXP's DSP library is given in [[http://​www.nxp.com/​documents/​application_note/​AN10943.zip|AN10943]].+[[http://​www.nxp.com/​documents/​application_note/​AN10913_CM3_DSP_library_v1_0_0.zip|AN10913]]. See below [[korg_wavedrum_midification#​How to add the DSP library to the project]]. A short yet comprehensible introduction into the concept of the FFT including examples on how to use NXP's DSP library is given in [[http://​www.nxp.com/​documents/​application_note/​AN10943.zip|AN10943]].
 I think it's amazing that the humble LPC1769 can calculate a 64-points-FFT so quickly that the delay is not noticable (at least to me). There are countless ways how the result of a FFT can be used. For the head signal, the high frequency components are stronger when the head is hit with a harder object (drumstick rather than hand), and when it's hit closer to the rim. This way a crude position detection is possible.\\ I think it's amazing that the humble LPC1769 can calculate a 64-points-FFT so quickly that the delay is not noticable (at least to me). There are countless ways how the result of a FFT can be used. For the head signal, the high frequency components are stronger when the head is hit with a harder object (drumstick rather than hand), and when it's hit closer to the rim. This way a crude position detection is possible.\\
 Only the absolute values of the complex frequency bin values are used. The correct formula would be Only the absolute values of the complex frequency bin values are used. The correct formula would be
Line 73: Line 73:
 ===MIDI=== ===MIDI===
 This picture shows how the signals from the sensors are processed and converted to MIDI messages. At the same time this is how the SoundDiver editor window looks like: This picture shows how the signals from the sensors are processed and converted to MIDI messages. At the same time this is how the SoundDiver editor window looks like:
 +
 {{:​wavedrum_midi:​sd_screenshot.jpg?​600|Signal flow}} {{:​wavedrum_midi:​sd_screenshot.jpg?​600|Signal flow}}
  
Line 89: Line 90:
 Various user-settable parameters can be transmitted to the software via MIDI Sysex messages. The bulk dump format is as follows: Various user-settable parameters can be transmitted to the software via MIDI Sysex messages. The bulk dump format is as follows:
  
-$F0 $7D $57 $44 $4D $49 $20 $02 $00 $00 //$0h $0l....$0h $0l// $F7+$F0 $7D $57 $44 $4D $49 $20 $02 $00 $00 //$0l $0h....$0l ​$0h// $F7
  
-The //$0h $0l....$0h $0l// part designates a block of 512 MIDI bytes. These represent 256 parameter bytes ((as in SYSEX_FORMAT 1 in tutorial 025)) which are listed in the table below (numbered from 0 to 255). Some parameters are 16-bit, in these cases the LSByte is sent first.\\+The //$0l $0h....$0l ​$0h// part designates a block of 512 MIDI bytes. These represent 256 parameter bytes ((as in SYSEX_FORMAT 1 in tutorial 025)) which are listed in the table below (numbered from 0 to 255). Some parameters are 16-bit, in these cases the LSByte is sent first.\\
 When the software receives such a message, the parameters are updated. The internal settings can be requested with a dump request: When the software receives such a message, the parameters are updated. The internal settings can be requested with a dump request:
  
korg_wavedrum_midification.txt ยท Last modified: 2015/02/09 17:55 by midisaron