Touch the Wave」カテゴリーアーカイブ

Touch the Wave v0.5.1

Touch the Wave v0.5.1が公開されました。今回の修正は、

・波形が再生位置とずれているのを修正
・スピード変化時の音質を改善

です。

波形の修正の方は、波形を描画するときにfloatにしないといけないところをintにしていたので、その分ずれが出ていたという感じでした。音質の方は、単純に直線補間でやってます。他に軽くて高音質な補間方法があればいいんですけど、とりあえず聞いた感じ問題無さそうなので、これでいいかなと思っています。

前のエントリに書いたiPod touch第2世代でノイズが入る件ですが、当面放置する事にしました。Quartzでの直接描画を試してみたのですが、パフォーマンスも安定性もいまいちでした。なので、今現在、正常動作を確認しているのはiPod touch第1世代のみとなります。

iPhoneではちゃんと動いてるんですかね?メモリの空きがiPodに比べて少ないのが気になるところではありますが。

修正とiPod 2Gでの不具合

Touch the Waveの波形表示が再生位置とちょっとずれていたので、修正したものをApp Storeに提出してあります。何も無ければ2〜3日後くらいには公開されるんじゃないでしょうか。

それはそれとして、音質向上のための修正をしていたらv0.5をiPod touch第2世代で使っているとノイズがプチプチと入っている事が判明してしまいました。v0.4ではCore Animationを使っている事で数秒間の動作停止が起きることがあって、それを修正するためにv0.5ではOpenGLに変更したんですけど、どうやらそっちも相性が悪かったようです。

別に特別な処理をしているからという訳ではなく、何も描画していないOpenGLのビューを一枚表示しておいて、RemoteIOでシンプルにサイン波だけを鳴らしてみると、それだけでプチプチいっちゃいます。なのでTouch the Waveではプレイリストとダウンロードの画面では大丈夫なんですけど、肝心のプレイヤーでノイズが入ってしまうという困った感じです。

まさか僕のデバイスだけの故障とかじゃないですよねぇ。第1世代では何事も無く再生できちゃうんですけど。

まあ、iPod touch第2世代はもともとロスレスの再生がプツプツとぎれるって不具合がありますから。全体的にパフォーマンスはアップしているけどオーディオは逆に弱くなっているんでしょうか。

回避策としてあと残されているのは、Quartzですかね。試してみてパフォーマンス的に問題無さそうならそっちに切り替えます。せっかくのiPhoneでのプログラミングなんだからCore AnimationとかOpenGLとか使ってみたかったのに、結局Quartzに落ち着くとしたらもったいないなぁと思いますけど。それでも駄目ならOS側の修正アップデートを待つしかないって感じです。

Touch the Wave v0.5 公開しました

Touch the Wave v0.5を公開しました!

最近の審査にかかる時間は、他の方々も見ているとだいたい3〜4日くらいのようですね。リジェクトされたときが土曜の夜に提出して水曜の夜にリターン、今回が日曜の夜に出して木曜の朝にOKという感じでした。

ver0.5に関しては今までのエントリーでもこまごまとアップデート内容は書いてきましたが、まとめておこうと思います。

・−20%〜+20%のスピード可変が出来るように変更しました
・再生中の早送りと巻き戻しを一時的なスピードアップ・ダウンに変更しました
・波形のズーム以外の操作をロックする機能を追加しました
・HTMLファイル内のリンク先のオーディオファイルを連続でダウンロードできるようにしました
・プレイヤーとプレイリストのパフォーマンスが向上しました
・パフォーマンスの向上によりプレイヤー画面更新レートのスライダーを廃止しました
・ボタンをタッチしたのがわかるように枠を表示するようにしました
・アプリ動作中に自動ロックがかからないようにしました
・アプリを起動したときに前回終了した場所にちゃんと戻るようにしました
・iPod touch第2世代でまれに再生が停止する不具合を修正しました
・音符ボタンを一回タッチで、ファイル名に書き込んでいるBPMへリセットするようにしました。書き込んでいなければ以前と同じくループ範囲で設定されます。

その他の微調整はいろいろとあったと思いますが忘れました。何よりパフォーマンスが向上したので、使える度が結構アップしていると思います。

ちなみに、ダウンロードしたときに同じファイル名のものが既にある場合は上書きしなくなりました。フォルダごとダウンロードしていてエラーで止まったりキャンセルしたときに、そのまま続けられるようにと考えまして。

近いうちにアプリ紹介ページにダウンロードのインストラクション的なものを書こうかなと思っています。

機能的なところは今回のアップデートで出来上がってきたと思うので、次のバージョンアップは質をあげる方向になります。スピード変更時の音質向上は(とりあえず直線補間ですが)ほぼできていまして、あと再生停止時にはもうちょっと波形を精細に表示したいなぁと思っています。

再提出

Touch the Waveのバージョン0.5をApp Storeに再提出しました。

アラートつけるだけだったら一瞬で終わる変更だったんですけど、以前からiPod touch第2世代でまれに再生が止まるという不具合があって、解決するのに時間がかかってしまいました。

どうやら原因は、CALayerだったようです。波形の画像を表示するのにCALayerのcontentsにCGImageを渡して、position.xで動かすってことをやっていたのですが、このposition.xの頻度を上げていくと再生(というかアプリ全体の動作)が止まってしまう確率が高くなるという感じでした。自分のコードが根本的に悪かったという可能性もありますが、第1世代だとまったく出ないんですよねぇ。

解決策として、波形の表示をマルッとOpenGLに差し替えてしまいました。OpenGLはまだ研究途中だったのですが、AppleのサンプルソースのaurioというのがOpenGL ESを使っていたので参考にさせてもらいました。コピペコピペでなんとか取り繕ってます。OpenGLをちゃんと習得したら、プレイヤー画面全体をOpenGLで描画したいです。

aurioといえば、App Storeにaurioの画面表示部分だけを書き換えただけのようなマイク入力ビジュアライザーアプリをちらほらと見かけますねぇ。

初Rejected

Touch the Waveのアップデートを提出していたのですが、今朝リジェクトされた旨のメールが届いていました。その内容というのは、ネットからコンテンツをダウンロードしないとプレイリストが空の状態のままでユーザーが混乱するからアラートを出せというものでした。もっともな事なんですが、アップデート2回目にして今さら?って感じもします。

関係あるかどうかは分かりませんが、OS2.2ではアプリを削除したときに評価を入れるようなシステムになったらしく、インストールはしたものの何も出来なくてすぐ削除して星1つつけるって人が多かったからかもしれませんね。Touch the Waveの評価はもうガタ落ちです。

まあ、審査されている間にもパフォーマンスとか安定性とかアップしていたりするので、そこらへんも含めて今週中には再提出しようかなぁという感じです。

ともあれ、最近はAppStore開始当初と比べてガイドラインから外れるものは厳しくなっているみたいです。リジェクトされたくない人はガイドラインを熟読しておいた方が良いかもしれません。

Touch the Wave 0.5 開発状況

Ver0.5の修正・追加作業はとりあえず終わりまして、ここからはしばらく動作を検証してみようかなという状況です。もしかするとOSの2.2のアップデートが近々あるかもしれないので、一週間ほど待ってみて何も無ければ来週末あたりにコミットしようかと思っています。

前回書いたもの以外の主な修正点は、

・再生中に直接スクラッチ
・ボタンをタッチしたときに枠を表示
・htmlファイル内のリンク先のオーディオファイルを自動で連続ダウンロード
・パーセントエスケープされたファイル名を変換して曲のタイトルに表示

といったところです。

3つ目の修正によって、web共有を使ってダウンロードするのが楽になります。例えば”/Users/username/Sites/music/”というフォルダ内にオーディオファイルを置いておけば、Touch the Waveのダウンロード画面で”http://IPアドレス/~username/music/”と打ち込んでスタートすると、フォルダ内のファイルが連続でダウンロードされるようになります。さらに4つ目のパーセントエスケープの修正によって日本語のファイル名もそのままでダウンロードできるようになりました。でも、ミュージックライブラリにアクセスできればこんな事しなくてもいいんですけどねぇ…。

Touch the Waveの詳細とアップデート予定

アプリの説明に書くと長くなりそうだったので省いていたTouch the Waveの細かい挙動についてと、現在の開発状況について書いておこうと思います。

ダウンロードについて

・ファイル名の拡張子前に、「@bpm」+「テンポ」を書いておくと、スピード0.0%時のテンポが登録されます。小数点以下もちゃんと認識されます。サンプルファイルのように「sample@bpm135.wav」としてあれば、プレイリストのタイトルには「sample」と表示され、テンポは135で登録されます。

・バージョン0.4で、8〜24ビットのAIFFとWAVファイルはそのままダウンロード出来るようになりましたが、アプリ内に保存するときに16ビットの44.1kHzのステレオに変換してしまいますので、クオリティを高くしていても無駄になりますし、低くしていても容量の節約にはなりません。

・同じファイル名のファイルをダウンロードすると上書きされます。

プレイヤーについて

・スライダー上に小さい四角の点で示されている赤の「スピード位置」、青の「キューポイント1」、紫の「キューポイント2」や、音符マークの下にオレンジで示されているスピード0.0%時のテンポは、一曲ごとに保存されます。その他の白丸やボタンの状態はアプリ全体で共通です。

・キューポイント2はキューポイント1の前には設定できません。キューポイント1(青)をキューポイント2(紫)の後ろに設定すると、キューポイント2は曲の最後のフレームへリセットされます。

・キューポイント間に再生位置がある場合はループをオン・オフしてもバッファの読み込みを待たないので、再生中でも読み込みの時間さえ間に合えば音を途切れさせずに再生する事が出来ます。

アップデートについて

次の0.5として公開しようとしている開発中のバージョンで既に改善している点は、

・スクラッチから素早くフリックしたときにレベルが下がりすぎて不自然なので修正
・オーディオデータ読み込み時の無駄を省いてパフォーマンスの向上
・プレイヤー画面とダウンロードで自動ロックがかからないように変更
・プレイリストでカクカクせずスムーズにスクロールするように修正
・±20%のスピード可変
・ファイル名につけたテンポへのリセット機能

といったところです。

オーディオ読み込み高速化の影響は大きくて、iPod touch第一世代(と、おそらくiPhone)でも12fpsであれば早送り巻き戻しの音が途切れなくなりそうです。第二世代だと、30fps近くでのスクラッチやフリックにも強くなります。

あと、これからやろうとしている事は、

・再生中は4倍速早送り巻き戻しをやめて、30%くらいのスピードアップとダウン。停止中はそのまま
・複数のファイルを一度にダウンロード

といったところでしょうか。ダウンロード後に不安定になるのは、まだ改善できる見込みがありません。シミュレータでは起きていないメモリリークが原因のようなので、OSがアップデートされると自然と直るかもしれません。

それと、もしVer 0.5が公開されて、アップデートする際に気をつけていただきたいのは、アプリ内にオーディオデータを溜め込んでいる分だけアップデートに時間がかかるという事です。おそらく500MBで20分くらいかかると思います。時間のあるときにアップデートするか、一旦アプリを削除してインストールし直したほうが良いと思います。

ひととおり気になるところが修正し終わったらしばらく動作を検証したいので、AppStoreへのコミットはまだ先になると思います。

Touch the Wave公開しました

「Touch the Wave」が公開されました。オーディオデータの波形にタッチしてスクラッチをするというのをやってみたかったので作ってみたiPhoneアプリです。とりあえず今のところバージョン0.4にしているので、今後、基本的な仕様が大幅に変更されるかもしれません。

スピードを変化させたときの音質が一番改善したい点ではありますが、第一世代を切り捨てないと厳しいかなぁと思います。今でも画面の更新を12fpsくらいに落とさないと等速の再生すらおぼつかないので…。まあ、のんびりやっていきます。