4

我有代码可以从 arduino 播放一点声音。这首歌是根据数值编码的。但是我怎样才能让它从 arduino 播放得更响亮呢?

#include <PCM.h>

int switchPin = 8;

const unsigned char sample[] PROGMEM = {
  140, 124, 130, 126, 129, 126, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 128, 128, 128, 
};

void setup()
{
  pinMode(switchPin, INPUT);
}

void loop()
{
  if(digitalRead(switchPin) == HIGH)
  {
    startPlayback(sample, sizeof(sample));
  }
}
4

3 回答 3

4

此示例代码使用一个子程序,该子程序使用PCM 技术来控制数字引脚打开和关闭的时间间隔(并假设这些输出引脚连接到一个简单的扬声器)。请记住,声音的频率是产生音调的原因,而音量是这些频率的幅度。所以你要问的是,为了让声音更大,如何增加信号的幅度。但由于这个简单的演示只能改变数字信号切换的时间(频率)而不是幅度(一个位是开或关。一个位永远不会“真正开启”[大写表示在这里大喊大叫:-)])所以你唯一的选择是在Arduino和扬声器之间添加另一层硬件以增加音调的幅度 - 也就是放大器。这可以是一些简单的东西,例如本设计教程中描述的运算放大器,或者用插孔替换扬声器到扬声器的输入。

于 2012-02-06T22:36:03.760 回答
1

音频信号本质上是有符号的量。如果您的库unsigned char用于音频数据,那么它可能映射 0 -> -128 和 255 -> 127。所以让我们看看您的信号。

前 6 个样本:

140, 124, 130, 126, 129, 126

在 127 附近有轻微的振荡。然后你的信号的其余部分

128, 127, 128, 127, ...

或多或少是DC。这将是听不见的。

尝试输入 {0, 255, 0, 255, ...} 的信号,它应该响亮得多。

于 2012-02-06T23:37:54.663 回答
0

如果您阅读 pcm.h 中的评论,您会看到它说音量会非常低。PCM 技术调整引脚为高电平的时间百分比。我同意 jdh 的建议,即无论如何音量都会受到限制,并且放大器会有所帮助。对于软件中更响亮的东西,我认为您需要更多具有可调节频率的方波,以便引脚的高频率和低频率一样,并且实际频率会调整。我没用过,但是看看 arduino Tone() 库。

于 2012-02-18T17:50:31.940 回答