SSブログ

UNO R4 で WAVファイルを再生する [Arduino]

UNOでDACが使えることが分かったので、これを使って音声を再生してみました。
ファイル形式は、モノラル 8ビットのシンプルなwavファイルのみ。

<音源の準備>
・google翻訳の音声をmp3ファイルに変換してくれるサイトからゲット。
・これを Audacity を使って、モノラルの unsigned 8bit のwavファイルに変換。
・PROGMEM作蔵さん でC言語の配列に変換。(PROGMEMでなくてもいい)

バイナリファイルをC言語のデータ配列に変換する:放課後マイコンクラブ:SSブログ
https://hello-world.blog.ss-blog.jp/2016-10-16

スケッチは以下のとおりです。
レジスタ操作なしの純粋なArduinoスケッチで仕上げました。
AVRと違いピンのドライブ能力が高くないようで、直接スピーカーをつなげてもうまく音がでませんでした。
圧電サウンダだとかなり小さい音ですが、きれいに聞こえました。
r4_piezo.jpg
#include "hw8k.h"                               // wave file data

void setup() {
  analogWriteResolution(8);
}

void loop() {
  playWav( hw8k_en );
  delay(500);
  playWav( hw8k_ja );
  delay(500);
}

void playWav( const uint8_t d[] ) {             // monoral 8bit only
  uint32_t i, rate, len, usInt, usExp;
  rate  = *(uint32_t*)(&d[ 0x18 ]);             // Sampling rate
  len   = *(uint32_t*)(&d[ 0x28 ]);             // Data size
  usInt = 1000000 / rate;                       // Time interval
  usExp = micros();
  for( i = 0x2c; i < len; i++ ) {
      analogWrite( DAC, d[ i ] );
      while( micros() - usExp < usInt );
      usExp = micros();
  }
}


音声データはこんな感じ(略しています)
const uint8_t hw8k_ja[] = {    // file size : 13100 bytes
  0x52,0x49,0x46,0x46,0x24,0x33,0x00,0x00,0x57,0x41,0x56,0x45,0x66,0x6d,0x74,0x20,
  0x10,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x40,0x1f,0x00,0x00,0x40,0x1f,0x00,0x00,
  0x01,0x00,0x08,0x00,0x64,0x61,0x74,0x61,0x00,0x33,0x00,0x00,0x80,0x7f,0x80,0x80,
  0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,
        ......
  0x7f,0x80,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x80,0x80,0x7f
};

const uint8_t hw8k_en[] = {    // file size : 10220 bytes
  0x52,0x49,0x46,0x46,0xe4,0x27,0x00,0x00,0x57,0x41,0x56,0x45,0x66,0x6d,0x74,0x20,
  0x10,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x40,0x1f,0x00,0x00,0x40,0x1f,0x00,0x00,
  0x01,0x00,0x08,0x00,0x64,0x61,0x74,0x61,0xc0,0x27,0x00,0x00,0x80,0x80,0x80,0x80,
  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,
        ......
  0x7f,0x80,0x80,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80
};

タグ:Uno R4 DAC 音声 wav
nice!(0)  コメント(0)