ToyTone for iOSをリリースしました
iOS用の楽器アプリです。
ゲームの効果音みたいのが得意です。
ToyTone for iOS
https://itunes.apple.com/jp/app/toytone/id1016447265?mt=8
1. Swiftを使った感想
今回、初めてSwiftを使ってみたのですが、
個人的にはC#に似てるなーっていう印象でした。
ただ、Swiftの文法もUIKitもすべて初めてだったので、
何をやるんでも調べながらで時間が掛かりました。
2. 音源部の実装
選択肢としては、
AVAudioEngine, AudioUnit, Audio Queue Servicesがあって、
今回はレイテンシーを縮められるAudio Queue Servicesを使用しました。
けど、Swiftだとコールバック設定する方法が分からなかったので、
SwiftでUIを書いて、Obj-Cでラッパーを書いて、音源部分はCで記述しました。
Swiftにおけるパフォーマンスチューニングはさっぱりだったので、
そういうのを気にしないためにも初めからCで書くと決めてました。
結果的にパフォーマンスに関しては何も考えずに実装できました。
3. 音源の設計
昔持ってた効果音の鳴るキーホルダーを思い出して、
これに似たものを作ろうと思ってたのですが、
途中でシンセドラムっぽい音を作りたくなって、
さらに、LFOの周波数もモジュレーションしたくなって、
結果的に、こんな感じになりました。
1VCO + 1LFO + 3EG
でも、スライダーを置くスペースが足りなくなったので、
いじれるパラメータを厳選して、今回のようなUIにしました。
4. パラメータの設計
実は、この部分が一番難しくて、この辺はいろいろ内緒です。
こんな感じの式を使って、グラフを見て、耳で確認して調整しました。
y = ax + bx^2 // 0〜256
y = ax + bx^3 // -128〜+128
5. UIの設計
一般的にツマミを真似したものが多い訳ですが、
今回はスライダーで実装しました。
スライダーの欠点は場所を取ることですね。
ツマミだったらもっとたくさんのパラメータをいじれるように出来たのですが、
つまめないのにツマミとかツマミに対する冒涜だ!
っていう屁理屈でスライダーにした訳ですが、次回はツマミも検討してみます。
あと、何より微調整が難しい感じになってしまったので、
左右のラベルに-1/+1をする機能を割り当ててみました。
ヘルプ的なものがないのは、単なる横着です。
6. まとめ
Perlで一通り実装したことがあったので、
音源部分はすぐに完成しました。
パラメータの追い込みはまた別で、血を吐きそうになりました。
UIKit
に関しては、まったくのド素人だったので、
まず、この辺を調べながらSwiftの勉強に1ヶ月近く掛かった気がします。
音源部分とパラメータの追い込みはそれぞれ1週間くらいですね。
本業の合間で作業したので、作業期間はもっと長いかも知れないです。
一番長く感じたのは、審査が始まるまでの期間ですけどね!
7. おまけ
いろいろバグっぽい挙動を残しています。
桁あふれや、エイリアスが発生するので、普通のシンセでは出ない音が多々出ます。
パッドを押しっぱなしにすると、桁あふれして壊れたみたいな音が出るのですが、
これについては自分で探して貰えればと思います。
あと、お世話になったCPANモジュールは以下の通りです。
Imager
Math::Random::NormalDistribution
Text::Xslate
おしまい。
Leave a Comment