上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top

ポケミクを今回内蔵したPICマイコンから操作する方向でのトライを始めました。





まず、操作スイッチの方ですが、これは今の回路でかなり簡単にできました。



通常はPICマイコンのPORTA,Bを入力にして監視しているのを、TRISA,Bを操作して一時的に出力にし、0を出すことで対応したスイッチが押されたかのようにポケミクに思わせることができます。



スタイラスの方はそう簡単ではありません。とりあえず10bitDACを付けてスタイラス電圧をPICマイコンから制御できるようにしてみました。回路図と、取り付け位置は以下の通りです。



Miku4
 Dscf5001


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




DACは秋月電子のLTC1660を使いました。
この石は8個アナログ出力を個別に制御できるというすぐれもので、今回の用途には過剰なのですが、他にちょうど良い物がなかったのでこれにしています。



 






このDACは出力をハイインピーダンスにもできますので、普通にスタイラスを使う時はハイインピーにしておいて、PICから演奏操作する時はドライブさせて、鍵盤スキャンタイミングで鍵盤位置相当のアナログ電圧を出力します。



これで鍵盤読み取りと組み合わせると操作の記録・再生ができるというはずなのですが。。。。どうやらそれほど甘くはないようです。



やってみたところ、DACから鍵盤位置を入れることはできるのですが、鍵盤を押していることをポケミクが受け付けてくれません。現状はスタイラスを鍵盤のどこか(どこでも良い)にスタイラスを当てておいてDACから電圧を入れると対応した音階が出る、という状態です。



ポケミクの鍵盤制御はかなり奥が深い模様です。



Dscf5003
これが鍵盤インタフェースの信号です。上がスタイラス入力、



下が鍵盤に印加されている電圧です。下を見ると電圧を2段階に分けてかけていますね。



推測ではその2段階での差分を見ることで読取精度を上げていて、オンオフ判定もその差分から出しているのだと思いますが、どうもその仕組みがわかりません。。。。



 



とりあえずスタイラスを当てた状態では動くので、それで操作記録・再生までは動かしてみようかと思います。



 



それではまたです。




スポンサーサイト
2014.04.29 Tue l PICマイコン l コメント (4) トラックバック (0) l top

簡単な口パク音声同期をやってみました



音声波形を見ていたところ、振幅だけで以下の3段階に区分できることがわかりましたので、単純に波形の一定周期でMIN,MAXを記録しておき、その差文だけを元に口の絵を変えています。



   ①A音: 振幅25くらい



   ②O音: 振幅15くらい



   ③I,U,E音:振幅12以下(波形は変わりますが振幅では区別できません)





この3パターンに無音の時の口閉じを加えて4パターンです。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">








なお、今回はポケミク用WEBアプリで歌詞を変えています。



WEBアプリを使おうとしたら「ブラウザがGoogle Chromeでないと動かない」というメッセージが出て、そのインストールにちょっとだけ時間がかかりましたが、後はすんなり動きました。



 



スタンドアローンで改造中ではありますが、PCとの連携も面白いですね。



 



次はDAC接続による無理やり制御をやってみます。



それではまたです。


2014.04.28 Mon l PICマイコン l コメント (0) トラックバック (0) l top

連休に入りましたね。今日はポケミクに表示エフェクトを付けてみました。



もっと凝った表示をしようと思っていましたが昨日の飲み会で二日酔いぎみのため、とりあえず音声波形までです。



Dscf3330_2
PICのAD入力が余っていたので、そこにフォンジャック出力を繋ぎました。回路図は以下の通りです。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




Miku3




フォンジャック出力は当然ACだろうと思っていたのですが、波形を見たところ0~5V位の範囲のDCだったので、抵抗で分圧しているだけです。



 



なお、鍵盤の今回少し改善しました。これまでは鍵盤位置を鍵盤全体一律の係数で計算していたのですが、今回から27個ある鍵盤一個一個のADC値範囲を定義して、その範囲内かどうかを吟味するようにしました。



メモリと時間のかかる方法なのであまり好きではないですが、とりあえずこれでキーのずれは起きなくなったようです。



 



 



古い一律係数の場合は2つくらいの特定キーでずれ見られたのですが、多分係数の求め方か丸めこみが適切でなくて、その位置で閾値が微妙なところになっていたのかな、と思います。



音声波形の取出しは、なんとか解析して口パクを波形に合わせられないかな、という考えでやってみたのですが、ちょっと簡単じゃないかもしれませんね。FFTをかけて周波数成分を見ないといけないのかな?さすがにPIC24でもCPUパワーがたりないか?



 



あとは、ポケミクの操作状態が一通り読めるようになりましたので、次は逆に制御する方向で考えています。



まずはDACを付けて自動演奏。ただの自動演奏だと面白くないので、ようやく読めるようになった鍵盤リードと合わせて手動演奏の記録・再生にトライ予定です。



MIDIでやれば簡単なのかもしれないですが(^^; 大昔シリアルでMIDIを動かしたことはあるのですが、今のPICでUSB-MIDIを動かす方法が分からないので、もうしばらく今やっている無理やりハード方式で進めちゃいます。



それではまたです。



2014.04.27 Sun l PICマイコン l コメント (0) トラックバック (0) l top

ある程度ソースが整理できましたのでご参考に公開しようと思います。



画面はこれまでからあまり変わっていませんが、以下の感じです。



Dscf3318  Dscf3315



地味ですがスイッチ読取りのチャタリング対策を改善して読み取りが安定したのと、



LCDのSPI書き込みを見直して多少高速化してあります。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




以下ソースです。



「pokemiku_main.c」をダウンロード  メインです。


「graphics2_cl.c」をダウンロード  グラフィックルーチンです。


「spilcd_cl.c」をダウンロード  LCD操作ルーチンです。



「font8x8.h」をダウンロード 8x8dotフォントデータです。



「miku.h」をダウンロード ミク画像データです。



 



「pocketmiku2.zip」をダウンロード :上記を含むプロジェクトの圧縮ファイルです。



 



鍵盤読取り時の時々ずれだけはまだ解決していません。。。。。が、それは気にしつつも別の機能追加をやりたいと思います。





それではまたです。








2014.04.26 Sat l PICマイコン l コメント (0) トラックバック (0) l top

鍵盤読取りがほぼできるようになりました。今回改善したのはチャタリング対策です。





これまでは手を抜いてADC読み取り値の移動平均を取るだけでお茶を濁していたのですが、タッチ時のデータを見ていてそれではだめだと気付きました。(そりゃそうですね。普通のスイッチと一緒ですね。)





今回平均計算をしている所で、ADC値の変動が±25を超えたら棄却するようにしてようやくほぼ安定しました。(±25は観測の結果1キー分の差文です。)





ほぼというのは、まだごくたまに1キーずれることがあるからです。。。。これはノイズ原因かな。。。。




「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">





とりあえずちょっと地味ですがドレミの音に合わせた口パクモードを入れ込みました。





分かりにくいと思いますが、画面の下にあるアスタリスクが鍵盤のタッチ位置を示しています。



いままでの動画でも動いていたのですが、ふらふらしていたのがようやく直りました。






鍵盤スタイラスADC読み取り値も安定したので、タッチ位置とADC値(つまり電圧値)の相関を取ってみました。



Graph



横軸が鍵盤タッチ位置です。左側が0番として26番まであります。縦軸がAD変換された電圧の値です。PIC内蔵ADCをVCCレファレンスで使っていますので、1023が3.3Vとなります。



まあリニアと言ってよいのではないかと思います。なお、手前・半音・奥のリボンで値にほとんど違いは見られませんでした。





「ほぼ」の分はおいておくと、とりあえずやりたかったことはできたので、



次に何やろうか考え中です。



例えば:



 ・音声出力の方をAD変換して連動表示(しかし何を?)



 ・キー操作(今IOを入力にして見ていますが、出力にしてしまえば逆に操作もできるはず。)



 ・鍵盤操作(今ADCで見ていますが、逆にDACを付ければ多分操作できるはず。



        しかしそれは普通の自動演奏であって手間の割におもしろくなさそう。)



 ・MIDI操作(できるかな?)





それではまたです。




2014.04.22 Tue l PICマイコン l コメント (2) トラックバック (0) l top

鍵盤読み取りの方は、LOWパルスタイミングで読むようにしてだいぶ改善はしたのですが、まだ安定していません。もう少しかかりそうです。


とりあえず簡単な方の口パク改良を行いました。



色も少し改善しました。裸眼で見ると結構綺麗だと思うのですが、使っているデジカメの動画モードがあまり良くなくて撮られた動画の明るさ・コントラストがいまいちです。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">





動画補正ソフトで改善はしてみたのですが、それでもいまいち。。。ビデオカメラも欲しくなってきてしまいました。







ソフトとしては、母音5つ分の口周りデータを用意しておいて、それをポケットミクプリセットの楽譜に合わせて切り替えています。楽譜との同期は各プリセットパターン用にテーブルを用意することで行っています。



鍵盤のドレミモードの場合は鍵盤位置を読み取って、”ドレミファソラシド”→”OIIAOAIO”のような変換をかければできるのですが、いまは鍵盤読み取りがうまくいっていないので、その機能は入れていません。



鍵盤の方ですが、LOWパルスタイミングで読むことで殆どのキーは正しく読めるようになりました。数値で見る限りでは手前、半音、奥で値が変わることもなくなっています。



しかし、どうも安定しなくて、読み取ったキー番号がふらつくのです。。。ソフトではなく、ノイズ原因かもしれないな、と思い始めたところです。




とりあえず今週末はここまで。



それではまたです。



2014.04.21 Mon l PICマイコン l コメント (0) トラックバック (0) l top

鍵盤の波形をオシロで少しまじめに解析してみました。



Dscf3260
オシロがSTN液晶の安物オシロなので見づらくてすみません。最近表示がちらつくのでTFTの新しいのが欲しいのですが、先立つものが中々(^^;



Dscf3259



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




分かったこと:



・鍵盤の抵抗板には2ms間隔でLOWパルスが見えます。幅は80us程です。



・スタイラス入力で見たそのLOWレベルはスタイラスが当たっている鍵盤横位置に相関します。



・そのレベルは鍵盤の手前、半音、奥の無段階に関係なく、横位置だけによって決まります。



・つまり、このLOWパルスのタイミングでAD変換をかければ鍵盤の位置が正しく読み取れるはずです。




そのLOWレベル以外のタイミングでのレベルは鍵盤横位置と相関しているように見えますが、良く見ると安定しておらず、手前・奥行き方向によって変わります。いまのソフトで鍵盤が正しく読めないのはそこでADCをかけているためです。




これはおそらく、ポケットミクの制御としては、LOWパルスとして見えているタイミングで抵抗板に与える電圧をドライブしていて、それ以外のところはドライブを切って余韻電圧になっているのではないかと思います。理由は消費電力低減でしょう。ドライブしっぱなしだと電流食いますので。 




最初に波形見たときにそうかもしれないと思ったのですが、とりあえず簡単なやり方をしてしまいました。安易なことをしてはいけませんね。



LOWパルスタイミングを検出する方法としては抵抗板ドライブ側の変化を監視していれば簡単なのですが、いまはそこはPICに繋いでいません。



PICマイコンのピンの余りがあまりないし、今から配線を追加するのも面倒なんで、できればソフトだけでやろうと思います。キーと同じように20usタイマーで監視してレベルが下がる所を捕まえればよいかと。



今日はこれから飲み会なので、明日時間が有れば続きやります。



それではまたです。



2014.04.19 Sat l PICマイコン l コメント (2) トラックバック (0) l top

ようやく週末ですので、少し早起きしてソフトいじってました。


鍵盤読み取りの方は進捗無しです。。。もう一度オシロで波形をみて解析しようと思います。


しかしとりあえず鍵盤ON/OFFの区別はついているので、それを使って口パクをさせてみました。





「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




2コマで口のあたりだけON/OFFに合わせて差し替えているだけですが、それっぽく見えているかな、と思います。



 



なお、色が薄いように見えるのは多分データ作成時のカラー変換に問題が有ります。PICのROMサイズ制限が有るので、RGB24bppを8bpp(RRRGGGBB)に落としてデータ化し、サイズを減らしています。液晶は16bpp(Rx5,Gx6,Bx5)なので、表示の際にまたビット拡張しているのですが、その過程でRGB値が落ちているみたいです。



 



そのあたりの改善、もうちょっと高速化、鍵盤対応、あたりをこの後やってみようかと思います。





それではまたです。



2014.04.19 Sat l 未分類 l コメント (0) トラックバック (0) l top

週末進行といっておきながら、ポケミクは面白いのでついいじってしまいます(^^;



今日は鍵盤読み取りを試してみました。




「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




回路は以下の通り。鍵盤用スタイラスの信号をPICマイコンのAN1に繋ぎました。



Miku23a




ADCの制御は以前作ったフリスクオシロ用のルーチンをコピペしましたので簡単でしたが、問題はスキャンタイミング。オシロで見たところ、鍵盤にも何かパルスが入っているので、そこを避けてAD変換しています。



波形をみたところ、鍵盤のパルスはスイッチスキャンパルスの後にでているようなので、20usタイマーで作っているスイッチスキャンと同期させてADCを動かすようにしてみました。



動画を見ると分かるように、スタイラスがタッチしているかどうかとある程度の位置は分かるようになっています。。。。しかし、タッチ位置と電圧の相関がリニアではないこと、鍵盤の手前側(正しくはなんと言うのでしょうか?とにかく普通のドレミ音の所です)キーと、半音のキー、さらに奥の無段階の所、で電圧範囲が全然違うことがわかりました。




つまり値だけでは手前側、半音側、奥の無段階部分の判別ができません。ポケミク本来の制御はどうやっているのでしょうか?どうも今逃げている鍵盤パルスがキーのような気がしています。言葉だけだとわかりませんね。この次はオシロ波形も載せたいと思います。



 



まだまだソフトの直しが必要です。。。



それではまたです。





2014.04.16 Wed l PICマイコン l コメント (3) トラックバック (0) l top

キー状態の読み取りとモード表示までできました。






見づらいので今回の動画はHDにしてみました。



バグも目立ちますね。。。。。




「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




現状の回路図は以下の通りです。



Miku2




とにかく力技で空きIOポートをポケットミクのキーパッドに繋いでいますが、これは見た目ほど大変ではありませんでした。



 



苦労しているのはソフトウェアの方です。



キースキャンは2ms間隔で80usのパルスが出ているのはわかっているのですが、それに同期する方法がなくて、考えた末20us割込みをセットしてどれかのキーに2回パルスが出ていたらそこで全キー状態を取りこむようにしました。



 



オンだけ見れば良いモードキーはそれでよいのですが、2つのボリュームキーはクリック的な動きを見る必要が有り、なんとかしたつもりですが、どうもぎこちないです。



他にあからさまな表示バグもあるし画面も単調だし、表示も遅いし、と色々不満がありますので、改善してからソースを公開したいと思います。



 



あとは機能としては鍵盤の状態をADCで読み取って表示反映の予定です。






それではまたです。




2014.04.15 Tue l PICマイコン l コメント (0) トラックバック (0) l top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。