You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hello,
Just a simple question, I hope. : smiling:
I would like to adapt the program from the Minim example. Rather than detecting the beat of an mp3 as was done in your example, I would like to be able to detect the audio signal of the music I play with the audio output of my Mac, or the input of the microphone. (I will plug the audio output into the microphone jack).
I have tried this, but it doesn't work.
`
/**
This sketch demonstrates how to use the BeatDetect object in FREQ_ENERGY mode.
You can use isKick, isSnare, isHat, isRange,
and isOnset(int) to track whatever kind of beats you are looking to track, they will report
true or false based on the state of the analysis. To "tick" the analysis you must call detect
with successive buffers of audio. You can do this inside of draw, but you are likely to miss some
audio buffers if you do this. The sketch implements an AudioListener called BeatListener
so that it can call detect on every buffer of audio processed by the system without repeating a buffer
or missing one.
This sketch plays an entire song so it may be a little slow to load.
For more information about Minim and additional features,
song = minim.loadFile("marcus_kellis_theme.mp3", 1024);
song.play();
song.in();
// a beat detection object that is FREQ_ENERGY mode that
// expects buffers the length of song's buffer size
// and samples captured at songs's sample rate
// beat = new BeatDetect(song.bufferSize(), song.sampleRate());
beat = new BeatDetect(in.bufferSize(), in.sampleRate());
// set the sensitivity to 300 milliseconds
// After a beat has been detected, the algorithm will wait for 300 milliseconds
// before allowing another beat to be reported. You can use this to dampen the
// algorithm if it is giving too many false-positives. The default value is 10,
// which is essentially no damping. If you try to set the sensitivity to a negative value,
// an error will be reported and it will be set to 10 instead.
// note that what sensitivity you choose will depend a lot on what kind of audio
// you are analyzing. in this example, we use the same BeatDetect object for
// detecting kick, snare, and hat, but that this sensitivity is not especially great
// for detecting snare reliably (though it's also possible that the range of frequencies
// used by the isSnare method are not appropriate for the song).
beat.setSensitivity(300);
kickSize = snareSize = hatSize = 16;
// make a new beat listener, so that we won't miss any buffers for the analysis
//bl = new BeatListener(beat, song);
bl = new BeatListener(beat, in);
// draw a green rectangle for every detect band
// that had an onset this frame
float rectW = width / beat.detectSize();
for(int i = 0; i < beat.detectSize(); ++i)
{
// test one frequency band for an onset
if ( beat.isOnset(i) )
{
fill(0,200,0);
rect( i*rectW, 0, rectW, height);
}
}
// draw an orange rectangle over the bands in
// the range we are querying
int lowBand = 5;
int highBand = 15;
// at least this many bands must have an onset
// for isRange to return true
int numberOfOnsetsThreshold = 4;
if ( beat.isRange(lowBand, highBand, numberOfOnsetsThreshold) )
{
fill(232,179,2,200);
rect(rectW*lowBand, 0, (highBand-lowBand)*rectW, height);
}
if ( beat.isKick() ) kickSize = 32;
if ( beat.isSnare() ) snareSize = 32;
if ( beat.isHat() ) hatSize = 32;
I believe detection on the AudioInput will work if you change the type of source in BeatListener to AudioSource. However, it is not typically easy to monitor the sound going out of your Mac if it does not originate from the Processing sketch. Connecting a cable from the output to the input will not work. I'd recommend taking questions like these to the Processing forum, as you can see I'm not checking in here very often.
Hello,
Just a simple question, I hope. : smiling:
I would like to adapt the program from the Minim example. Rather than detecting the beat of an mp3 as was done in your example, I would like to be able to detect the audio signal of the music I play with the audio output of my Mac, or the input of the microphone. (I will plug the audio output into the microphone jack).
I have tried this, but it doesn't work.
`
/**
isKick
,isSnare
, isHat,isRange
,isOnset(int)
to track whatever kind of beats you are looking to track, they will reportdetect
draw
, but you are likely to miss someAudioListener
calledBeatListener
detect
on every buffer of audio processed by the system without repeating a buffer*/
import ddf.minim.;
import ddf.minim.analysis.;
Minim minim;
AudioInput in;
AudioPlayer song;
BeatDetect beat;
BeatListener bl;
float kickSize, snareSize, hatSize;
class BeatListener implements AudioListener
{
private BeatDetect beat;
private AudioPlayer source;
BeatListener(BeatDetect beat, AudioPlayer source)
{
this.source = source;
this.source.addListener(this);
this.beat = beat;
}
void samples(float[] samps)
{
beat.detect(source.mix);
}
void samples(float[] sampsL, float[] sampsR)
{
beat.detect(source.mix);
}
}
void setup()
{
size(512, 200, P3D);
minim = new Minim(this);
in = minim.getLineIn();
song = minim.loadFile("marcus_kellis_theme.mp3", 1024);
song.play();
song.in();
// a beat detection object that is FREQ_ENERGY mode that
// expects buffers the length of song's buffer size
// and samples captured at songs's sample rate
// beat = new BeatDetect(song.bufferSize(), song.sampleRate());
beat = new BeatDetect(in.bufferSize(), in.sampleRate());
// set the sensitivity to 300 milliseconds
// After a beat has been detected, the algorithm will wait for 300 milliseconds
// before allowing another beat to be reported. You can use this to dampen the
// algorithm if it is giving too many false-positives. The default value is 10,
// which is essentially no damping. If you try to set the sensitivity to a negative value,
// an error will be reported and it will be set to 10 instead.
// note that what sensitivity you choose will depend a lot on what kind of audio
// you are analyzing. in this example, we use the same BeatDetect object for
// detecting kick, snare, and hat, but that this sensitivity is not especially great
// for detecting snare reliably (though it's also possible that the range of frequencies
// used by the isSnare method are not appropriate for the song).
beat.setSensitivity(300);
kickSize = snareSize = hatSize = 16;
// make a new beat listener, so that we won't miss any buffers for the analysis
//bl = new BeatListener(beat, song);
bl = new BeatListener(beat, in);
beat.detect(in.mix);
textFont(createFont("Helvetica", 16));
textAlign(CENTER);
}
void draw()
{
background(0);
// draw a green rectangle for every detect band
// that had an onset this frame
float rectW = width / beat.detectSize();
for(int i = 0; i < beat.detectSize(); ++i)
{
// test one frequency band for an onset
if ( beat.isOnset(i) )
{
fill(0,200,0);
rect( i*rectW, 0, rectW, height);
}
}
// draw an orange rectangle over the bands in
// the range we are querying
int lowBand = 5;
int highBand = 15;
// at least this many bands must have an onset
// for isRange to return true
int numberOfOnsetsThreshold = 4;
if ( beat.isRange(lowBand, highBand, numberOfOnsetsThreshold) )
{
fill(232,179,2,200);
rect(rectW*lowBand, 0, (highBand-lowBand)*rectW, height);
}
if ( beat.isKick() ) kickSize = 32;
if ( beat.isSnare() ) snareSize = 32;
if ( beat.isHat() ) hatSize = 32;
fill(255);
textSize(kickSize);
text("KICK", width/4, height/2);
textSize(snareSize);
text("SNARE", width/2, height/2);
textSize(hatSize);
text("HAT", 3*width/4, height/2);
kickSize = constrain(kickSize * 0.95, 16, 32);
snareSize = constrain(snareSize * 0.95, 16, 32);
hatSize = constrain(hatSize * 0.95, 16, 32);
}
`
The text was updated successfully, but these errors were encountered: