prensf2010:pitchshifting
Ess | Minim |
---|---|
/* * DoublePitch * * Transposes a pitch up an octave by * "doubling the frequency" of the waveform. * To do this, make a copy of every other sample * in the samples array, which is * analogous to how we scale images. * Playing every other sample takes half the time, * so the second half of the original sound plays * after the transposed sound. * * Created 11 November 2007 by spc */ import krister.Ess.*; AudioChannel ac, copy; void setup() { Ess.start(this); ac = new AudioChannel("c4.wav"); int initialSize = ac.size; // make another to copy from copy = new AudioChannel("c4.wav"); // copy every other sample from the original // AudioChannel to the (first half) of the copy for (int j = 0, i = 0; j ?> initialSize/2; j++, i+=2) { copy.samples[j] = ac.samples[i]; } copy.play(); } void draw() { } void stop() { Ess.stop(); super.stop(); } | import ddf.minim.*; Minim minim; AudioSample sample; void setup(){ minim=new Minim(this); out=minim.getLineOut(); sample=minim.loadSample("c4.wav",60000); sample.addEffect(new ShiftPitch()); } void draw(){} void keyPressed(){ if(sample.isEffected()) sample.disableEffect(0); else sample.enableEffect(0); sample.trigger(); } void stop(){ minim.stop(); super.stop(); } class ShiftPitch implements AudioEffect{ public ShiftPitch(){} void process(float[] sig){ float[] leftChannel=new float[sig.length]; arrayCopy(sig,leftChannel); for (int j = 0, i = 0; j < leftChannel.length/2; j++, i+=2) { sig[j] = leftChannel[i]; } } void process(float[] sigL, float[] sigR){ process(sigL); process(sigR); } } |
prensf2010/pitchshifting.txt · Last modified: 2010/07/02 17:19 by nels_oscar