processing点图形发出音效
时间: 2024-01-08 13:18:01 浏览: 24
在 Processing 中,可以通过使用 `SoundFile` 类来加载和播放音频文件。要将点图形转换为音效,可以使用 `loadPixels()` 方法获取图像的像素数组,然后将每个像素的亮度值映射到音效的频率和振幅上。例如,你可以将亮度值乘以一个固定的倍数来得到频率值,在将其传递给 `oscillate()` 方法中实现音效的播放。
下面是一个简单的示例代码,它将通过鼠标点击产生的点图形转换为音效:
```
import processing.sound.*;
SoundFile sound;
float[] freqs;
void setup() {
size(400, 400);
sound = new SoundFile(this, "sound.wav");
freqs = new float[width];
}
void draw() {
background(255);
loadPixels();
for (int x = 0; x < width; x++) {
float freq = map(brightness(pixels[x]), 0, 255, 100, 1000);
freqs[x] = freq;
stroke(0);
line(x, height, x, height - freq/4);
}
updatePixels();
}
void mousePressed() {
float duration = map(mouseX, 0, width, 0.1, 2);
for (int x = 0; x < width; x++) {
float freq = freqs[x];
float amp = map(x, 0, width, 0.5, 0.1);
sound.play(freq, amp, duration);
}
}
```
在这个示例中,我们加载了一个音频文件 `sound.wav`,并在 `setup()` 函数中初始化了一个与 Processing 程序关联的频率数组 `freqs`。在 `draw()` 函数中,我们获取了图像的像素数组,并将每个像素的亮度值映射到一个固定的频率范围。然后,我们根据每个像素的频率值画了一条垂直线,用于表示音效的振幅。
当鼠标点击屏幕时,我们使用 `play()` 方法播放音效。具体地,我们使用 `freqs` 数组中对应位置的频率值作为音效的频率,使用 `map()` 方法将鼠标点击位置的横坐标映射为音效的持续时间,并使用 `map()` 方法将 `x` 坐标的值映射为音效的振幅。这样,我们就可以通过点击点图形来产生不同的音效了。