From be62826a0e1dd23a82f3d52158f66aa82eb9a369 Mon Sep 17 00:00:00 2001 From: wirsing Date: Thu, 17 Jul 2014 15:29:13 -0700 Subject: [PATCH] AudioInput works now --- .../examples/IO/AudioInput/AudioInput.pde | 46 +++++++++++++++++++ .../processing_sound_MethClaInterface.h | 12 ++++- .../cpp/processing_sound_MethClaInterface.cpp | 26 ++++++++--- .../sound/src/processing/sound/AudioIn.java | 9 ++-- .../sound/src/processing/sound/Engine.java | 11 ++++- .../processing/sound/MethClaInterface.java | 4 +- .../src/processing/sound/Oscillator.java | 13 +----- .../sound/src/processing/sound/PinkNoise.java | 6 ++- 8 files changed, 98 insertions(+), 29 deletions(-) create mode 100644 java/libraries/sound/examples/IO/AudioInput/AudioInput.pde diff --git a/java/libraries/sound/examples/IO/AudioInput/AudioInput.pde b/java/libraries/sound/examples/IO/AudioInput/AudioInput.pde new file mode 100644 index 000000000..59afab706 --- /dev/null +++ b/java/libraries/sound/examples/IO/AudioInput/AudioInput.pde @@ -0,0 +1,46 @@ +/* +Be Careful with your speaker volume, you might produce a painful +feedback. We recommend to wear headphones for this example. + +*/ + +import processing.sound.*; + +AudioIn input; +Amplitude rms; + +int scale=1; + +void setup() { + size(640,360); + background(255); + + //Create an Audio input and grab the 1st channel + input = new AudioIn(this, 0); + + // start the Audio Input + input.play(); + + // create a new Amplitude analyzer + rms = new Amplitude(this); + + // Patch the input to an volume analyzer + rms.input(input); +} + + +void draw() { + background(125,255,125); + + // adjust the volume of the audio input + input.amp(map(mouseY, 0, height, 0.0, 1.0)); + + // rms.analyze() return a value between 0 and 1. To adjust + // the scaling and mapping of an ellipse we scale from 0 to 0.5 + scale=int(map(rms.analyze(), 0, 0.5, 1, 350)); + noStroke(); + + fill(255,0,150); + // We draw an ellispe coupled to the audio analysis + ellipse(width/2, height/2, 1*scale, 1*scale); +} diff --git a/java/libraries/sound/src/cpp/include/processing_sound_MethClaInterface.h b/java/libraries/sound/src/cpp/include/processing_sound_MethClaInterface.h index 250633821..5fcfdd911 100644 --- a/java/libraries/sound/src/cpp/include/processing_sound_MethClaInterface.h +++ b/java/libraries/sound/src/cpp/include/processing_sound_MethClaInterface.h @@ -114,10 +114,10 @@ JNIEXPORT void JNICALL Java_processing_sound_MethClaInterface_pulseSet /* * Class: processing_sound_MethClaInterface * Method: audioInPlay - * Signature: (FFFZ)[I + * Signature: (FFFI)[I */ JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_audioInPlay - (JNIEnv *, jobject, jfloat, jfloat, jfloat, jboolean); + (JNIEnv *, jobject, jfloat, jfloat, jfloat, jint); /* * Class: processing_sound_MethClaInterface @@ -295,6 +295,14 @@ JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_reverbPlay JNIEXPORT void JNICALL Java_processing_sound_MethClaInterface_reverbSet (JNIEnv *, jobject, jfloat, jfloat, jfloat, jint); +/* + * Class: processing_sound_MethClaInterface + * Method: out + * Signature: (I[I)V + */ +JNIEXPORT void JNICALL Java_processing_sound_MethClaInterface_out + (JNIEnv *, jobject, jint, jintArray); + /* * Class: processing_sound_MethClaInterface * Method: amplitude diff --git a/java/libraries/sound/src/cpp/processing_sound_MethClaInterface.cpp b/java/libraries/sound/src/cpp/processing_sound_MethClaInterface.cpp index 2d0adef8d..a8c1a8669 100644 --- a/java/libraries/sound/src/cpp/processing_sound_MethClaInterface.cpp +++ b/java/libraries/sound/src/cpp/processing_sound_MethClaInterface.cpp @@ -451,13 +451,12 @@ JNIEXPORT void JNICALL Java_processing_sound_MethClaInterface_pulseSet(JNIEnv *e env->ReleaseIntArrayElements(nodeId, m_nodeId, 0); }; -JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_audioInPlay(JNIEnv *env, jobject object, jfloat amp, jfloat add, jfloat pos, jboolean out){ +JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_audioInPlay(JNIEnv *env, jobject object, jfloat amp, jfloat add, jfloat pos, jint in){ jintArray nodeId = env->NewIntArray(2); jint *m_nodeId = env->GetIntArrayElements(nodeId, NULL); Methcla::AudioBusId bus = m_engine->audioBusId().alloc(); - Methcla::AudioBusId in = m_engine->audioBusId().alloc(); Methcla::Request request(engine()); request.openBundle(Methcla::immediately); @@ -471,11 +470,11 @@ JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_audioInPlay(J auto pan = request.synth( METHCLA_PLUGINS_PAN2_URI, engine().root(), - {pos, 0}, + {pos, 1.f}, {Methcla::Value(1.f)} ); - request.mapInput(synth.id(), 0, in, Methcla::kBusMappingExternal); + request.mapInput(synth.id(), 0, Methcla::AudioBusId(in), Methcla::kBusMappingExternal); request.mapOutput(synth.id(), 0, bus); request.mapInput(pan.id(), 0, bus); @@ -490,7 +489,7 @@ JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_audioInPlay(J request.send(); m_nodeId[0]=synth.id(); - m_nodeId[1]=pan.id(); + m_nodeId[1]= pan.id(); env->ReleaseIntArrayElements(nodeId, m_nodeId, 0); @@ -1027,6 +1026,7 @@ JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_delayPlay(JNI Methcla::Request request(engine()); request.openBundle(Methcla::immediately); + auto synth = request.synth( METHCLA_PLUGINS_DELAY_URI, Methcla::NodePlacement::after(m_nodeId[0]), @@ -1053,7 +1053,6 @@ JNIEXPORT jintArray JNICALL Java_processing_sound_MethClaInterface_delayPlay(JNI return returnId; }; - JNIEXPORT void JNICALL Java_processing_sound_MethClaInterface_delaySet(JNIEnv *env, jobject object, jfloat delayTime, jfloat feedBack, jint nodeId){ Methcla::Request request(engine()); request.openBundle(Methcla::immediately); @@ -1293,3 +1292,18 @@ JNIEXPORT jint JNICALL Java_processing_sound_MethClaInterface_out(JNIEnv *env, j }; */ +JNIEXPORT void JNICALL Java_processing_sound_MethClaInterface_out(JNIEnv *env, jobject object, jint out, jintArray nodeId){ + + jint* m_nodeId = env->GetIntArrayElements(nodeId, 0); + + Methcla::Request request(engine()); + request.openBundle(Methcla::immediately); + + request.mapOutput(m_nodeId[0], 0, Methcla::AudioBusId(out), Methcla::kBusMappingExternal); + + request.closeBundle(); + request.send(); + + env->ReleaseIntArrayElements(nodeId, m_nodeId, 0); +}; + diff --git a/java/libraries/sound/src/processing/sound/AudioIn.java b/java/libraries/sound/src/processing/sound/AudioIn.java index 382d4de3d..42f572972 100644 --- a/java/libraries/sound/src/processing/sound/AudioIn.java +++ b/java/libraries/sound/src/processing/sound/AudioIn.java @@ -2,25 +2,26 @@ package processing.sound; import processing.core.PApplet; -public class AudioIn { +public class AudioIn implements SoundObject{ PApplet parent; private Engine m_engine; private int[] m_nodeId = {-1,-1}; private float m_amp = 1.f; private float m_add = 0; - private boolean m_out = true; + private int m_in = 0; private float m_pos = 0; - public AudioIn(PApplet theParent) { + public AudioIn (PApplet theParent, int in) { this.parent = theParent; parent.registerMethod("dispose", this); m_engine.setPreferences(theParent, 512, 44100); m_engine.start(); + m_in = in; } public void play(){ - m_nodeId = m_engine.audioInPlay(m_amp, m_add, m_pos, m_out); + m_nodeId = m_engine.audioInPlay(m_amp, m_add, m_pos, m_in); } public void play(float amp, float add, float pos){ diff --git a/java/libraries/sound/src/processing/sound/Engine.java b/java/libraries/sound/src/processing/sound/Engine.java index 07cca75e0..7052996b6 100644 --- a/java/libraries/sound/src/processing/sound/Engine.java +++ b/java/libraries/sound/src/processing/sound/Engine.java @@ -105,8 +105,8 @@ public class Engine { // AudioIn - public static int[] audioInPlay(float amp, float add, float pos, boolean out){ - return methCla.audioInPlay(amp, add, pos, out); + public static int[] audioInPlay(float amp, float add, float pos, int in){ + return methCla.audioInPlay(amp, add, pos, in); }; public static void audioInSet(float amp, float add, float pos, int[] nodeId){ @@ -241,6 +241,13 @@ public class Engine { methCla.destroy_fft(ptr); }; + // Out + + public static void out(int out, int[] nodeId){ + methCla.out(out, nodeId); + }; + + public static void engineStop() { methCla.engineStop(); } diff --git a/java/libraries/sound/src/processing/sound/MethClaInterface.java b/java/libraries/sound/src/processing/sound/MethClaInterface.java index ae5b1c455..51e5078f9 100644 --- a/java/libraries/sound/src/processing/sound/MethClaInterface.java +++ b/java/libraries/sound/src/processing/sound/MethClaInterface.java @@ -52,7 +52,7 @@ public class MethClaInterface // Audio In - public native int[] audioInPlay(float amp, float add, float pos, boolean out); + public native int[] audioInPlay(float amp, float add, float pos, int in); public native void audioInSet(float amp, float add, float pos, int[] nodeId); @@ -120,7 +120,7 @@ public class MethClaInterface // Pan + Out - // public native int out(float pos, int nodeId); + public native void out(int out, int[] nodeId); // connect diff --git a/java/libraries/sound/src/processing/sound/Oscillator.java b/java/libraries/sound/src/processing/sound/Oscillator.java index 3ad893013..94eb2f61d 100644 --- a/java/libraries/sound/src/processing/sound/Oscillator.java +++ b/java/libraries/sound/src/processing/sound/Oscillator.java @@ -6,18 +6,7 @@ public interface Oscillator extends SoundObject { public void play(float freq, float amp, float add); public void play(float freq, float amp); public void play(); - /* for modulation - public void play(Oscillator freq, float amp, float add); - public void play(Oscillator freq, float amp); - public void play(float freq, Oscillator amp, float add); - public void play(float freq, Oscillator amp); - public void play(float freq, float amp, Oscillator add); - public void play(Oscillator freq, Oscillator amp, float add); - public void play(Oscillator freq, Oscillator amp); - public void play(float freq, Oscillator amp, Oscillator add); - public void play(Oscillator freq, float amp, Oscillator add); - public void play(Oscillator freq, Oscillator amp, Oscillator add); - */ + public void freq(float freq); public void amp(float amp); public void add(float add); diff --git a/java/libraries/sound/src/processing/sound/PinkNoise.java b/java/libraries/sound/src/processing/sound/PinkNoise.java index 79ca3518d..45d557c9b 100644 --- a/java/libraries/sound/src/processing/sound/PinkNoise.java +++ b/java/libraries/sound/src/processing/sound/PinkNoise.java @@ -61,7 +61,11 @@ public class PinkNoise implements SoundObject{ m_pos=pos; this.set(); } - +/* + public void out(int out){ + m_engine.out(out, m_nodeId); + } +*/ public void stop(){ m_engine.synthStop(m_nodeId); }