戻る
サウンド再生 †
Adafruit_ArcadaクラスにtimerCallback関数があるのでそれを使って1秒間に11025回の割り込み処理を起こす。
割り込み処理でaudioデータ内の1バイトをanalogWriteでARCADA_RIGHT_AUDIO_PINに送っている。
ARCADA_LEFT_AUDIO_PINは定義はされているが何も再生されない。
audioはそのまま送ると音割れしたので値を半分にしました。
サンプルプログラム †
- SoundSample1.ino
#include <Adafruit_Arcada.h>
#include "audio.h"
Adafruit_Arcada arcada;
size_t sampleOffsetIndex;
void timerCallback()
{
analogWrite(ARCADA_RIGHT_AUDIO_PIN, (uint16_t)audio[sampleOffsetIndex] / 2);
analogWrite(ARCADA_LEFT_AUDIO_PIN, (uint16_t)audio[sampleOffsetIndex] / 2);
++ sampleOffsetIndex;
if(sampleOffsetIndex >= sizeof(audio))
{
sampleOffsetIndex = 0;
}
}
void setup()
{
Serial.begin(9600);
if(arcada.arcadaBegin() == false)
{
Serial.print("Failed to begin");
while(1);
}
analogWriteResolution(8);
arcada.enableSpeaker(true);
sampleOffsetIndex = 0;
arcada.timerCallback(SAMPLE_RATE, timerCallback);
}
void loop()
{
}
- audio.h
#define SAMPLE_RATE 11050
const unsigned char audio[] =
{
143, 206, 192, 169, 175, 171, 166, 128, 61, 36, 40, 43, 96, 112, 115, 139,
77, 31, 45, 33, 62, 140, 150, 124, 154, 148, 139, 142, 137, 180, 204, 197,
178, 137, 106, 102, 97, 107, 138, 145, 165, 159, 113, 126, 137, 148, 159, 139,
:
:
:
続く
実行結果 †
画面には何も表示されず音声のみが再生されます。
サンプルプログラムのダウンロード †
|