したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

おちゃめくらぶ掲示板

944御茶目菜子:2012/04/08(日) 15:41:12
棒歌ロイドキーボードが完成!
先月末から作っていた棒歌ロイドキーボードがついにできたにょ。
http://ww5.tiki.ne.jp/~ochame/petitcom/bo_kb.htm
http://www.youtube.com/watch?v=Rmks-sKVXaY
すでに1画面版(といっても14行)のものを発表しているとはいえ、やはりプチコン標準の
カナ入力ボードではいくら慣れても速度面でかなり無理があるし、指では入力が難しい
ためタッチペンでの操作になってしまうけどそうなると事実上右手でペンを持って左手で
支えるしかなくなるにょ。
そうなると音階演奏部分は必然的に十字ボタンとなってしまうのだけどそのせいで斜め
ボタンの入力を多用することになり実用レベルに達しているとは言い難いにょ。
まぁこれはいかに短いリストで作るかに焦点を置いており使いやすさは二の次という感じ
だったけど今回のは使いやすさに重点を置いたものにょ。

プチコンで文字入力をしながら音階演奏をする場合には文字入力と音階演奏のどちらを
タッチパネルで行いどちらをボタン操作で行うかによって操作性はまるで別物になって
しまうにょ。
当初は1画面版と同じ方式で考えていたけど「リアルタイム演奏は絶対に無理」という
ことで1画面はあきらめて他の方法を行うことにしたにょ。(結局途中まで作った1画面版も
あとからリスト短縮に最大の主点を置いて作り直したものを発表したけど)

操作する場合にはタッチパネルはブラインド操作は無理であるためそちらの方に視点を
集める関係上でボタン操作は慣れたらブラインド操作が容易であることが望ましいにょ。
そして、できるだけ速く、確実に入力できるものが望ましいにょ。
そういった条件のものに2つのものを試作したにょ。
1つが今回発表したようにボタン操作でカナ入力をしてタッチパネルの鍵盤で音階演奏を
行うというものでもう1つが3月30日に書いたようなタッチパネルで文字入力を行い
ボタン操作で音階演奏を行うというものにょ。

 試作品1
 http://www.youtube.com/watch?v=ZNqvttuZIv0
 試作品2
 http://www.youtube.com/watch?v=CrqIthUibVc

後者(試作品2)の方は、まだ清音のみの実装とはいえ一般的なフリック入力にほぼ準拠
したものであるためにスマホのフリック入力に慣れている人であればすぐに使えると
いうのが大きなアドバンテージになっているにょ。
前者(試作品1=今回完成させたものの原型)はABXYボタンをテンキーに模して
フリック入力をモチーフとした入力方法となっており、こちらも清音においては簡単に
入力できると思われるにょ。
どちらを完成させるか迷ったけど今回は前者を完成させることにしたにょ。(後者に
関しては後述)
やはり、少しでも早く完成させたかったのと前者と後者では使い勝手が別物であるため
それを両方搭載すると中途半端なものになりかねない(ベストな状態がわかりにくい)と
いうのがあるからにょ。
プログラム面を見ても2つを1つにまとめれば別々に発表したものを合算するよりは小さく
なるとはいえ大部分が異なっているためあまりリスト短縮効果は望めないにょ。(無理に
共用できる部分を増やそうとするならばリストの最適化を施すのが難しくなるため逆に
サイズ面では不利になる)

基本システムは一晩でできたもののネックとなったのはボタン操作による文字入力において
致命的な問題が見つかったからにょ。
清音においては「ボタン操作でこれ以上のものは考えられない」という配列であるため
それをさらに使い勝手を良くするために濁音と拗音ボタンを独立させて素早く入力が
可能になったにょ。
子音+十字ボタンで一発で拗音が出せるため拗音においてはフリック入力を超えると
思われていたくらいにょ。(例えば「ニョ」ならば同時押しさえ要らず十字ボタンの
右だけで出せるためどの入力方法よりも速い)
その結果、十字ボタンに割り当てている拗音を入力するときはタッチパネル上の鍵盤で
演奏ができないという問題が発覚したにょ。
結局拗音の1ステップ入力は諦めて2ステップ入力にすることでこれを解決したにょ。(とは
いえ、一応十字ボタンでの入力も残しているけどこちらも拗音を出す時のみ右手で演奏
すれば使えなくはない)

というわけで、ボタン操作による文字入力はこれ以上のものを望むのが難しいため次に
タッチパネルの鍵盤演奏について考えることにしたにょ。
重視したのは操作性とTALK命令により音のブツ切れ対策にょ。
プチコンでもすでにタッチパネルを使った鍵盤演奏プログラムは多数発表されているけど
やはりそれらのほとんどがタッチペンを使っての演奏を想定していると思われるにょ。
指で入力するためには最低ボーダーラインが鍵盤の横幅は16ドットくらい欲しいにょ。
これだと2オクターブ実装できるにょ。
楽器演奏ならば2オクターブでは足らないことが多いため2オクターブの鍵盤を2つ分用意
して4オクターブ出るようにしたり、中には3段分で6オクターブ出せるものもあるにょ。
横幅が16ドットが最低ラインといってもそこまで増やすと縦幅が狭くなり操作しづらい
ためにボーカル演奏ならば2オクターブあれば十分といえるにょ。

むしろ問題なのはどの音からどの音まで出せるかということにょ。
下限がド(C3)からだと演奏できない歌唱曲も結構あるためラ(A2)かソ(G2)までは
対応させておきたいところにょ。
そうなるとソ(G2)〜ファ(F4)もしくはラ(A2)〜ソ(G4)となるにょ。
これだと白鍵の数は14個になり横幅は16ドットを超えるものになるにょ。(計算上では
横幅が約18.3ドットになる)
しかし、白鍵の鍵盤数14個でも文字入力に十分に慣れておらず意識が右手の文字入力に
行ってしまうと結構ミスが目立ってしまうためさらなる横幅の増加が欲しいと感じるように
なってしまったにょ。(DSi LLならばまた変わってくるんだろうけどあいにく持ってない)

鍵盤の横幅を増やすのは簡単だけどそうなると鍵盤数が足らなくなる可能性もあり、
演奏できる曲にかなりの制約ができてしまうにょ。
そこで思いついたのが鍵盤サイズの可変機能とスライド機能にょ。
これがプログラムを書き換えたりせずに誰でも簡単かつ自由にできることによって
自分が最も使いやすい鍵盤にすることができるにょ。(GFILLとGBOXを使って描いている
ためにBG画面を使うものと比べてサイズを変更するのは非常に簡単にできるし、色で簡単に
判別可能であるため鍵盤の入力判定のコードも短くなる)
やはり、どの程度の音域をカバーしているのか、どの程度の横幅まであれば十分なのかは
曲によっても違うし個人差も大きいからね。
私自身も曲によって手軽に設定変更ができるというのは非常に恩恵が大きいにょ。
私の知る限りでは鍵盤サイズの自由可変ができるプチコンプログラムは私が今回作った
「棒歌ロイドキーボード」以外には存在しないにょ。(鍵盤スライド機能を持ったもの
ならば他者が作ったものの中に1つだけあったけど)

そして、重要となるのが音切れ対策にょ。
TALK命令で長時間(数10秒間)連続で発声させることは簡単なのだけど問題はあらかじめ
発生時間を決めておく必要があるということにょ。
したがって、一般的な方法としては長時間発声させるようにしておいてタッチパネルや
ボタンを離したときにTALKSTOPで停止するという方法によって時間調整をしているにょ。
この方法で音切れの原因となるのはTALK命令自体のタイムラグとボタンやタッチパネル
から指を離すことで発声する無音時間にょ。

TALK命令は発話速度Tを調整することで発声時間を調整できるし、発音したい音の語尾に
「ー」を付けることで調整もできるにょ。
先日も書いたようにTALK命令の音声の波形をおおざっぱに見ると下記のようになってい
ためまずはこれを見てみるにょ。(縦軸が音量、横軸が時間)
   ____
 _/    \___
 A B C?????? D E  F

A TALK命令実行開始(TALKCHKで1を返す)
B 発声開始
C-D発声中
E 発声終了
F TALKCHKで0を返す

しかし、発話速度を遅くするとTALK命令を実行してから実際に発音されるまでの時間で
あるBC間の時間が増加してしまうため素早い操作に対応できなくなってしまうにょ。
「ー」をたくさん連ねるとAB間の時間が増加してしまうためこちらも同様の状況になって
しまうにょ。
TALK命令は発音する文字によってそのAB間やBC間の時間は異なるため一概には言えない
ものの上限付近ではかなり顕著になってくるにょ。
それならば、発話速度を速くして、「ー」の数も減らせばいいけどそうなると今度は
連続して発声できる時間も短くなってしまうにょ。
許容範囲がどこにあるのは演奏者や演奏曲によって大きく変わってくると思うのでそれは
「バッファサイズ」という項目でいつでも容易に設定変更できるようにしたにょ。
レスポンス重視か発声速度重視かが簡単に調整できるということにょ。

ただし、これでTALK命令自体のタイムラグは妥協できるレベルになるとしても厄介なのは
演奏者が原因となる無音時間にょ。
これは「すばやくボタンを押せば問題ないのでは?」という考えもあるけどすばやく操作
するにも限界があるにょ。
ひたすら連射を行うだけならば秒間16連射も可能だけど普通だったらせいぜい秒間6連射
程度ではないかと思われるにょ。
これはテンポ120の曲の三連符の速度であるため無茶な速度ではないにょ。
実際にこの速度で連射をして、タッチパネルに触れている時間がどの程度あるのかを
プチコン上で実験してみたところ数回のテストの平均で接地時間は約3分の1程度である
ことが分かったにょ。
これは言い換えると1回押すのにかかっている時間(10フレームの時間)のうち接地時間は
3〜4フレームということにょ。
これば指を素早く動かしても1回あたり6〜7フレームの無音時間ができてしまうことを
意味するにょ。
当然ながらこれは「速く動かす」ということを考えてこのレベルであり、慣れないうちは
その数倍の無音時間になると思われるにょ。(だから音がブツ切れになって当たり前)

無音時間を減らすのにもっとも簡単な対策方法はボタンやタッチパネルから指を離しても
すぐに発声が止まらないようにすることにょ。
最低でも6〜7フレーム、設定によってはその10倍くらいの時間まで可能にすればかなり
音切れは軽減できると思われるけど止めたいときにすぐに止まらないというのはあまり
良いものではないにょ。
ピアノのダンパーペダルのように特定のボタンを押している間のみ鳴り続けさせる
というのも1つの方法だけどそのためにボタンを1つ占有されてしまうというのはあまり
良いものではないにょ。(専用ボタンを設けないと使い勝手が著しく低下してしまう)

しかし、タッチパネルでの演奏の場合は「押す」「離す」以外の操作が可能であるため
わざわざ専用ボタンを使う必要はないにょ。
今回私が行ったのは鍵盤を押さえた時は基本的に発声し続ける(ただしTALK命令の発声
可能時間内に限る)のだけどその発声中にタッチパネルに触れたままで次に押す鍵盤の
場所まで指を移動させてその鍵盤の上で軽く下方向にスライドさせて演奏させるという
ものにょ。
これを行えば上記検証で分かった「最低6〜7フレームの無音時間」をゼロにすることが
できるにょ。
私はこの演奏方法を「レガート奏法」と名付けたにょ。
もちろんこれはピアノ演奏では初歩のテクニック(バイエルを初めてすぐの頃に習う)と
なるレガート奏法を元にしたネーミングだけどこれができるのもタッチパネルの恩恵で
あると思われるにょ。(プログラムの処理的にはたいしたことはやってないんだけど)

このレガート奏法の効果は実際に試してみると非常に大きいことが分かるにょ。
例えば、デフォで発声される「ナ」の音だけどこの音は比較的発声タイムラグが大きめ
となっているにょ。
そのためバッファサイズゼロに設定しても秒間6連射ところか秒間4連射で同じ鍵盤を
押しても全く発声してくれないにょ。(発話速度10、「ー」を1つにすれば辛うじて
発音されるけどその代わり押し続けても一瞬しか鳴らないため実用にならないし、
ブツ切れ感は非常に大きい)
これはテンポ120の八分音符の速度であり、決して速いものではないにょ。(ピアノを
ONにしているとピアノ音だけ鳴るのを見てもプログラムそのものの処理が重いのではなく
TALK命令のタイムラグが大きいのが分かる)
しかし、そういう状況下であってもレガート奏法を行えば秒間4回同じ鍵盤を上下に
こするようにスライドさせてもそこそこ反応してくれるため効果の大きさは一目瞭然
だと思うにょ。
というわけで、とりあえずプチコン(DSi/3DS)で動作させるということを考えると
今回私が行った文字入力、演奏方法がベストな方法ではないかと思われるにょ。

あとの細かいことはプログラムの紹介ページに書いたけどその中から2点ほどさらに詳しく
書いていくにょ。
レガート奏法に直前の2フレーム分の移動量を使用したのかは1フレーム分だと誤差が極めて
大きくなるからにょ。
2フレームで8ドット分の移動量ならば1フレームで4ドット分の移動量でも同じようだけど
実際はある程度力が入っていたら指を置いたときのちょっとしたずれで数フレーム分移動
してしまうためにょ。
1フレーム分の移動量だと誤差が大きいし、たくさんのフレーム数だとその分だけたくさん
だけ変数を用意しなくてはならない(リングバッファを使えば処理は簡単とはいえできる
だけ短いコードで意味のある動作をさせたかったため)というわけでベターに感じたのが
2フレームで8ドット分にょ。(これが15とか20ドットくらいになると今度は演奏のミスが
増えてしまったし、あまり参照フレーム数を増やすとレスポンスも下がってしまう)

それとデフォ設定でド(C3)ではなくラ(A2)を鍵盤の下限の音にしているかということ
だけどこれも理由があり、デフォ設定でどんな曲も無難に弾けるようにするためにょ。
確かにスライド機能があるから必要な人だけ変えればいいんだけどね。
それは私も思ったけど鍵盤数を23個まで増やせる関係上ドを下限にしてしまうとその上限
設定ができないということも理由にもなっているにょ。
鍵盤位置がデフォの状態だと鍵盤数を23個の上限に設定したときに音域の上限になるように
なっているにょ。
設定を変えないと選択できない機能があるというのは個人的にはあまり好ましくないし
かといって鍵盤数の設定を14段階にするというのもあまり好きではないためにそうなって
しまったにょ。(一見するとキリが良い10段階にするという方法もあるけど0H〜FHまでの
16段階や00H〜FFHまでの256段階が最もキリが良いと感じているという主観的な理由による)
それならば逆に鍵盤数の下限を6まで選べるようにすれば16段階の設定でデフォの鍵盤位置
においてドをデフォの下限の音にすることができるという考えもあるかもしれないけど
その場合は6音だとあまりに弾ける曲に制限がある(「きらきら星」くらいか)だけでは
なくてキーボードスライドルーチンが長くなってしまうためにょ。
このスライドルーチンは1オクターブ上の黒鍵の有無(GSPOITで黒鍵の色から判断)を
調べているという単純なものだけどその手段が使えなくなってしまうからね。
いくらでも他の方法はあるのだけどわざわざ長いコードにしてまでそこまでする価値を
見いだすことはできなかったにょ。
それでも変えたいという人はどんどん自分好みに変えて欲しいにょ。

最後にさここで先ほども書いたタッチパネルを用いてフリック入力で文字入力を行い
ボタンで演奏するというもう1つの案(試作品2)についてだけどここまでタッチパネルでの
演奏が快適になるとボタンでの演奏はかなり見劣りしてしまうにょ。(確かにバンブラの
ようにすべてのボタンを割り当てればそれなりに快適に演奏できるとはいえ、それは私の
文字入力で拗音が入力できないというのと同じであり、すべてのボタンを使うことは
できないわけだし、音切れ対策を行うならばさらに使えるボタンが減ってしまうために
快適に演奏できるものにするのは極めて困難)
確かに文字入力だけを見ればタッチパネルでフリック入力を入力した方が快適とはいえ
肝心の演奏部分にここまでの差ができてしまうとそれを埋めるにはかなりの工夫が必要に
なってくにょ。
せめて、ボタンがすべて使えたらバンブラ式で結構快適に演奏できるのだけど文字入力を
しながらだとABXYボタンか十字ボタンのどちらかは事実上使えなくなってしまうからね。
それでボタンを使った快適な演奏は難しいにょ。

演奏部分には大きな問題があるけど文字入力は完璧かというとそうでもないにょ。
フリック入力はカーブフリックによる文字入力について研究して(手元にカーブフリック
対応の機種がないためその使用感を得るためには店頭で確かめるしかない)それに
見劣らないレベルで文字入力を可能にしたいところにょ。
そして、ボタン操作で上記のような快適に演奏できる方法が見つかり、さらに音切れを
緩和させる方法が良い方法(1つの方法として挙げた上記のダンパーペダル式だと演奏に
使えるボタンが1個減ってしまう)が思いつけば開発を再開するにょ。
ただし、その前に作るのに飽きたら開発はそこで一端終了となるにょ。
とりあえず、当初に作ろうと思ったものはできたので代案の方は安心してゆっくり
進めることができると思うにょ(笑)
そのうち、こっそり完成させてプチコンコーナーの方に公開しておくかもしれないにょ。
よほど「ここを見て欲しい」という工夫した点がないとここでわざわざそれについて
こんなに書くことは無いだろうからね。




掲示板管理者へ連絡 無料レンタル掲示板