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 に答える