Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Processing 处理最小多个正弦波声音时会出现断断续续_Processing_Minim - Fatal编程技术网

Processing 处理最小多个正弦波声音时会出现断断续续

Processing 处理最小多个正弦波声音时会出现断断续续,processing,minim,Processing,Minim,我正在尝试制作一个处理应用程序,现在,它将根据按下的键来播放音符——将来,我将用Arduino整数输入替换这些键。 当我只弹奏一个音符(正弦波)时,听起来不错,但当我弹奏多个音符时,声音会变得非常起伏,一点也不像演奏的音符组合。我将如何着手解决这个问题? 另外,我发现当我松开钥匙时,正弦波的中心位置与原来的不同。为什么会这样 import ddf.minim.*; import ddf.minim.signals.*; import ddf.minim.ugens.*; import p

我正在尝试制作一个处理应用程序,现在,它将根据按下的键来播放音符——将来,我将用Arduino整数输入替换这些键。 当我只弹奏一个音符(正弦波)时,听起来不错,但当我弹奏多个音符时,声音会变得非常起伏,一点也不像演奏的音符组合。我将如何着手解决这个问题? 另外,我发现当我松开钥匙时,正弦波的中心位置与原来的不同。为什么会这样

    import ddf.minim.*;
import ddf.minim.signals.*;
import ddf.minim.ugens.*;
import processing.serial.*;

Minim minim;
AudioOutput out;
SineWave sinea;
SineWave sineb;
SineWave sinec;

void setup()
{
  size(displayWidth, displayHeight, P3D);

  minim = new Minim(this);
  out = minim.getLineOut(Minim.MONO);
  sinea = new SineWave(440.00,1,out.sampleRate());
  sineb = new SineWave(493.88,1,out.sampleRate());
  sinec = new SineWave(523.25,1,out.sampleRate());
  sinea.portamento(200);
  sineb.portamento(200);
  sinec.portamento(200);
  out.addSignal(sinea);
  out.addSignal(sineb);
  out.addSignal(sinec);
  sinea.setFreq(0);
  sineb.setFreq(0);
  sinec.setFreq(0);
  smooth();
  stroke(255);
  strokeWeight(3);
}

void draw() {
  background(0);
  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, height/2 + out.right.get(i)*100, x2, height/2 + out.mix.get(i+1)*100);
  }
}


void keyPressed() {
  switch (key) {
    case 'a':
      sinea.setFreq(440);
      break;
    case 'b':
      sineb.setFreq(493.88);
      break;
    case'c':
      sinec.setFreq(523.25);
      break;
  }
}

void keyReleased() {
  switch (key) {
    case 'a':
      sinea.setFreq(0);
      break;
    case 'b':
      sineb.setFreq(0);
      break;
    case'c':
      sinec.setFreq(0);
      break;
  }
}

void stop() {
  out.close();
  minim.stop();
  super.stop();
}
导入ddf.minim.*;
输入ddf最小信号。*;
进口ddf.minim.ugens.*;
输入处理。串行。*;
极小极小;
音频输出;
正弦波正弦;
正弦波;
正弦波正弦;
无效设置()
{
尺寸(显示宽度、显示高度、P3D);
最小值=新的最小值(本);
out=最小getLineOut(最小单声道);
sinea=新正弦波(440.00,1,out.sampleRate());
sineb=新正弦波(493.88,1,out.sampleRate());
sinec=新正弦波(523.25,1,out.sampleRate());
西尼亚·波塔门托(200);
波塔门托(200);
门塔门托(200);
out.addSignal(sinea);
out.addSignal(sineb);
输出。添加信号(sinec);
sinea.setFreq(0);
正弦设置频率(0);
正弦设定频率(0);
光滑的();
中风(255);
冲程重量(3);
}
作废提款(){
背景(0);
对于(int i=0;i
遗憾的是,当我发现这类问题并开始深入研究库时,我发现不太好的繁忙循环和/或部分在禁用中断的情况下持续时间过长

该实现通常在某种“演示”模式下工作,但当人们试图以更严肃的方式真正使用它时,它就会崩溃

你很可能是同一个场景的受害者

我想玩两个波只会产生一些中间结果

您可以选择:

  • 翻阅库并分析/检查代码,以确定大部分时间都花在了什么地方——这可能会让人望而生畏,但很有教育意义

  • 做你自己的实现——和上面一样,取决于你的编码技巧和对问题和底层实现的理解,容易还是难