「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



引き続きArduinoとSDライブラリでお休みタイマー付き
MP3プレイヤーの作戦中。
Arduinoのフォーラムで何か会話が交わされてないかを
探ってみる。

http://arduino.cc/forum/index.php/topic,85550.0.html
こことか、
http://arduino.cc/forum/index.php/topic,85442.0.html
こことかを見ると、Arduino1.0のSDライブラリ
にはopenNextFileあたりにバグが残っているって
いうことが会話されているみたい。

一方、
http://arduino.cc/forum/index.php/topic,92241.0.html
サンプルスケッチをおいらの様にちょこっと弄って
うまく行ってない人へのコメントとして、
「ファイルをクローズしていないからでは?」
っていう指摘も。

まぁ、ファイルをクローズしていないっていうのは
ごもっともなんだけど、いざファイルのクローズ
をしてみると、1周目が終わったところでフリーズ
するんだけどな…

いずれにしても、サクッと解決するようなものじゃ
なさそうだな… ちょっと様子見しようか。


http://headlines.yahoo.co.jp/hl?a=20120412-00000006-mai-soci
NTT物性科学基礎研究所による新しい半導体の
製造方法というニュース。スゴイねぇ。紫外線で
発電できるとか。ご家庭の窓で発電。

http://headlines.yahoo.co.jp/hl?a=20120412-00000012-mai-soci
高速の坂道渋滞を防ぐ実験。高速の坂道渋滞が
心理的要因で発生するんであれば、それを防ぐのも
心理的作戦ってことなのかな?比較的安価なLEDの
点滅だけで解決するなら良いよなぁ。渋滞で浪費
されるガソリン代より電気代の方がはるかに安い
はず。

http://headlines.yahoo.co.jp/hl?a=20120411-00001265-yom-bus_all
トヨタ式のハイブリッド(というかATベースの)は嫌い
なんだけど、移動の道具としての燃費が60kmとかまで
向上するっていうのは夢があるなぁ。バイクの燃費
もこんな風に伸びていくと良いのになぁ。

http://www.ted.com/talks/lang/ja/susan_cain_the_power_of_introverts.html
このスーザン・ケインという人の講演ビデオ。
すごい面白かった。(日本語字幕モードでぜひ)

話の中でも出てきたけど、「ユングの言う内向的、
外向的」っていうモノと、いわゆる「内気、社交的」
っていうものの区別がついていないと、冒頭の
キャンプの先生の固定観念が正しいものとして
押し付けちゃうんだよな。(文字からして違う)
まぁ、上手い講演だなぁと感心し通しだった。

http://www.youtube.com/watch?v=16naCRilR08
このくらいのモノを自分で作れたら楽しいだろうな。

http://akizukidenshi.com/catalog/g/gI-00181/
ふとYAMAHAのPSG音源。FM音源チップなんかに
比べるとレジスタが少なくて、扱い方も解り
やすくて良いんだけど、未だに単価500円って
考えると…とふと思った。3和音程度のPSGなら
TINY2313程度で互換の機能を作れるんじゃないか?と。

ザックリ考えてみる。

DACは5ビット3チャンネルだから、2^5×3=96なので、
0~95の幅でPWM出力すればok。8ビットPWMで充分。
3チャンネル程度ならアセンブラでガリガリ書けば
DSS方式で3チャンネルの矩形波合成くらいは簡単
に書けるでしょう。

CS信号やWR信号はピンチェンジインタラプトで、
アドレス/データ選択は普通のデジタル入力ピンで。
あとは8ビット束で入力をして、内部レジスタに
ストック。それを元にDSSで音を生成、みたいな。

あとはエンベロープとノイズジェネレータ。エンベ
はまぁカリカリ書いてがんばるとして、ノイズの
ジェネレータはどうなんだろうなぁ。あれって
当時から不思議に思ってた部分があるんだよな。

http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0
擬似乱数発生のロジックはいくつかあるんだろうけど、
基本的にホワイトノイズ。でもPSGモジュールに搭載
されているノイズジェネレータは周波数の指定がある。
ノイズの周波数ってなんだ?っていうのが当時からの
疑問。単なる擬似乱数ではないってことなんだろう
けど、どんな仕組みなんだろう?



コメント ( 0 )




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の津波ということで大きな被害はないみたい
なのは一安心。



コメント ( 0 )