20230604 -

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

小山智史

(更新履歴)


目次
1. 概要
2. ソフトウェアの準備
3. 音声データと楽譜データの作成
4. 電子オルゴールの組み立て
5. プログラムの書き込み
6. 使い方
7. 製作例
(付録1) ADPCMによる音声の圧縮
(付録2) 製作のTips

1. 概要

 MyMelo2 Plus は、「私だけの電子オルゴール MyMelo2」に「録音メッセージプレイヤー」の機能を追加したもので、「音声メッセージ付 電子オルゴール」を作ることができます。

 オルゴールの音はピアノに似たきれいな音(減衰正弦波)です。

 挿入できる音声メッセージは、中品質で最大1.3秒、低品質で最大2.6秒程度です。

 音声メッセージはオルゴールのメロディーの任意の場所に挿入できます。異なる音声を別々の場所で再生することもできます。

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

 下の写真は ハッピーバースデー♪ のメロディーの途中に音声メッセージを挿入した「誕生日プレゼント」の例で、ATtiny85を使って作りました。


「誕生日プレゼント」の製作例[音を聴く(mp3)]
「あまちゃん」のサンプル[音を聴く(mp3)]
マイコン 録音時間(合計) 電池で動作 備考
中品質 低品質
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. ソフトウェアの準備

 MyMelo2のソフトウェアに同梱されています(ダウンロード)。

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

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


3. 音声データと楽譜データの作成

(1) 楽譜の作成

 「テキスト音楽サクラ」または「メモ帳」などのテキストエディタで「ドドソソララソー」のように楽譜ファイル(〇〇.mml)を作成します。このような楽譜の書き方は「MML形式」と呼ばれます。2和音や3和音も可能で、下図は2和音の例です。


サクラで作成(再生しながら作成できます)

メモ帳で作成

 音声メッセージの箇所は n0, n1, ... のように書き(上図および下表)、この機能が「私だけの電子オルゴール」に追加されています。なお、サクラを使った場合も、音声メッセージが再生できるわけではありません(n0, n1,...は音をMidiのノート番号で表す記法なので対応する低い音がでます)

書き方説明
n0, n1, ... 録音音声0, 1, ...。和音の場合は、トラック1~3の同じ箇所にn0~を記載します。

(2) 音声の録音

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

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

(3) データの初期化

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

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

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

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

(5) 楽譜データへの変換

 楽譜ファイル(〇〇.mml)をmymelo2plus.wsfにドラッグ&ドロップします。mymelo2plusフォルダのmymelo2.hに楽譜データが記録されます。

 引き続き別の楽譜ファイル(〇〇.mml)をmymelo2plus.wsfにドラッグ&ドロップすると、2曲目、3曲目、...の楽譜データがmymelo2.hに追加記録されます。

 音声データまたは楽譜データを変更する場合は、(3)の初期化からやり直してください。


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を起動し、[ファイル][開く]で上で mymelo2plusフォルダの mymelo2plus.ino を開きます。
  2. [ツール][マイコンボード]と[ツール][シリアルポート]を適切に選び、マイコンボードに書き込みます。書き込みは、ボタンを押します。

(2) Digisparkの場合

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

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

  1. Arduino IDEを起動し、[ファイル][開く]で mymelo2plusフォルダの mymelo2plus.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.3秒、低品質で最大2.6秒程度です。8kBを超えてしまうと次のようなエラーメッセージが現れます。

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


6. 使い方

 電源を投入すると、(1曲目の)メロディーが再生されます。

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

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

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


7. 製作例

 100均のフォトフレームとクリアボックスを使った製作例です。こんな風にちょうどいいケースを探して、この中に組み込んで作り、最後にフォトフレームと両面テープで合体させるのがオススメの方法です。


材料・部品
名称 規格等
フォトフレーム ダイソー 38-1 など
クリアボックス ダイソー 1 Tall TRAY, セリア CUBE HALF など
マイコン ATtiny85
スピーカ 30~50Φ
スイッチ サンワ OBSF-24-W
電池・電池ボックス 単4×2本
抵抗 68Ω
積層セラミックコンデンサ1μF

回路図

 「私だけの電子オルゴール 7章」でさまざまな製作例を紹介していますので参考にしてください。

(参考資料)

[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]。

 mymelo2plus.wsf でwavファイルの音声データを符号化して myvoice.h に記録し、mymelo2plus.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