我有两个按钮,当单击一个按钮时,它会启动一个while
语句。该while
语句播放音符,这是一首长旋律。现在我希望当不再单击按钮时,while 语句会立即停止并且不再播放旋律。
现在我有一个简单的 while 语句 - 我试过break;
但没有解决它。
我有两个按钮,当单击一个按钮时,它会启动一个while
语句。该while
语句播放音符,这是一首长旋律。现在我希望当不再单击按钮时,while 语句会立即停止并且不再播放旋律。
现在我有一个简单的 while 语句 - 我试过break;
但没有解决它。
您尚未发布有关您的 while 语句的任何代码。根据您的描述,这听起来很简单:
从我的角度来看,这很简单if/else
,因此只需注册鼠标事件,例如mousePressed
和mouseReleased
(因为单击本质上是一对由按下然后释放组成的)来切换声音更新。我不是声音/音符/旋律方面的专家,但这里是 Minim SineWaveSignal Processing 示例的修改版本:
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput out;
SineWave sine;
float freq = 60;
void setup()
{
size(512, 200, P2D);
minim = new Minim(this);
out = minim.getLineOut(Minim.STEREO);
sine = new SineWave(440, 0.5, out.sampleRate());
sine.portamento(200);
sine.setAmp(0);
out.addSignal(sine);
}
void draw()
{
background(0);
stroke(255);
//update sound only if mouse is pressed
if(mousePressed){
freq += 10;//in this case I'm updating the frequency
if(freq > 1500) freq = 60;//change melody according to time delays/etc. here
sine.setFreq(freq);
}
// 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);
}
}
//updated sound "while" mouse is clicked (press+release)
void mousePressed(){
sine.setAmp(.75);
}
void mouseReleased(){//reset, kill volume/amp and reset freq, in your case return to 1st note of melody for example
freq = 60;
sine.setAmp(0);
}
void stop()
{
out.close();
minim.stop();
super.stop();
}