Le Thu, 07 Feb 2013 21:21:59 +0100,
Kjetil Matheussen a écrit :
> William Light:
This is not related to any of the software you mention, but what I am
really missing in linux audio is the ability to plug-in my guitar (or
another instrument), play some melody, and get the
corresponding MIDI notes messages in real-time. As the timbre will
differ from one instrument to another, and even from a player to
another, such a tool should provide a visual way to setup the
parameters, that in order to make it easily usable.
Is is a few applications that claim to be able to do that. By example
but in practice, it is total unusable.
Quote: "Guitarix offers this, Given, you play with good intonation/a
well tuned instrument, it works OK."
I was never able to make it work even with a well tuned guitar.
In the past, I done such a rt conversion on a dsp. It was working very
well but need some parameters to be carefully chosen. The only way to
chose those parameters are with a visual signal analysis. The timbre of
an instrument is unique, vary with the time and with the play. I used a
memory oscilloscope to do this analysis.
I am a lazy bastard that also have a real life, so I never managed to
learn enough C/C++ in order to translate my dsp56k program into a
GNU/linux software. Some said this would be a piece of cake, but that's
not to me.
The algorithm is very simple. The incoming signal need to be rounded in
order to reject the false maximums that can arise (look at the signal
of a good simple humbuking microphone and you will show them) (this
will reject the high frequencies and is very simple and fast to
implement). This is done with a simple arithmetic mean on the successive
input samples. 1 parameter here: the samples number. Another and obvious
parameters is the input threshold level.
In order to easily adjust those 2 parameters, a visualisation GUI is
the best option. It have to show both the incoming signal and the
same signal after the average operation. It would be best if it would
work like a memory oscilloscope, that is define some threshold and
time period the user want to acquire when some incoming signal is
detected, acquire the samples into a ring buffer in a one shot way, and
display them with the ability to change the x axis period and offset.
As a bonus, this will be the best oscilloscope using an audio card on
At that point, 2 separated software can even be made. And yes, I
am missing too a good memory oscilloscope using the audio card on
linux. I know an audio card will never provide the sampling frequency
of a LeCroy, but beside the sampling rate, a GNU/linux oscilloscope
using the audio card is able to provide a lot of the, if not all,
advanced features of a real memory oscilloscope.
After the average is done, and concurrently to it, the program find 2
consecutive maximums of same sign of the signal. A simple comparison (>
or < depending to the sign) of the consecutive samples is enough to do
that. The period of the signal is represented by the number of samples
that separate those 2 consecutive maximums. The program know the
sampling frequency, so, a table can be made with the values of the MIDI
notes for different sampling count intervals, and a simple read of
this table from the number of samples between 2 consecutive maximums
will give the corresponding MIDI note.
The worst case scenario depend on the lowest note that will be played.
The time to find the note = the period of the note + the time between
0 and the first maximum of the signal. I don't know any faster and
simpler algorithm to do that.
P.S.: If you wait for me to adapt this software to GNU/linux, you will
wait much longer than if you, or someone else, do it. I try several
times, but I never managed to get enough time, to learn the C, and like
my life is going, both privately and professionally, this will
unfortunately not append in a foreseeable future.
"We have the heroes we deserve."
Linux-audio-dev mailing list