Forums > MaxMSP

Audio to MIDI

December 8, 2006 | 7:44 pm

I have been developing(with limited success)a patch to send MIDI controller data and note ON/OFF/velocity based on the dynamics of 2 or 3 frequency ranges(Kick,Snare,Hi-Hat). The problem I’m having is in the process of filtering the incoming audio. I consider myself to be quite an audio geek but when it comes to the internal workings of filters and the math behind them, I’m pretty clueless. I can’t seem to build a good adjustable band-pass filter, just a bunch of resonant noise. So I am wondering if anyone has had success with accurate filtering or if anyone has tried to make a similar patch. I even be willing to compensate anyone that has a working example of this. I’ve been working on this for a while and it seems I’ve hit a wall with it. Unfortunately I really need to make this work soon. Any information is sincerely appreciated.
(If anyone is interested in my flawed approach, I’ve attached the text version of my filter)


December 8, 2006 | 10:08 pm

You’d probably have to explore fft~, pfft~, etc. These could be configured to analyze the freq ranges and intensities, then (somehow) you’d have to select from the three outcomes. It sounds a bit tricky but is doable (I imagine).

I’d like to do something similar with vocals triggering MIDI data based upon the sounds created (like a beatbox). Not that easy, I think, but doable if the ranges are different enough.

-CJ


December 8, 2006 | 10:46 pm

there are some externals out there that can help you. specifically the fiddle~ object. that converts audio input to midi data and then you could set a range of notes to trigger your kick, snare, and hihats.
This would be a way of doing it without elaborate filters or diving into fft objects.

http://crca.ucsd.edu/~tapel/software.html
for fiddle~ and other freq analysis externals.

good luck.


December 8, 2006 | 11:41 pm

Awesome! I’m having a look at fiddle~ right now. Looks pretty good so far. I’ll let you know how it goes.


Viewing 4 posts - 1 through 4 (of 4 total)