HOME > ものづくり(電子工作) > 音声メッセージプレイヤー
20230518 -

音声メッセージプレイヤー MyVoice
[私だけの電子オルゴール MyMelo2] [音声メッセージ付 電子オルゴール MyMelo2 PLUS]

小山智史

(更新履歴)


目次
1. 概要
2. 準備
3. 音声データの作成
4. メッセージプレイヤーの組み立て
5. プログラムの書き込み
6. 使い方
7. 製作例
(付録1) ADPCMによる音声の圧縮
(付録2) 製作のTips

1. 概要

 短い音声メッセージ(録音音声)を再生できます。複数の音声を登録し、ボタン操作で再生する音声を選択できます。

 ArduinoUNO/NANO, Digispark, ATtiny85, ATtiny4313, ATmega328P などで動作します(下表)。

 下の写真は、左ボタンを押すと「はい」、右のボタンを押すと「いいえ」の声が出る音声コミュニケーションエイド(VoCA)の例で、ATtiny85を使って作りました。


音声コミュニケーションエイド(VoCA)の製作例
マイコン 録音時間(合計) 電池で動作 備考
中品質 低品質
ArduinoUNO/NANO 7秒 14秒 fPWM=62.5kHz(T=16us), fs=31.25kHz(T=32us)
Digispark 1.3秒 2.6秒 fPWM=250kHz(T=4us), fs=31.25kHz(T=32us)
ATtiny85 1.5秒 3秒 fPWM=250kHz(T=4us), fs=31.25kHz(T=32us)
ATtiny4313 0.5秒 1秒 fPWM=31.25kHz(T=32us), fs=15.625kHz(T=64us)
オルゴールは単音のみ
ATmega328P 7.5秒 15秒 fPWM=31.25kHz(T=32us), fs=15.625kHz(T=64us)
オルゴールは単音のみ
fPWM, fs は高速なほど音が多少良い(ノイズが少ない)ようです。

2. ソフトウェアの準備

 MyVoiceのソフトウェアをダウンロードしてください。

 ダウンロードしたファイルを解凍し、「myvoice.wsf.txt」のファイル名を「myvoice.wsf」に変更します。ファイル名を変更する際は、エクスプローラの[フォルダオプション][表示]で「登録されている拡張子は表示しない」のチェックをはずしておくことをお勧めします

 その他は、「私だけの電子オルゴール」と同様です。

(3) 部品を組み立てて作る場合(マイコンはATtiny85)
 書き込み装置(AVRライター)が必要となります。書き込み装置については、こちらのページをご覧ください。
 ArduinoIDEを起動し、[ファイル][環境設定]の[追加のボードマネージャのURL]の右端のボタンを押し、

を追加した後、[ツール][ボード][ボードマネージャ]で「ATTinyCore」をインストールします。

(4) Digisparkの場合
 ドライバをダウンロードし、DPinst(32bit Windows用)またはDPinst64(64bit Windows用)をインストールします。その後、ArduinoIDEを起動し、[ファイル][環境設定]の[追加のボードマネージャのURL]の右端のボタンを押し、

を追加した後、[ツール][ボード][ボードマネージャ]で「Digistump AVR Boards」をインストールします。
 [ツール][ボード]で「Digispark(Default-16.5mhz)」を選び、[ツール][書き込み装置]で「Micronucleus」を選びます。Digisparkの詳細はここに、Digispark用Arduinoについてはここにあります。


3. 音声データの作成

(1) 音声の録音

 Audacityなどのソフトを使い、パソコンで音声を録音し、wavファイルに保存します。その際、サンプリング周波数8000Hz、モノラルとします。スマホで録音したファイルをFFMPEGなどのソフトを使って変換することもできます。

 録音した音声は、先頭と末尾の雑音や無音区間を削除したり、音量を調整(Audacityでは[エフェクト][音量と圧縮][ノーマライズ])や、必要に応じて音声区間の短縮(Audacityでは[エフェクト][ピッチとテンポ][テンポの変更])などの加工をしておきます。

(2) データの初期化

 はじめに myvoice.wsf をダブルクリックし、音声データファイル(myvoice.h)を初期化します。

(3) 音声データへの変換

 音声ファイル(〇〇.wav)を myvoice.wsf にドラッグ&ドロップします。ダイアログボックスが現れるので、中品質か低品質かを選択します。音声データファイルに音声データが記録されます。

 引き続き別の音声ファイル(〇〇.wav)を myvoice.wsf にドラッグ&ドロップすると、音声データが音声データファイルに追加されます。記録できる時間は合計で最大1.5秒程度(中品質)または3秒程度(低品質)です。

 音声データを変更した場合は、(2)の初期化からやり直します。


4. 音声メッセージプレイヤーの組み立て

... 選択してください

(1) Arduino UNO で作る

 スピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。

 押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。

 2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。

(2) Arduino NANO で作る

 スピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。

 押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。

 2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。

(3) Digispark で作る

 スピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。ピアノ音(減衰正弦波)の音を出したい場合は、圧電サウンダではなくスピーカーを接続してください。

 以下は小型のスピーカー(UGSM23A)を接続する様子で、スピーカーのピンをペンチで折り曲げておくと、差すだけでOKです。

 押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。

 2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。

(4) ATtiny85 で作る

 スピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。

 押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。

 2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。

(5) ATtiny4313 で作る

 スピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。

 押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。

 2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。

(6) ATmega328P で作る

 スピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。

 押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。

 2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。


5. プログラムの書き込み(何度でも書き直しできます)

(1) Arduino UNO/NANO の場合

  1. Arduino IDEを起動し、[ファイル][開く]で上で myvoice.ino を開きます。
  2. [ツール][マイコンボード]と[ツール][シリアルポート]を適切に選び、マイコンボードに書き込みます。書き込みは、ボタンを押します。

(2) Digisparkの場合

  1. Arduino IDEを起動し、[ファイル][開く]で myvoice.ino を開きます。
  2. [ツール][ボード]で「Digispark(Default-16.5mhz)」を、[ツール][書き込み装置]で「Micronucleus」を選び、マイコンボードに書き込みます。書き込みは、Digisparkを抜いた状態でボタンを押しRunning Digispark Uploader... Plug in device now... の表示が現れたら、Digisparkを差し込みます

(3) 部品を組み立てて作る場合(マイコンはATtiny85, ATtiny4313, ATmega328P)

  1. Arduino IDEを起動し、[ファイル][開く]で myvoice.ino を開きます。
  2. 使うマイコンに応じて[ツール]で「ボード」と「Chip」と「Clock Source」を適切に選びます。
    (ATtiny85の場合)
     「ボード」を[ATTinyCore][ATtiny25/45/85(No bootloader)]にし、「Chip」を[ATtiny85]にします。「Clock」は「16MHz(PLL)」とします。
    (ATtiny4313の場合)
     「ボード」を[ATTinyCore][ATtiny2313(a)/4313(No bootloader)]にし、「Chip」を[ATtiny4313]とします。「Clock Source」は「8MHz(internal)」にします。
    (ATmega328Pの場合)
     「ボード」を[Bareborns ATmega Chips(No bootloader)][ATmega328/328P]にし、「Processor」を[ATmega328P]にします。「Clock」は「internal 8MHz」にします。
  3. パソコンに書き込み装置(AVRライター)を接続し、[ツール][ポート]を適切に選んだ後、[ツール][書き込み装置]で、[Arduino as ISP]や[Arduino Leo/Micro as ISP(ATmega32U4)]など使用する書き込み装置を指定します。
  4. 書き込み装置(AVRライター)をマイコンに接続し、回路の電源をいれます。
  5. 初めて書き込むマイコンチップは、一度だけ[ツール][ブートローダを書き込む]の操作をします(これにより2の設定がマイコンのHuseビットに書き込まれます)。
  6. プログラムの書き込みは、[スケッチ][書き込み装置を使って書き込む]の操作で行います(ボタンの操作では書き込みできません)。

    書き込み装置とArduinoIDEの操作については、こちらのページをご覧ください。

※ ATtiny85の場合、メモリ容量は8kBです。この中にプログラムと音声データを格納することになり、記録できる音声メッセージは、中品質で最大1.5秒、低品質で最大3秒程度です。8kBを超えてしまうと次のようなエラーメッセージが現れます。

これは「656バイト 超過している」という意味で、中品質の場合は656/4000=0.164秒、低品質の場合は656/2000=0.328秒に相当し、「あとこれだけwavファイルの音声データを短くすればよい」ことになります。


6. 使い方

 電源を投入すると、(1番目の)録音メッセージが再生されます。

 押しボタンスイッチをつなぐと、スイッチを押したときに再生されます。再生中にスイッチを押すと停止します。

 複数の音声を登録した場合、スイッチをトントンと2回押すと2番目、3回押すと3番目の音声が再生されます。長押しで選ぶこともできます。

 音声が2つの場合は、押しボタンスイッチを2つつなぐと、一方を押すと1番目、もう一方を押すと2番目の音声が再生されます。


7. 製作例

□ 音声コミュニケーションエイド(VoCA)

 左のボタンを押すと「はい(mp3)」、右のボタンを押すと「いいえ(mp3)」の録音音声が再生されます。利用者に適した外部スイッチを接続することもでき、障害者の意思表示のツールとして利用できます。

使用部品
名称 規格等
プラスチックケース タカチ SW-100
マイコン ATtiny85
スピーカ 50Φ
スイッチ サンワ OBSF-24-W
電池・電池ボックス 単4×2本
抵抗 68Ω
積層セラミックコンデンサ1μF

回路図

(参考資料)

[1] Rodger Richey, Adaptive Differential Pulse Code Modulation using PICmicro Microcontrollers, Microchip Application Note 643, http://ww1.microchip.com/downloads/en/AppNotes/00643b.pdf, 1997.


(付録1) ADPCMによる音声の圧縮

 音声はADPCMという方法で圧縮して記録しています[1]。

 myvoice.wsf でwavファイルの音声データを符号化して myvoice.h に記録し、myvoice.ino でこれを読み込み、プログラムと共にATtiny85に書き込んでいます。プログラムはこの符号化されたデータを復号しながら、サンプリング周波数8000Hzでスピーカーに出力しています。


(付録2) 製作のTips

A2.1 電源のコンデンサ

 ATtiny45/85, ATtiny2313(A)/4313, ATmega328PなどマイコンICを使って作る場合、4章ではコンデンサを入れていませんが、電池が消耗してきた時などにも安定して動作するよう、以下のようにコンデンサを入れた方がいいです。Arduinoを使う場合はその必要はありません。

A2.2 スピーカーの直列抵抗

 スピーカーを使う場合、4章では68Ωの抵抗を直列に入れていますが、とりあえず動作確認をする際は無くても動作します(大きな音がします)。音量を小さくしたい場合は、この値を大きくします。

A2.3 プリント基板

 以下は、ATtiny85用に作った片面プリント基板のレイアウトです。GND端子はもうひとつ付けた方がよかったですね。


koyama88@cameo.plala.or.jp