ArduinoのSDライブラリと、SparkFunのMP3 Player Shield
を使って、お休みタイマー付きMP3プレイヤーのプロトを
作る作戦を進行中。
まず作戦その1。SDライブラリに書き換え。
SparkFunのMP3 Player Shield製品ページにサンプル
スケッチが置いてあったりするんだけど、ちょっと古くて、
現在Arduino公式サイトで公開されているSDライブラリ
じゃなくて、その前段のsdfatライブラリを使ったもの
になっているので、これをSDライブラリに書き換え。
あまり苦労なく置き換えられるようなスケッチだった
ので、これはすんなりと完了。サクッと音が出た。
つぎ。作戦その2。固定ファイルじゃなくて、SDカード
のfatに登録されているファイルを1個1個舐めていって
順に再生させたい。
参考に使えるのがまずopenNextFile。これは
1個1個順にファイル(もしくはディレクトリ)を
舐めていってくれる機能。で、こいつのサンプルスケッチ
を実行してみると、ルートディレクトリ内のファイルを
舐めていって、ディレクトリもその対象にしてくれる
機能ってことは判った。けど、階層の深いディレクトリ
に入っていった後、元のディレクトリに戻っていく
機能はないみたい。
で、rewindDirectoryを使ってみると、それが
実現できるようになってる。このサンプルスケッチを
実行してみたら、SDカード内の全ファイルにアクセス
出来た。
つぎ。作戦その3。拡張子MP3だけを抜き出して再生。
処理対照のFILE型インスタンスから名前を取り出して、
末尾が「.mp3」か「.MP3」になっているものを抽出。
これはString型オブジェクトでendsWithを使ってみる
ことでクリア。
C言語的な文字配列として処理するんじゃなく、String
オブジェクトとすると結構簡単で便利だな。
つぎ。作戦その4。SDカード内の曲を続けて再生
させてみる。
これまでのモノを組み合わせて1つのスケッチにして
みると…、まぁそれなりに順々に曲が再生されるのが
実現できた。
さて、じゃぁSDカード1枚内の最後の曲まで行ったら
最初に戻るっていう処理にしたい…。
なぜだかここがうまく行ってなくてもがき中。
SDカード全部が終わったら、もう一度ルートディレクトリ
を開きなおして最初から順々に…と思ってやってみた。
確かにまた1曲目に戻るんだけど…、全曲再生しては
頭に戻り、全曲再生しては頭に戻り…をしていると、
途中でルートディレクトリを開く処理で止まっちゃう。
(正確に言うと、ルートディレクトリのオープン処理
でエラーが返ってきて開けない)
途中で使っているFILE型のオブジェクトやSD型の
オブジェクト、またはString型オブジェクトの開放を
明示していないからこいつらでメモリリークして
いるんじゃないかと思って、ヒープとスタックを
調べられないかなぁと、調査方法をさがす。
http://todotani.cocolog-nifty.com/blog/2009/06/arduino-texitst.html
こちらのサイトでバッチリな機能を公開してくれて
いるので(アリガタイ)、ここにあるスケッチ中から
check_mem()関数をお借りして、実行の途中途中で
ヒープとスタックの位置を表示させるシリアル
デバッグ作戦。
予想としては、オブジェクトのインスタンスを作ると、
都度ヒープにメモリを確保するはずなので、ヒープ
が伸びていってスタックを破壊するという図式。
いざ実行してみると…どうやら、ヒープがスタック領域
まで侵食している気配なし。うーーーーん。なんだこりゃ?
メモリを乱食いしているのか、それとも下手に開放した
メモリを参照するような処理してるのか、なんとも
よくわからない状態。しばらく動いていながら、途中
で動かなくなるっていうのはメモリリークっぽい感じ
なんだけど、ヒープとスタックのアドレス見る限り
ではそうでもないみたいだし…わからん。
rewindDirectoryやopenNextFileの引数はFILE型の
オブジェクトだったりするので、ここが一番怪しい
のでは?と思うんだけど、やっぱこの中身見ないと
いけないかな?String型を扱っているところは
悪さをしている感じではないんだけどな。
サクッと解決しそうにはないから、ちょっとずつ
中身を見ていこう。
これが片付いたら、曲の途中で次に飛ばしたり、
前に戻したり、早送り再生したり、ディレクトリ
単位で飛ばしたりしたいところ。
http://www.chiaki.cc/Timpy/vs1053b_jp.html#C9
こちらが参考になりそう。少なくとも曲飛ばしは
使えないと話にならないから、あとでじっくり
読んで機能載せていこう。
http://zasshi.news.yahoo.co.jp/article?a=20120411-00000000-toyo-bus_all
ヤマト2199、これまでとはずいぶん違う公開の
仕方なのは色々作戦があるみたいだな。盛り上がる
といいな。
http://headlines.yahoo.co.jp/hl?a=20120411-00000096-mai-soci
スマトラ島付近でまた8.7の巨大地震。今のところ
1mの津波ということで大きな被害はないみたい
なのは一安心。
|
|
|
|
|
|