2017年8月12日土曜日

Raspberry Pi 用 I2S Audio I/O (PIAiF / Dm9 Records) を Fs=96kHz で使う

PIAiF by Dm9 Records を Fs=96kHz で使う

Dm9 Records さんが設計・公開している Raspberry Pi 用 Audio I/F PIAiF で色々実験をしています。PIAiF は、Raspberry Pi 内蔵の CODEC よりも断然音がよく、また、Raspberry Pi の子基板として載せてもサイズがぴったりで邪魔になりません。さらに、延長ピンヘッダが実装されているので、ピンヘッダが占有されず、LCD など他のデバイスを併用することができます。


この PIAiF に搭載されている CODEC チップの WM8731 は、最大 24bit/96kHz で動作する CODEC なのですが、当初はうまく動作しませんでした。Fs=96kHz に設定した自作シンセでは、音が鳴るのですが再生音がおかしくなってしまいました(ピッチが高くなる)。96kHz の WAV ファイルを aplay コマンドで再生した場合も、同様にピッチがおかしくなりました。この時、私の Raspberry Pi の環境は、
  • Raspberry Pi 3
  • Raspbian GNU/Linux 8 (jessie)
  • Kernel version 4.4.50-v7+
でした。

色々調べてみると、どうやら、CODEC ドライバのカーネルモジュールの rpi-proto に問題があるようで、Fs=48kHz 以外の、32kHz や 96kHz に設定する際に、BCLK ratio の設定値が適切に設定されていないようです。こちらの記事に、この問題に関しての言及があります。そこで、記事にある通り、こんな感じのパッチを当て、Fs を変更した時に、適切に BCLK ratio が設定されるように修正した上でカーネルモジュールをリビルドし、標準のカーネルモジュールと差し替えたところ、96kHz 出力でも正しいピッチで音が鳴るようになりました。

ただし、Fs 変更直後に音が出ない(または再生ピッチがおかしくなる)という問題がまだ起きています。この場合は、再度(Fs 変更せずに)再生を開始すると正常に音が鳴るようになります。この原因がどこにあるのかはまだ掴めていません。しかし私の用途では、Fs=96kHz でシンセを動作させられれば大満足なので、これ以上の調査は進めていません。

この PIAiF、Line out & Headphone out だけでなく、Line in も用意されていますので、エフェクタを作りたい向きにもちょうどいいのではないでしょうか。なお、Fs=48kHz で使うのであれば、上記のような細工をする必要はなく、PIAiF を Raspberry Pi にマウントし、/boot/config.txt へ "dtoverlay=rpi-proto" の一行を追記するだけで使えます。このような、便利な DAC/ADC が Raspberry Pi で使えるのは、シンセビルダ/エフェクタビルダにとってはとてもありがたいことですね。

2017年8月7日月曜日

Maker Faire Tokyo 2017 に出展してきました

Maker Faire Tokyo 2017 に出展してきました

先日の 告知通り、Maker Faire 2017 に出展してきました。今年は、東京ビックサイトの東7-8ホールという、正門から一番遠い場所にある会場でした。


Raspberry Pi を使って、電子楽器用のシンセサイザ音源を作り続けて 3 年目。去年までは、音源に音色変更用のボタンをつけただけのものでしたが、今年は音色エディット用のパネルの製作に挑みました。

パネルにノブを並べるだけではありきたりなので、長年あたためていたアイデアである、ノブと EG セグメントの対応が直感的にわかる UI、という仕掛け組み合わせて、初めてシンセを触る人でも簡単に音作りのコツが掴めるシンセサイザの実現を目指しました。またもう一つ、こちらも長年やりたいと思っていた、ヤマハ DX1 のアルゴリズム表示部を再現するという試みも行いました。

EGの遷移に合わせて光るノブ

FM音源では、オペレータごとに用意されている多数の EG(エンベロープジェネレータ)を簡便にエディットできるようにすることが簡単に音作りできるようにするためのポイントなので、まずはこれをノブで操作できるようにしました。また、今回開発したシンセサイザでは、発音させると、EG の遷移に合わせて、対応するノブが点灯するようになっており、どのノブがどの位置のエンベロープを変化させるのかが容易にわかるようになっています。EG のパラメータは、必要最小限に絞ることにより、少ないノブで必要十分な表現ができるよう工夫してあります。


7セグメントLEDを使ったアルゴリズム表示部

もう一つのチャレンジが、ヤマハの FM シンセサイザー DX1 の、アルゴリズム表示部を復刻する試みです。アルゴリズム表示部が 7 セグメント LED をマトリックス状に並べて、レイアウトに合わせて必要な部分が点灯するという、贅沢な仕様でした。以前に NAMM Show に出展されていた現存の 1 台を見たことがありますが、見た目は(現代のシンセに比べれば)地味ながらも個人的には大興奮した一品です。これを自作で復刻したというわけです。


また、この 7 セグメント LED は、タッチセンサとして機能するようにもなっており、タッチしたオペレータのパラメータを LCD 上に呼び出すことができます。こちらの動画でその動作の様子を見ることができます。仕組みは、タッチセンサの周りに銅箔テープを貼り、それを電極として静電容量を検出しスイッチとして作動させるというものです。原理試作ができるまではうまくいくか心配でしたが、意外にもすんなり動作しました。こんな簡単な方法でもスイッチを作れるので、今まで見たこともない部品との組み合わせで操作子を作れるかもしれませんね。

これから

まだまだ荒削りですが、徐々にシンセの中身が揃ってきましたので、次は、筐体を作ってみたいと思っています。基板むき出しなのが今ひとつなので、アクリルで上面だけでも仕上げたいと考えています。また、今回はユニバーサル基板とポリウレタン線を使った工作でしたが、そろそろ配線作業に限界を感じ始めたので、安価になって手を出しやすくなったプリント基板製作にもチャレンジするつもりです。

ブースにご来場いただき説明を聞いてくださったみなさま、また、会期中に交流させていただいた出展者のみなさま、楽しい時間をありがとうございました。

関連リンク



2017年8月4日金曜日

Maker Faire Tokyo 2017 に出展します

Maker Faire Tokyo 2017 に出展します

今年 (2017) も、8/5〜8/6 に開催される Maker Faire Tokyo 2017 に、いつもの奇楽堂さんと一緒に作品を展示します。今年の出展物は、Raspberry Pi に 4 オペレータの FM ソフトシンセを仕込んで、音色エディット用のパネルをつけた "Raspberry Op.4" です。

デモムービーをアップロードしましたのでご覧ください。



当日会場に来られる方は、お時間があればブースに遊びに来てください。奇楽堂&Company I-02-02 にいると思います。



2017年1月11日水曜日

METEX P-10(通称:秋月テスター)を PC へ繋げるように改造した

かれこれ 10 年くらい、秋月で買った METEX P-10 を愛用しています。安価ながらオートレンジで、かつコンパクトなのが便利です。残念ながら、今はもう販売していないようです。

METEX P-10

このテスターに内蔵されているチップには、LCD に表示されている値を、シリアル出力する機能がついています。METEX P-10 ではこの機能は使われていませんが、簡単な改造で使えるようになります。指示値を取り出せるようになると、データロガーとして使えます。すでに、このような改造をされた方は多くいて、"METEX P-10 改造" で Google 検索するとたくさん製作例が出てきます。私も、これら先例を参考に、手元の P-10 を改造してみました。

まず、本体を分解します。電池カバーを開けてボタン電池を取り外し、裏側から 4 本のネジを外します。電池カバーを止めるネジと、ケースを止めるネジは、それぞれ違うものが使われていますので混同しないように注意しましょう。分解作業で特に難しいところはありません。

樹脂のツメで基板に固定されている LCD を取り外すと、チップ(FS9711_LP3) が見えます。このチップの、84 番ピン(ENTX) を GND に落とすと、シリアル出力機能が有効になります。シリアル信号は、64 番ピン(TXD) から出力されます。チップのデータシートは、こちらから入手できるようです。

64 番ピンと 84 番ピンをジュンフロン線で引き出します。
64番ピン(TXD)と84番ピン(ENTX)をジュンフロン線で引き出す

さらにテスターの Vdd と GND を引き出します。Vdd は、C2 のプラス側から引きました。テスターのスイッチを入れた時だけ、ここに電源電圧がかかります。GND は、ピエゾの黒から引きました。
airvariable さんの作例だと、ピエゾの赤から引いてるのですが、私の手元にあった P-10 はバージョン違いなのか、ピエゾの黒が GND になっていました。

Vdd と GND を引き出す

信号と電源を基板から引き出したら、ケースに小さな穴を開けて、引き出した 4 本の線を、本体右側にあるプローブを格納するスペースに引き出しました。このスペースは、プローブを収めるにはわずかに高さが足りてなくて、うまくプローブが入りません。そのため、このテスターを購入してから一度もここにプローブをしまったことはありません。今回は、この空間に、PC 通信用の回路を収納します。

ケースを閉じて電源を入れてみます。ENTX と GND をショートすると、LCD に "RS232" の文字が現れます。

"RS232" の表示が LCD に出る

この状態で TXD をオシロで見ると、それらしい信号が出ていました。そこで、秋月の USB シリアル変換モジュール を使って PC に接続し、Ts Digital Multi Meter Viewer で指示値を受信できるか確認しました。Ts Digital Multi Meter Viewer では、テスターの機種設定を "WENS 20T" に設定します。機種を設定後、ツールバーの "CONNECT" ボタンを押すと通信が始まります。

回路の動作確認、指示値を PC で受け取ることができた

ブレッドボード上で動作確認ができたので、ユニバーサル基板に回路を組みます。シリアル出力の有効・無効を切り替えるため、ENTX-GND 間をショートするスイッチをつけました。また、テスター側の回路と、PC 側(USB シリアル変換モジュール)の回路の間は、フォトカプラ (SHARP PC817) で絶縁しました。

随時動作確認しつつ、完成した基板をケースに収めます。テスターの基板から引き出した線が(作業の都合で)長く残ってしまったのですが、どうせこのスペースは他に使い道もないので、マスキングテープで雑に止めて処理します。また、USB ケーブル抜き差しで基板が動かないよう、ホットボンドで固定しました。

USB-シリアル変換回路をケースに収めた

USB 端子が出てくるあたりでケースに穴を開けました。穴が大きすぎました。もっと小さな穴でよかったようです。

ケース側面に穴をあけて、USB 端子にアクセスできるようにした

最後の動作確認を行います。ケースを閉め、ケースにあけた穴から USB ケーブルを差し込み、PC と繋ぎました。Ts Digital Multi Meter Viewer で LCD 指示値を受け取り、指示値の時間変化がグラフで描画されています。ケースのスリットから USB シリアル変換モジュールのパイロットLED(やたら明るい)が覗いています。改造感が漂います。

すべて組みあがったあとに PC に接続して動作確認

この改造に使った部品は以下の通りです。
  • 秋月の 超小型 USB シリアル変換モジュール, 600円
  • フォトカプラ PC817, 50円
  • カーボン抵抗 330Ω, 4.7kΩ(手持ちの部品から)
  • ユニバーサル基板(なにかの切れ端)
製作例を公開してくださった皆様に感謝します。この作例では、念のためテスターからの信号をフォトカプラで絶縁しましたが、それでも、このように改造をしたテスターを高電圧回路の測定に用いるのは、避けたほうが賢明でしょう。

2016年9月6日火曜日

Web Music Hackathon #5 @Tokyo に参加してきました

Web Music Hackathon #5 @Tokyo に参加してきました


少し前の話になりますが、2016/7/30 に Google の東京オフィスで開催された、Web Music ハッカソン #5 に参加してきました。Web のオーディオ関連技術(Web Audio API/Web MIDI API)を使って、面白いものを作ってみようというイベントで、今回で 5 回目になります。私は、このイベントの存在は知っていたのですが、参加するのははじめてでした。

今回のハッカソンでは、「DJ が活用できるツール」というテーマが設けられており、各チーム/個人がそのテーマのもと、一日中ハックを行いました。このイベントの前に、アイデアソン/チームビルディングイベントがあり、すでにチームを構成している参加者は、すぐにチーム開発を開始していました。私はチームビルディングイベントには参加せず、ハッカソンのみの参加でした。

ハッカソンで何を作ったか

このハッカソンイベントで、私は、Trend Sampler(トレンドサンプラー)という、ループサンプラーのようなものを作りました。Trend Sampler は、Google トレンドのキーワードを音声化し、それをステップシーケンサーでループ再生できるというものです。サンプラーといえば、一般的には、録音した(サンプリングした)サウンドを再生するツールですが、Trend Sampler は「インターネット上の話題をサンプリングする」というコンセプトで作ったサンプラーです。

インターネットの面白さは、毎日流れてくる情報が変化していること、また、ある時はその発信者にもなれるところです。Trend Sampler は、楽器の一種でありながら、毎日使える音源が変わり、そしてそれを自分ではコントロールできないところに、インターネットらしさを演出しています。演奏当日に何が出てくるかわからない臨場感を、DJ 側、観客側も味わえるのではないか、と期待しています。

ソースコードは GitHub で公開中、ライブデモはこちらです。Mac の Node.js 上で動く Web サーバを起動すると、Google トレンドから最新のトレンドワードを取得し、say コマンドを使ってサウンド化します。Web ブラウザからサーバへアクセスすると、生成された音声データをダウンロードし、ステップシーケンサで設定したタイミングに合わせてサウンドを再生します。

いちおう、このイベントの趣旨でもあるシリアスな DJ プレイに使えるようにと、次のような工夫をしています。
  • Web MIDI API 経由で受信したリアルタイムメッセージ(スタート、ストップ、タイミングクロック)をもとに、再生を外部シーケンサと同期する。
  • クロック同期できない(できるけどめんどくさい)状況に備えてタップテンポで BPM 推定
  • 再生速度設定、再生開始サンプル位置設定で、音声の音素がビートにのるように調整可能(手動)
  • テンポディレイ(お約束)

結果

審査員のみなさまの審査により、発表した15チーム中、3位をいただきました。たぶん、Web Music Developers JP の河合さんがアメリカで買ってきてくれた、Google ロゴの入ったボトルをいただきました、ありがとうございます。プレゼンは機材トラブルであまり上手くいかずちと無念。やはり、音や映像を使ったプレゼンは、リハーサルが重要ですね。

他のチームの様子は、河合さんのレポートが詳しいです。上位入賞が個人ばかりになってしまったのは、今回のような短時間のハッカソンイベントだと仕方ないのかな、と思います。それでもチームで挑み、見事ハックを完成させた参加者のみなさんは、本当に凄いと思います。お疲れ様でした。

雑感

このようなイベントを通じて、Web Audio API / Web MIDI API の認知度があがり、たくさんのハッカーがアイデアを具現化するようになることで、より面白い世界になっていくことでしょう。W3C 標準化を目指している Web Audio API / Web MIDI API は、そんな世界で、音・音楽との重要な足がかりとして役目を果たすことになるだろうと考えています。




2016年8月21日日曜日

Maker Faire Tokyo 2016 出展しました

Maker Faire Tokyo 2016 へ出展しました


昨年に引き続き、奇楽堂さんとご一緒に、Maker Faire Tokyo 2016 へ出展してきました。奇楽堂&Company ブースでは、
  • 昨年に引き続き「Magic Flute」
  • 六角形のタッチインターフェイスを使った新作「ハニカムベル」
  • ハニカムベル専用の音色を搭載した FM 音源モジュール「Raspberry Op.4」
  • タッチセンサを使った MIDI 出力モジュール「Touch MIDI」
  • パンチカードを光学センサで読み取って曲を奏でる「手回し MIDI シーケンサ」
を展示しました。昨年は、Magic Flute と Magic Flute 用物理モデリング音源モジュールのみでしたので、ずいぶんと作品の数が増えました。奇楽堂さんは、今回、「Touch MIDI」のイベント頒布にも挑戦されていました。


反応は?

手回しMIDIシーケンサ
「手回し MIDI シーケンサ」は見た目のわかりやすさもあって、多くの方が立ち止まって見てくださいました。光る、音が出る、は、目を引くための常套手段ではありますが、そこに大げさな手(体)の動きが加わると、さらに面白がって見てもらえるようです。ただ、二日間のデモの間ずっとハンドルを回し続けていたため、イベントの終わった翌日はひどい筋肉痛となりました。もう少し展示品の配線の取り回しを改良して、自由に触ってもらう形の展示にすればよかったかな、と後悔しています。

手回し MIDI シーケンサは、そもそも、学研の『大人の科学』の付録「手回し鳥オルガン」を改造したものなのですが、この号が刊行された当時の同誌編集長が、偶然ブースに来られ、ご挨拶できたことも良い思い出となりました。来場者の方からは、「私も作ってみたい」という声が聞かれましたが、残念ながらこの号はもう絶版で筐体を手に入れることができず、同じものを再製作することはできません。この時期の大人の科学はどれも傑作なので、何かの形で再販されるといいですね。


Raspberry Op.4



もう一つ製作を担当したハニカムベル用音源モジュール「Raspberry Op.4」は、拙作の iOS アプリ「DXi FM synthesizer」の音源部分をそのまま移植して利用しています。ハニカムベル専用音色ということで、FM の抜けの良い綺麗なベル音色を基本とし、複数の音が重なっても倍音がぶつからないようにチューニングを施しました。4 オペレータ12ポリの音源で、内部 32bit 演算、2 倍オーバサンプリング (88.2kHz) でエイリアシングを抑制しています。手持ちの Raspberry Pi 2 ではこれくらいが限界というところでした。また、まだ音色エディタがないため、iOS アプリ上で音色を作った後、データを JSON 形式で出力して Raspberry Pi へ送っています。今は音色を選択するためのボタンがあるだけですが、いつか専用パネルを作って、本体だけでエディットできるようにしたいな、と思っています。

その他の写真

ご一緒した奇楽堂さんが TouchMIDI イベント頒布を行いました。
スイッチサイエンスでも販売中とのことです。
ハニカムベル


ハニカムベルと Raspberry Op.4

リンク



2015年11月15日日曜日

DxO Optics Pro 10 Image Development Test

DxO Optics Pro 10 Image Development Test

DxO Optics Pro 10 Image Development Test with using PRIME noise reduction function.  Here is a comparison between Canon Digital Photo Professional and DxO Optics Pro 10. 

Canon EOS M + Sigma 10-20mm f/4-5.6

Canon Digital Photo Professional 4

DxO Optics Pro 10(PRIME)

Canon Digital Photo Professional 4

DxO Optics Pro 10(PRIME)

2015年8月9日日曜日

Maker Faire Tokyo 2015 無事終了

Maker Faire Tokyo 2015 無事終了



8/1-2 に行われた Maker Faire Tokyo 2015 の奇楽堂ブースにて、Magic Flute と組み合わせて拙作の物理モデル音源『Raspberry Phys(ラズベリーフィズ)』を展示してきました。DTM ステーションでもその模様がレポートされています。

Maker の祭典といえば、以前に、Make: Tokyo Meeting などにお邪魔したことはありました。薄暗い体育館の中で、謎の機械たちが蠢く催しでした。今回も、そのような様子を想像していたのですが、それは裏切られました。会場はとても綺麗で明るく、家族連れやカップルも楽しめるイベントになっていたと思います。

奇楽堂さんの Magic Flute は、たくさんの方にご覧いただけました。演奏中に LED がピカピカ光るキャッチーさに多くの方が足を止めてくださり、電子楽器なのに息の吹き込みを使って操作していることなどに驚かれていきました。もちろんご存知の方からは、EWI や WX といった単語が聞かれました。

前述のようなカジュアルな雰囲気の中で、「物理モデル音源」というニッチの中のニッチをいく作品がどのくらい受け入れられたかはわかりませんが、多くの方に、ソフトシンセを安価で高性能な CPU ボードに組み込んで自作 MIDI 音源を製作する、というアイデアと、オープンソースの便利なライブラリ STK "The Synthesis ToolKit" の存在を伝えられる機会となり、大変楽しい時間を過ごせました。惜しむらくは、Magic Flute の吹奏圧とブレスコントロールの間の係数の調整が甘かったことです。自宅でテストしているときは概ね吹奏圧は弱めだったのですが、お客様に説明する際などは緊張するために吹奏圧は強くなりがちです。そのため、音切れしてしまうことが多くありました。管のモデルでは、適正なエネルギーの入力が連続して維持されることで、音波が持続しますので、過大入力や過小入力では音が出ません。また、緊張による汗で、Magic Flute の静電容量センサの反応が鈍くなることもありました。こちらは、Magic Flute 側の改良に期待したいところです。

最後に、新旧問わず、たくさんの友人がブースに寄ってくださいました。暑い中、ありがとうございました。そして出展された皆様、お疲れさまでした。

2015年7月27日月曜日

Raspberry Phys を MFT2015 で展示します

Maker Faire Tokyo 2015(8/1〜2@東京ビッグサイト) で、物理モデル音源モジュール『Raspberry Phys』を展示します

8/1 から開催される、Maker Faire Tokyo 2015 にて、奇楽堂のサポートメンバーとして、Raspberry Pi 2 をベースに製作した物理モデル音源モジュール『Raspberry Phys(ラズベリーフィズ)』を出展します。

奇楽堂さんは、電子楽器を製作する個人プロジェクトです。今回、奇楽堂さんが開発した、電子吹奏楽器『Magic Flute』向けに、音源モジュール Raspberry Phys を開発しました。Magic Flute は、親指と小指を除いた 6 本の指を使い、3 オクターブの音域を演奏できる電子吹奏楽器です。Raspberry Phys は、オープンソースの音響処理ライブラリ STK (The Synthesis ToolKit) をベースに、Magic Flute 向けの音色を組み込んだ音源モジュールです。音源システムとして、物理モデル音源を用いました。物理モデル音源は、楽器の発音構造をモデル化し、コンピュータシミュレーションで発音する音源システムで、90 年代にはヤマハやコルグから、同音源システムを採用したシンセサイザが販売されていました。

物理モデル音源を Magic Flute を組み合わせると、吹奏圧を発音パラメータとして利用できるため、豊かな音色変化が得られます。ぜひ、Maker Faire Tokyo 2015 の奇楽堂ブース(C-02-04) にお越しいただき、その音色をお聴きください。

なお、Raspberry Phys は、販売も、頒布も、予定しておりません。前述の STK を用いると、どなたでも簡単に、物理モデル音源を試せますので、ぜひチャレンジしてください。Raspberry Pi で STK を動作させる方法を、以前 Qiita に書きましたので、あわせてご参考ください。

ところで、その筋の方(?) 向けにあらかじめ断っておきますが、Raspberry Phys は、「生楽器のようにリアル」な発音はできませんし、90 年代当時にヤマハが開発した物理モデル音源システムとは比べ物にならないほど安っぽい出音です。とはいえ、5,000円の CPU ボードとフリーソフトウェアでここまで遊べる時代、すばらしいですね。




製作中の様子:16x2 のキャラクタ LCD とスイッチx2 への配線をしています



2015年4月28日火曜日

Web MIDI Browser 1.0.5: 最新の Web MIDI API をサポート

Web MIDI Browser 1.0.5: 最新の Web MIDI API をサポート

Web MIDI Browser の 1.0.5 で、Web MIDI API の最新ドラフト (17 March 2015) (日本語版)で規定された API を提供するようになりました。この版のハイライトは、なんと言ってもホットプラグ対応です。ブラウザ内で Web アプリが動作している状態で、iOS デバイスへMIDI 機器が接続された場合に、Web アプリは通知を受けられるようになります。この機能により、Web アプリの操作性を、ネイティブアプリに近づけられるはずです。中で使っている WebMIDIAPIShimForiOS も更新しました。

実は、まだ仕様に完全対応とは言えず、現在の Wrapper の設計と相容れない部分があって、未実装になっている仕様があります。onstatechange や、state,  connection など、主要なインターフェイスは Chorme 43 Beta にそっくりにしてあります。してあるはずです。なっていなかったらごめんなさい。(間違っているところを見つけたらこっそり教えてください)



2015年4月20日月曜日

Web MIDI Browser 1.0.4: Apple Watch support

Web MIDI Browser 1.0.4: Apple Watch support

Web MIDI Browser 1.0.4 has been released. This version includes some bug fixes and Watch App extension. I don't know whether or not it's suitable as a Watch App. But we, Apple fans, must join the festival... right?

It's easy to use. You can enable "Enable Apple Watch Remote" option in the setting pane of the app. Then, a virtual MIDI port will appear. By pressing the button on Apple Watch, control change messages can be obtained from the virtual port. And then, cook them as you like. The function is available on iPhone 5/5s/5c/6/6Plus.


Watch Kit is a simple framework and has many restrictions. The button control, WKInterfaceButton, can observe Touch Up event only. So, I could NOT implement a control like a musical keyboard, sending noteon by touching-down, sending noteoff by touching-up. I really hope that it will get more controllable APIs in iOS 9... please, Apple guys.

And I fixed some bugs in this version. The next version, 1.0.5, will support the latest Web MIDI API, Chrome 43 spec, which includes the hot-plugging functionality. The polyfill library, WebMIDIAPIShimForiOS, is available on GitHub. It will be updated. Enjoy!

Web MIDI Browser 1.0.4 をリリースしました。このバージョンでは、バグ修正のほか、Apple Watch への対応を行いました。Apple Watch のアプリとして実用的かどうかはわかりませんが、お祭りなので。

使い方は簡単です。設定画面から"Enable Apple Watch Remote" を有効にすると、ブラウザ内で動作する Web アプリから仮想の MIDI Input Port が見えるようになります。そして、Apple Watch 上に現れるボタンを押すと、コントロールチェンジ ("0xb0 0x51 0x7f" 〜 "0xb0 0x54 0x7f") を送信します。あとは皆さんのアイデア次第。いろいろ遊んでみてください。この機能は、iPhone 5/5s/5c/6/6Plus で使えます。

iOS 8 の Watch Kit でできることは限られていて、このアプリでも使っている標準コントロールのボタン (Watch Extension 的には WKInterfaceButton) は、Touch Up (押したあと、離した時にイベント発生)しか検知できません。そのため、音楽アプリで使う鍵盤のように、押して Note On、離して Note Off を送信することはできないようでした。もう少し細かい制御ができれば、アプリの作り甲斐があるのですが。6 月に発表される iOS 9 に期待しています。

そのほか、いくつかのバグもあわせて修正しています。

今後ですが、次のバージョン (1.0.5) で、最新の Web MIDI API への対応を予定しています。今実装してあるのは少し古い Chrome 39 spec で、次のバージョンで Hotplug にも対応した Chrome 43 spec に合わせる予定です。中で使っている Web MIDI API の Polyfill は、WebMIDIAPIShimForiOS として GitHub で公開しています。こちらもあわせて更新されます。



2015年2月15日日曜日

Trying Gracenote API

Trying Gracenote API



My wife has tons of MD (mini disk). MD was a major medium for portable music player in '90s Japan. Unfortunately, it was killed by iPod. MD mediums and MD players no longer be able to buy nowadays. Therefore, she wanted to migrate songs from her MDs to iTunes library before her player breaks.

To help her, I bought a Behringer's USB Audio interface and connected her dated MD player. And I recorded whole tracks of the MDs through Audacity. Audacity has a function to split the recorded audio into multiple audio files by certain length of silences. The accuracy is so so. I needed to remove wrong split points sometimes. Anyway, the things worked well so far.

But, of course, these audio files have no name. It's a big deal nowadays. Because the song name is the ONLY identifier for selecting a song in iTunes library. But setting song name manually for all taped audio tracks is a heavy work... So, I tried Gracenote API to set song title into ID3 tag automatically. We can use Gracenote API for free of charge in non-commercial use.

I made a program for querying song title through Gracenote API. It's remodeled from a sample program in GNSDK. It can print a title string by querying fingerprint of the audio file which is designated in command line argument. I also made a simple shell script to rewrite ID3 tag from the output of the title query tool. I used id3v2 for editing ID3 tag. The accuracy of song name detection is slightly better than I expected. Anyway, it's really better than "no name". 

So, I could help her in return for chocolates her gave me today. (I wrote this article on 14th Feb)



2015年2月9日月曜日

DXi FM synth supports Bluetooth MIDI



DXi FM synthesizer version 3.8.0 is out. It supports Bluetooth MIDI instruments, e.g. Miselu C.24. Enjoy!

DXi FM synthesizer のバージョン 3.8.0 がリリースされ、Bluetooth MIDI 機器(Miselu の C.24 など)をサポートしました!お試しください。


2015年1月31日土曜日

Web MIDI Browser 1.0.1


Web MIDI Browser has been updated to 1.0.1. This new version includes an “Action Extension”. The Action Extension will let you launch the app from Action Menu in Mobile Safari. And then, Web MIDI Browser will automatically open the URL which is being opened in Safari at the time. The app’s functionalities are not enough for usual web browsing. So, I suggest
  • Use Safari in usual
  • Use Web MIDI Browser for web sites using Web MIDI API (You can smoothly launch the app from Action Menu)
And a small bug was fixed. Enjoy!

Web MIDI Browser のバージョン 1.0.1 をリリースしました。このバージョンには、”Action Extension” が同梱されています。Action Extension を使うと、iOS 標準のブラウザ Safari のアクションメニューから、このアプリを起動することができます。この時、Safari が開いている URL を自動的に開いてくれます。Web MIDI Browser のブラウザとしての機能は貧弱です。そのため、
  • 普段のウェブブラウズはもちろん Safari で
  • Web MIDI API を使ったサイトを開くときだけアクションメニューから Web MIDI Browser にスイッチする
という使い方が良いと思います。

また、このバージョンで、小さなバグを直しました。
ご要望などあればぜひお知らせください。



2015年1月8日木曜日

iOS 8 Safari Action Extension でハマる - 解決編

iOS 8 Safari Action Extension でハマる - 解決編

先日の記事で、iOS 8 Safari Action Extension から、URL Scheme を使ったアプリ起動に失敗した件、結局解決できたので追記。

non-UI Extension 用に用意されている JavaScript アダプタ内で location.href を書き換え

Action Extension には、UIを提供するタイプ("Presents User Interface") のものと、UIを提供しないもの("No User Interface") の 2 種類がある。後者の場合、Safari から Extension が
起動されたときに、Extension にバンドルされた JavaScript がロードされるようになっている。この JavaScript では、Pre 処理と Post 処理を記述できるようになっている。Pre 処理 (ExtensionPreprocessingJS.run 関数)で、DOM から必要な要素をピックアップし、Native 側に渡す。で、Native 側で必要な処理を行い、Post 処理(ExtensionPreprocessingJS.finalize)に渡して DOM へ変更を反映するという設計思想。
この Post 処理の中で、location.href を変更すれば、Safari が URL scheme をキックしてくれるので、マッチした URL scheme が登録されているアプリを起動できる。

実装方法

JavaScript を Action.js として Extension にバンドルする。

Safari の Action Menu を開き、作成した Extension のアイコンをタップすると、-(void)beginRequestWithExtensionContext: が呼びだされる。Native 側では特になにもせず、completion handler を呼びだすだけ。ただ、completeRequestReturningItems に、適当なパラメータを渡してやらないと、なぜか、ExtensionPreprocessingJS.finalize() が呼ばれなかった。

もうちょっとシンプルな方法がありそうだけど、ひとまず目的は達成。あとで内容を整理して、Qiita に投稿する。→投稿した


2015年1月1日木曜日

iOS 8 Safari Action Extension でハマる

Safari Action Extension でハマる

iOS 8 から、Safari Action Extension という、Mobile Safari のアクションメニューからプラグインのようにサードパーティアプリのコンポーネントを呼び出す拡張機能を提供できるようになった。早速これを使ってみようと思っていろいろ試したが結局使えなかった、という話。  →結局解決

Language: Swift を選択して生成した Action Extension のテンプレートが動かない

まず最初にハマったのが、Action Extension のテンプレートを生成するところで、Language: Swift を選んだところ、これが思うように動かない。具体的には、NSItemProvider の loadItemForTypeIdentifier の completionHandler が呼ばれない。結果、生成されるサンプルコード(DOM を操作して、背景色を赤にする)もちゃんと動いていない。

この問題は、テンプレート生成時に Language: Objective-C にすることで解決。Xcode 6.2 beta 3 でも再現するので Apple へバグレポートするかな...

Safari Action Extension からは Open URL できない

Extension のテンプレートは動くようになったので、本当にやりたかった、Extension から他のアプリの起動を試す。しかし、うまくいかない。まず、openURL: を使うために、UIApplication.sharedApplication が必要になるが、これにアクセスできない。まぁ、これは Extension のアーキテクチャから考えてもなんとなく想像できた。

Extension が起動されるときには、NSExtensionContext のインスタンスが渡されてきて、このインスタンスメソッドに openURL: がある。これだ!と思いきや、うまくいかない。NSExtensionContext の openURL: は、Today Extension からでないと使えないように制限がかけられている。
→ http://stackoverflow.com/questions/24297273/openurl-not-work-in-action-extension

で、この記事でも紹介されていた hack、UIWebView を経由して URL scheme をキックする方法を試したが、iOS 8.1.2 では弾かれてしまう。まぁ、仮に上手く動いたとしても、そもそも前述の openURL: の振舞いから想像するに、明確な設計思想による制約のようなので、App Review をパスできるかどうか微妙。

まとめ

結局、Action Extension から外部アプリを起動することはできなかった。
→解決しました

2014年11月1日土曜日

if then...

IFTTT や Zapier を使い始めた。

20 年くらい前は、サーバで cron 回したり、Procmail にレシピ仕込んだりして実現していたことが、今は Web ブラウザで簡単な質問に答えていくだけ。とても便利。

Dropbox の特定のディレクトリに mp3 を置いておくと、Podcast 用の RSS を生成してくれるレシピを使ってる。技術系セッションのビデオのオーディオトラックを mp3 にして Dropbox に放り込んでおくと、自動的に iPhone の Podcast に登録されるので、それを通勤中に聴いてる。参考にしたのはこの辺のレシピ。mp3 をそのまま「ミュージック」で同期すればいいような気もするけど、あえて Over The Air で。

この手のサービスでは、位置情報をトリガにしたレシピが面白そうなんだけど、位置推定精度がイマイチ。会社に着いたら、Evernote に出社時刻を記録するレシピを動かしていると、同じ時刻に数回レシピが実行されることがある。トリガするエリアの位置や範囲を少しずつ変えながら、いいポイントを見つけているところ。

2014年10月16日木曜日

Web MIDI API 対応

久しぶりに Web FM Synthesizer を更新しました。

変更点は、

  • Web MIDI API 対応
  • ポリフォニック化(発音数制限無し)
  • 軽量化
です。

Web MIDI API、簡単なブラウザの設定は要るものの、一般向けリリースの Chrome でもちゃんと動く。実装がはじまって 1 年ちょっとでここまでとは驚き。中の人、Good Job!

ポリフォニック対応は、発音があるたびに Script Processor Node を生成していくという富豪っぷり。今のところ発音数の制限もしてないので、発音数が増えてくるとおかしくなるかも。近いうちにモバイル対応を考えているので、その時に発音数リミットをつける予定。

ソースコードは GitHub でも公開しています。

2012年12月23日日曜日

三つ子の魂百まで? Webシンセを作りたい!

三つ子の魂百まで? HTML5 + JavaScript でWebシンセを作りたい!

今年(2012 年)の初夏ごろから、WebAudioSynth や、WebModular など、HTML5 + JavaScript で作られたソフトシンセが次々と登場してびっくりさせられました。Web ブラウザ上でさくさく動く手軽さと、それでもしっかりした音が出る実用性に二度びっくり。その後すぐに発表された、WebMidiLink で Web シンセ達が連携して動く!と、三度もびっくりさせられました。

そんな勢いに触発されて、私も Web Audio API を使ったシンセを作り始めました。最初はスライダーと、鍵盤代わりの四角い画像が一つだけという、シンプルな UI の 4 オペレータ FM シンセサイザーでした。

初期のプロトタイプ。4オペレータ分の ADSR + Ratioと、鍵盤代わりの四角い画像が一つだけ。

しかしながら、早い段階で WebMidiLink に対応させていたため、g200kg さんの WebMidiLink テストページからこのプロトタイプをロードすると、あっという間に鍵盤で音階を鳴らせ、MML でシーケンスを組むことまでできました。WebMidiLink はとてもシンプルなアイデアですが、実際に動くのを目にすると本当に感動。それはまるで、MIDI 黎明期の出来事を追体験しているような気持ちでした。

JavaScript も Web Audio API も初めての挑戦でした。開発初期の頃は、『パーフェクト JavaScript』や、正弦波を Web Audio API を使って生成するコード が参考になりました。JavaScript は利用者の多い言語ということもあって、情報を得るのに苦労はありません。言語やライブラリの使い勝手は、情報の収集し易さにも大きく左右されます。その観点で、HTML5 + JavaScript はさすが文句無し!(ただし玉石混淆) Web Audio API の情報はこれから充実してくるかな?という印象でした。私もいつかは JavaScript らしい洗練されたコーディングができるようになりたいものです。

自由なコーディングのひとときは、プログラマにとってプラモデルを組み立てているように楽しい時間です。いつまでも未完成のまま、ひっそりと組み立てを楽しむのも良いですが、WebAudioSynth や WebMidiLink から受けた衝撃を、さらにまた別の人に伝播させたいと思い立ち、Web FM synthesizer として公開することにしました。私がそうだったように、この Web シンセに興味を持った誰かが、また新しい Web シンセを登場させてくれると良いな、と思っています。

Web FM synthesizer

拙作の iOS アプリ、DXi FM synthesizer をお手本に、オペレータ式 FM シンセシスの一部のパラメータをエディットして遊べるお試し版としました。せっかくの Web シンセなので、作った音色のパラメータを URLに変換し、Twitter で気軽にシェアできる機能をつけました。
また、Web Audio API の ConvolverNode と、Impulse responses で公開されているフリーの IR サンプリングデータを利用して、FM シンセサイザーが盛んに使われた時代のデジタルリバーブを再現し、少しだけ出音にお化粧を施しています。雰囲気、出てますか?
ポリフォニック化やレイテンシ(バッファサイズ)のチューニングなど、まだいくつかやり残したことがあるので、引き続き JavaScript のコーディングを楽しみながら、Web MIDI API の到来を待ちたいと思います。

少し話題は変わって。この記事を書こうと考えたのは、今から 15 年前にも、私はWeb ブラウザで動く「Web 楽器」を作っていたことを思い出したからです。当時は Java(アプレット)として開発し、鍵盤をクリックすると、ulaw 8kHz のサンプリング音が鳴る、という単純なものでした。

"Internet Archive" から、当時私が公開していた Web ページの一部

当時作った Web 楽器 Java アプレットは、Internet Archive にも手元にも残っておらず、もはや動かせないのが残念です。これを作ったのは、インターネットと出会ってちょうど 1 年くらい経った頃でした。その頃に見つけた楽しいおもちゃは、やっぱり今でも楽しいものに変わりありません。三つ子の魂百まで。前述の Web Audio API を使ったシンセを見つけた時に、心の奥底に眠っていた魂が目覚めたのかもれませんね。

ところで、Internet Archive には、このページ以外にも、私がかつて公開していたコンテンツがいくつか残っているようです。しかし、当時高校生だった私が書いた文章を読み返していたところ、重度の中二病を発症していることがはっきりと確認されたため、非公開とさせて頂きます。あしからず。