This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
korg_wavedrum_midification [2014/03/26 17:21] midisaron moved how to add the library to separate chapter |
korg_wavedrum_midification [2015/01/02 11:27] midisaron System Exclusive: changed nibble order to $0l $0h |
||
---|---|---|---|
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: | ||