« プラスチック製フルート、NUVOから | トップページ | Web MIDI Browser 1.0.3でSysExが送れない問題 »

2015年4月14日 (火曜日)

Web MIDI Browserが1.0.3へバージョンアップ、フルスクリーンブラウズが可能に

20150414webmidibrowser480

 iOSでWeb MIDI APIが使える唯一のブラウザ「Web MIDI Browser」がバージョンアップした。

 新機能は以下の2つ。

  • フルスクリーンブラウズが可能に
  • SysExの使用可否の設定が可能に

 1つめのフルスクリーンブラウズはけっこううれしい。画面が広く使えるしぱっと見普通のアプリみたいに見える。後者のSysExの使用可否は、MIDIデバイス内部のデータを抜き取られる可能性を心配してのことだろうか? (Web MIDI API関連のフォーラムとかで議論になってたかと思う)。まあ、こちらは、ユーザーが設定できるので、問題ないと思われ。

  で、気づいた点をいくつかメモ。Web MIDI Browserが必要とするiOS 8がぎりぎり動くiPad 2で使用。環境依存の問題かもしれないし、検証不足なところも多いのだけど、作成中のプログラムの現状の記録という意味も込めて記録。

 フルスクリーンブラウズで、上にあるURLの入力欄とか、下に出る設定関連が表示できない場合がある。画面を上下にスワイプ(?)すれば出る仕様だと思うんだけど、これが出ない。同じページを開いても、出たり、出なかったり。画面がスクロールせずに全体が見えるページで、画面上のいくつかの要素にpreventDefaultとかstopPropagationが設定してあると、そうなる頻度が高い気配。画面の外側からスワイプしてもだめ。リロードもできなくなるので、いろいろ困る。仕方ないので左右のスワイプで前のページに戻って、なんとかしたりしている状態。なんか別の方法があるんでしょうか?

 これと関連して、preventDefaultの挙動も時々謎。これは前のバージョンからある現象。WebAudio-Controlsのknobは最初からpreventDefaultが設定されており、つまみをいじった際にはスワイプによる画面スクロールはキャンセルされるはず。だけど、これがなんらかのタイミングで機能せず、値を変更しようとすると、画面が上下することがある(同時につまみもちゃんと動く)。これもタイミングとかが不明。リロードすればうまくいったりする。タッチ対応のプログラミングを把握できてないので、JavaScriptのコードでなんかを見逃してるかもだけど。

 それから、なぜかSysExが送れない。上記の2つと違って、操作でなんとかできないのがつらい。

 SysExの使用可否のオプションがSettingsで出せるのだけど、これを変更してもだめ(緑になったONだと思うんだけど、ON/OFFどっちもダメ)。すべてのWebアプリでだめなんじゃなくて、問題なく送れるものもある。その違いがわからない。

 現在作成中のWebアプリで昨日から発生。たぶんWeb MIDI Browserバージョンアップの後。バージョンアップ前は普通に動いてた。ここ数日、自作WebアプリのプログラムでSysExまわり以外の部分に手を付けていて、それがようやく問題解決。で、SysExの送信を数日ぶりに試すと、これがダメ。むー。前に動いてた時から、いろいろ付け足す段階で余計なところに手を付けたか? ちゃんと記録してなかったので、わからない。

 で、SysExを送れるWebアプリと、送れないWebアプリはまったく規模(というかプログラムの行数)も違っている。送れないやつはかなりでかくなっていて、回避策を探すのも一苦労になりそう。

 SysEx送信処理をしても、エラーメッセージは出てない模様(window.onerrorを拾って、画面上に出すことで確認)。iPad 2の処理速度が足りてないとか、そういう問題だったりして。

 あと、もう1つ。こちらのプログラムがまずいのか、Shadow DOMへのアクセスができてない(この表現が合ってるかどうか、わからない。Shadow DOMなんてつい最近知ったばかりだ)。これはPolymerエレメントのx-webmidiを使っていて気づいたところ。

 「$("#midiOutput /deep/ option")」みたいに、MIDI INデバイスを選択するドロップダウンメニューの中身にjQueryでアクセス。デスクトップ版のChromeでは、これでうまくいってたのだけど、Web MIDI BrowserではこれがScript Errorになる(もちろん、値は拾えない)。このエラーメッセージは該当する行が表示されないので、探すのに骨が折れた(エラーが出ても、それ以降、そこ以外の機能の中核部分は動いてたから、というのも探すのに時間がかかった原因でもある)。(追記:jQueryのバージョン変えたらエラー出てた。15日)

 ドロップダウンメニューに出てくるデバイスを自動で選択するようにしたかったのだけど、こんなわけでiOSではうまくいっていない。まあ、Androidではデバイス名自体が表示できないので、それに比べればぜんぜんましなのだけども。(追記:これ書いたあと、別の方法に気づいた。あとで試す。14日 →さらに追記:やっぱりだめだった15日)

 以上、4月14日の記録。例によって、勘違いも多分にあると思われるので、あくまでも個人の記録ということで。

 なんか気づいたら、また書きます。

 それにしても、デスクトップのブラウザで書いたプログラムがそのままiOSで動くのは楽しい。特にMIDI関連アプリだと、iOSにおけるタッチならではの利便性は、マウス操作がメインのデスクトップPC以上。マウスポインターの移動ってけっこうストレスなんだなあ、と改めて思ったりもした。画面上につまみがいっぱいあったりすると、それが実感できる。しばらくはまた手がつけられないと思うけど、早いうちになんとかしたいなあ。

(追記:4月15日)

 いくつか本文中に追記。あと、Windowsでは出ないエラーがWeb MIDI Browserで出てる。ちゃんと動いてた当時は気にしてなかったけど、一応、記録。

 ReferemceError: Can't find variable: _callback_receiveMIDIMessage

 というやつ。これが関係あんのかな? 「WebMIDIAPIShimForiOS」。変数名はまさにこれだ。

 自分のプログラムでは、該当するエラーがどこで発生してるかがつかめてないんだけども。後でなんか気付けるように手がかりを残しておく。これはバージョンアップ前から出てて、特に動作には問題なかった。たぶん、関係ないと思うだけども。


|

« プラスチック製フルート、NUVOから | トップページ | Web MIDI Browser 1.0.3でSysExが送れない問題 »

コメント

いつも情報ありがとうございます m(_ _)m
バグや使いづらい点、少しずつ直していきますので、ぜひぜひ、引き続きいろいろ教えてください。

・ナビゲーションが出なくなってしまう問題
iOS の API で、画面が上または下へスクロールしたことを検知してナビゲーションを再表示しているのですが、上手くいかないケースがあるのですね... 対策を考えてみます。

・SysEx を送信できない問題
こちらの確認では、1.0.3 で SysEx の送信処理に問題ありませんでした。もしよろしければ、SysEx を送信できない Web アプリを教えて頂けないでしょうか? こちらでも引き続き調べてみます。

SysExの送信については推察の通りで、セキュリティの観点から 1.0.3 から制御を入れました。その過程で、なにかエンバグしてしまったかもしれません。。。

投稿: Takashi Mizuhiki | 2015年4月16日 (木曜日) 午後 12時01分

・ナビゲーションが出なくなってしまう問題
ちょっと裏技っぽいですが、preventDefault() でスクロール制限したWebページを表示させた状態でナビゲーションを出す方法があります。文章だと説明しづらいので、ビデオにしてみました。これで回避できないでしょうか?

https://www.youtube.com/watch?v=_UF805uP-0A&feature=youtu.be

投稿: Takashi Mizuhiki | 2015年4月16日 (木曜日) 午後 01時53分

こちらこそ、いろいろ対応ありがとうございます。

ナビゲーションについては、教えていただいた方法(画面外側の上からスワイプ?)でもだめな場合があるようです。タッチ対応のプログラミングがまだわかってないので、もう少し、こちらでも検証してみます。

あと、SysExの許可については、わかったところを別記事にまとめました。

http://pointofviewpoint.air-nifty.com/blog/2015/04/web-midi-brow-1.html

こちらも見ていただければと思います。お手数かけますが、よろしくお願いします。

投稿: ここの人 | 2015年4月16日 (木曜日) 午後 05時31分

> あと、SysExの許可については、わかったところを別記事にまとめました。

おかげで原因わかりました。
x-webmidi が、requestMIDIAccess の時に、"sysex" のパラメータ値を文字列型で渡してくるようで、これを、Wrapper 側で無効値と判定していました。次のバージョン(1.0.4)が今リリース待機中で、次の次のバージョン(1.0.5)で修正される予定です。情報ありがとうございました m(_ _)m

投稿: Takashi Mizuhiki | 2015年4月16日 (木曜日) 午後 06時16分

> 次の次のバージョン(1.0.5)で修正される予定です。

楽しみにしてます!

あと、preventDefaultなどの挙動について、おかしいと書いたのですが、こちらのプログラムの問題だったようです。すみません!

現在、こちらのWebプログラムを見直し中。イベント制御まわりをいまいちど一から書き直しています(ごちゃごちゃになってわからなくなってしまったので)。すると、前書いたような現象は発生していません。その後、ナビゲーションも問題なく出ています。濡れ衣着せてしまってすみません!!! 
こんな感じであれですが、今後もよろしくお願いします。

投稿: ここの人 | 2015年4月16日 (木曜日) 午後 11時07分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/35726/61438131

この記事へのトラックバック一覧です: Web MIDI Browserが1.0.3へバージョンアップ、フルスクリーンブラウズが可能に:

« プラスチック製フルート、NUVOから | トップページ | Web MIDI Browser 1.0.3でSysExが送れない問題 »