⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sinewavesignal.pde

📁 This is processing for java examples.
💻 PDE
字号:
/** * Sine Wave Signal * by Damien Di Fede. *   * This sketch demonstrates how to use a <code>SineWave</code> with  * an <code>AudioOutput</code>. Move the mouse up and down to change  * the frequency, left and right to change the panning. *  * <code>SineWave</code> is a subclass of <code>Oscillator</code>, which  * is an abstract class that implements the interface <code>AudioSignal</code>. * This means that it can be added to an <code>AudioOutput</code> and the  * <code>AudioOutput</code> will call one of the two <code>generate()</code>  * functions, depending on whether the AudioOutput is STEREO or MONO.  * Since it is an abstract class, it can't be directly instantiated, it  * merely provides the functionality of smoothly changing frequency, amplitude  * and pan. In order to have an <code>Oscillator</code> that actually  * produces sound, you have to extend <code>Oscillator</code> and define  * the value function. This function takes a <b>step</b> value and returns  * a sample value between -1 and 1. In the case of the SineWave, * the value function returns this: <b>sin(freq * TWO_PI * step)</b> * <b>freq</b> is the current frequency (in Hertz) of the <code>Oscillator</code>.  * It is multiplied by <b>TWO_PI</b> to set the period of the sine wave  * properly and then that sine wave is sampled at <b>step</b>. */import ddf.minim.*;import ddf.minim.signals.*;Minim minim;AudioOutput out;SineWave sine;void setup(){  size(512, 200, P2D);    minim = new Minim(this);  // get a line out from Minim, default bufferSize is 1024, default sample rate is 44100, bit depth is 16  out = minim.getLineOut(Minim.STEREO);  // create a sine wave Oscillator, set to 440 Hz, at 0.5 amplitude, sample rate from line out  sine = new SineWave(440, 0.5, out.sampleRate());  // set the portamento speed on the oscillator to 200 milliseconds  sine.portamento(200);  // add the oscillator to the line out  out.addSignal(sine);}void draw(){  background(0);  stroke(255);  // draw the waveforms  for(int i = 0; i < out.bufferSize() - 1; i++)  {    float x1 = map(i, 0, out.bufferSize(), 0, width);    float x2 = map(i+1, 0, out.bufferSize(), 0, width);    line(x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50);    line(x1, 150 + out.right.get(i)*50, x2, 150 + out.right.get(i+1)*50);  }}void mouseMoved(){  // with portamento on the frequency will change smoothly  float freq = map(mouseY, 0, height, 1500, 60);  sine.setFreq(freq);  // pan always changes smoothly to avoid crackles getting into the signal  // note that we could call setPan on out, instead of on sine  // this would sound the same, but the waveforms in out would not reflect the panning  float pan = map(mouseX, 0, width, -1, 1);  sine.setPan(pan);}void stop(){  out.close();  minim.stop();    super.stop();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -