Adafruit_ArcadaクラスにtimerCallback関数があるのでそれを使って1秒間に11025回の割り込み処理を起こす。
割り込み処理でaudioデータ内の1バイトをanalogWriteでARCADA_RIGHT_AUDIO_PINに送っている。
ARCADA_LEFT_AUDIO_PINは定義はされているが何も再生されない。
audioはそのまま送ると音割れしたので値を半分にしました。
#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() { }
#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, : : : 続く
画面には何も表示されず音声のみが再生されます。