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) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。