我想用Processing和Arduino制作简单的音序器。
我的理想是:
- 在 Arduino 上安装变阻器并将模拟序列号发送到处理。
- 声音的音量会随着变阻器处理时的模拟量而变化。
我尝试过并做了什么:
- 导入并使用 Minim。
- 成功将变阻器的模拟量从Arduino发送到Processing
- 设置 float 的模拟量
- 在 void Loop() 上使用 setGain(volume) 但音量没有改变。
- 在 void Loop() 上使用 setVolume(volume) 但音量没有改变。
当声音开始播放时,声音的音量仅改变一次。
我尝试使用 ESS,但即使我将其放入 Process's Libraries 的文件夹中,也无法导入该库。
我可以通过在处理中播放声音来更改音量吗?
这是我的绳子:
import processing.serial.*;
Serial myPort;
int number;
float volume;
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;
AudioPlayer player;
int BUFFER_SIZE = 256;
Minim minim;
void setup() {
myPort = new Serial(this, "/dev/cu.usbmodem0000", 9600);
minim = new Minim(this);
player = minim.loadFile("music02.mp3", BUFFER_SIZE);
volume = -60;
player.setGain(-10);
//player.setVolume(-10);
delay(200);
player.loop();
}
void draw() {
player.setGain(volume);
//player.setVolume(volume);
}
void serialEvent(Serial port) {
println(port.read());
volume = port.read();
println(volume);
delay(200);
}
谢谢。
最佳答案
您似乎从 Arduino 正确读取了该值,但您没有将其缩放/映射到最小值所期望的值。
看起来您可能正在从 Arduino 读取一个字节,因此您的值从 0 到 255,但 minim 的 setVolume()需要 0.0 到 1.0 之间的浮点值
你可以尝试这样的事情:
void serialEvent(Serial port) {
println(port.read());
volume = map(port.read(),0,255,0.0,1.0);
println(volume);
delay(200);
}
这与以下操作相同
void serialEvent(Serial port) {
println(port.read());
volume = port.read() / 255.0;
println(volume);
delay(200);
}
假设您从 Arduino 获得的值是从 0-255(如果您使用 analogRead() 读取电位计,您将处理从 0-1023 的值,因此请务必在将它们发送到处理之前将其除以 4。
关于使用 map() 的一件好事如果您愿意,您可以反转音量:
volume = map(port.read(),0,255,1.0,0.0);
玩得开心!
更新 baoga 提出了关于 setVolume 不起作用的好观点。 我在控制台中看到这个:
=== Minim Error ===
=== Volume is not supported.
Minim 底层的 Java 代码似乎无法控制音量。作为解决方法,我建议使用 setGain()反而。
请记住,这是以分贝为单位的(因此 0.0、1.0 范围不适用)。
尝试删除 draw()
中的语句,并将 serialEvent()
替换为如下内容以首先进行测试:
void serialEvent(Serial port) {
int arduinoValue = port.read();
float gain = map(arduinoValue,0,255,-10.0,10.0);
println("arduinoValue: " + arduinoValue + " gain: " + gain);
player.setGain(gain);
}
关于java - 如何在处理中更改 mp3 的音量(级别)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34037807/