戻る

サウンド再生

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,
    	:
    	:
    	:
    	続く

実行結果

画面には何も表示されず音声のみが再生されます。

サンプルプログラムのダウンロード


添付ファイル: fileSoundSample1.zip 600件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-04-22 (水) 01:53:02 (1465d)