静かなEVに排気音を足す試作で、合成音を捨てて録音にした ― かそくおん
合成したエンジン音は、iPhoneのスピーカーではノイズにしか聞こえませんでした。だから録音に切り替えた。
電気自動車は、静かです。信号から出ていくときも、高速の合流でも、聞こえるのはタイヤの音くらい。

それが良さなのは分かっています。ただ、踏んだぶんだけ音が返ってこないと、どこか物足りない。そう感じる人向けに、スマホから排気音を鳴らす試作を作りました。かそくおん、という名前です。
先に書いておくと、kasokuon.nextcode.ltd は紹介ページで、音を鳴らしているのはiPhoneアプリの試作のほう。App Storeには、まだ出していません。
企画の登録も試作のファイルも、日付はすべて5月18日。ファイルの最終更新時刻を並べると、センサーまわりが16時18分、音を鳴らす部分が17時50分でした。1日の午後で作った試作です。
1合成音は、iPhoneのスピーカーでノイズになった
最初の計画では、音は自分で合成するつもりでした。企画会議の議事録にも、「合成V12」「合成EV」をDay1に必ず入れる、と書いてあります。録音素材と違って権利の心配がなく、速度に合わせて高さをいくらでも変えられる。理屈の上では一番きれいな方法です。
捨てました。
iPhoneのスピーカーで鳴らすと、エンジンの唸りに聞こえなかったんですよね。低い音がほとんど出ないので、エンジンの芯が抜けてしまう。コードのコメントには「ノイズだけにしか聞こえなかった」と、そのまま残してあります。
代わりに使ったのは、パブリックドメイン(CC0)で配布されているレース車のエンジン音ループです。V8、V12、直4ターボの3つを同じ素材集から取りました。1本あたり0.63秒から0.86秒しかない、短いループです。
EVの音だけは出どころが違って、オーストラリアの電車(クイーンズランド鉄道)のモーター音を借りています。こちらは2.4秒。電車のモーターの唸りを、EVの音として使っているわけです。
3つのエンジン音は元が同じ素材集なので、音色の違いは高さでつけています。V8は200セント下げて重く、V12は600セント上げて甲高く。1,200セントで1オクターブなので、V12は半オクターブ上ということになります。
それでも低音が足りないので、180Hzより下を4dB持ち上げ、1,500Hz付近も3dB足しました。スマホのスピーカーで聞こえる帯域に、音を寄せるための調整です。
企画会議の議事録と、5月18日の試作に実際に入ったもの
| 項目 | 企画会議の議事録 | 試作の実装 |
|---|---|---|
| 音色の数 | 10音色 | ◎4つ(V8・V12・直4ターボ・EV) |
| 音の作り方 | 合成音を必ず入れる | ◎CC0の録音ループだけ |
| 1音色あたりの素材 | アイドル・巡航・全開の3層 | ループ1本 |
| 響き | リバーブを必ず挟む | 入れていない(EQ 2帯域のみ) |
| 0-100タイマー | 画面右上に置く | まだ無い |
| 車との接続 | OBD2は使わない | ◎GPSと加速度センサーだけ |
2速さはGPS、踏み込みは加速度センサー
車とはつながっていません。OBD2のアダプターも使わない。スマホが持っている2つのセンサーだけで、車の動きを推し量っています。
速度はGPSから取ります。iPhoneの位置情報が返す速度を、そのまま使う形です。アクセルの踏み込み具合は加速度センサーから読み、こちらは1秒に50回。
音のパラメータを書き換えるのは1秒に30回です。そのたびに、2つのことを決めています。
1つ目は音の高さ。時速40kmを基準にして、速度が倍になるごとに700セント上げます。80km/hなら基準より700セント高い。EVだけは感度を900セントにして、素直に上がっていくようにしました。上は1,200セント、下はマイナス600セントで止めています。
2つ目は音量で、こちらは加速度だけで決まります。0.35Gで踏み込み100%扱い。止まっていても無音にはせず、最低35%の音量でアイドリングを鳴らします。
音量を一気に変えるとプチッと鳴るので、毎回、目標との差の4分の1ずつ近づけるようにしました。地味な処理ですけど、これが無いと、書き換えのたびに音が跳ねる。
3回転数は、メーターのためだけに計算している
画面にはタコメーターがあって、回転数も出しています。出し方はこうです。タイヤの半径を0.32mと決め打ちし、速度からタイヤが1分に何回転しているかを出す。そこに仮のギア比を掛けて、アイドリングのぶんを足す。ギアは15km/h、40km/h、80km/hで切り替わる4段です。
計算式に当てはめると、V8の設定で60km/hなら約3,500回転。79km/hで約4,400回転まで上がり、80km/hでシフトアップして約3,400回転に落ちます。
ところが、音の高さはこの回転数を見ていません。
高さは速度から直接出しているので、メーターの針が約1,000回転落ちても、音は落ちない。本物の車らしい「変速で一瞬音が下がる」感じは、今の試作には無いわけです。コードにも、回転数は「UI表示用」と書いてあります。
もう1つ気づいたのが、低速側。高さの下限に当たるので、エンジン音は22km/hより遅いと高さが変わりません。発進の瞬間は、音量だけが動いています。
4机の上で試すためのDEMOボタンと、運転中の扱い
GPSの速度は、車が動かないと出ません。机の上では何も変わらないので、画面の左上にDEMOボタンを付けました。
DEMOを入れて画面の真ん中を押し続けると、踏み込みが最大0.45Gまで上がり、速度が伸びていきます。離すとエンジンブレーキ風にゆっくり落ちる。上限は220km/hで、これも1秒に30回、計算し直しています。
運転中の扱いも書いておきます。DEMOを切っているとき、画面の上には「停車中にご確認ください」を出し続けています。位置情報の許可を求める文にも、同じ一言を入れました。
ただ、走行中に操作をロックするような仕組みは入っていません。今は文言だけに頼っている、というのが正確なところです。紹介ページのほうには「走行中の操作はおやめください」と書いています。
5正直に言うと、まだ分からないことだらけ
紹介ページのほうが、アプリより先に進んでいます。ページには10音色や0-100タイマーと書いてありますが、試作に入っている音は4つで、タイマーはまだありません。紹介ページの最初のコミットは16時26分。音を鳴らす部分の最終更新より、1時間以上早いんです。計画を先に書いてしまった形で、アプリを出す前に、ここは揃える必要があります。
「踏んでから100ms以内に音が変わる」という目標も、企画の段階で立てたまま測れていません。測るためのコードが、まだ無いからです。企画メモには、GPSは遅れるので加速度で補う、と書きました。音量を加速度で動かしているのは、その考えに沿った形です。ただ、実際の車で高さがどれだけ遅れて聞こえるのかは、分かっていません。
読み返して気づいたことも、もう1つ。音量は加速度の向きを見ずに大きさだけで決めているので、ブレーキを踏んでも音が大きくなります。減速で吹け上がるエンジンは、たぶん無いですよね。
加速度の向きそのものも仮置きです。スマホを横向きで車に固定した前提で、端末の1つの軸を前後方向とみなしています。マウントの向きが違えば、前後と左右が入れ替わる。コードのコメントにも、取り付け方次第だと英語で書いたままでした。
静かなEVに音を足す遊びとしては、鳴る、速くなると高くなる、踏むと大きくなる、までは来ました。本物らしさはここからで、変速の段、減速の音、実車での遅れの3つが次の宿題です。進んだらまた書きます。
作品の概要はかそくおんの作品ページに、ほかの開発記録はブログ一覧に並べています。車やセンサーを使った試作の相談は、こちらからどうぞ。
この記事を書いた人
NextCode(沖縄県宜野湾市)は、iOSアプリ・ホームページ/LP・NFCデジタル名刺・AI業務自動化を作っている開発スタジオです。ここで書いているのは、実際に作って公開したものと、その過程で詰まったことだけです。
お問い合わせフォームは24時間受け付けています。