見出し画像

「イケボメーカー」を作ろうとしてちょっと失敗した話

全国の声フェチの皆さんこんにちは。

いつもの通り、作ったものをこちらに置いておきます。(音声をどこのサーバーにも送っていないので安心して使ってください。)

皆さんはイケボ(イケてるボイス)の方をどう思いますか?
世の中には映像・画像の補正ツールは出ているものの、声を変化させるのっておもいっきり変えた「ボイスチェンジャー(以下ボイチェン)」が多く『自然に変化させるものが少ないなぁ』と感じています。

メタバースという言葉がバズっている今、自分の容姿や現実世界に捉われないところでなら「ボイチェン」もいいのでしょうが、画像補正ツールが流行している理由は、そこまで離れた世界じゃないけど「デジタルを介した世界ではちょっとだけ良くしたい。」という欲求があるからだと考えています。

そんなニーズに合わせて今回は、少しだけ声をよくするイケボメーカーを作ってみました。

イケボの定義と目標

さて「イケボ」とはどういうものでしょうか?
すいません。私はわかりません…が、なんとなく声質が低い方な気がしています。(もちろん、滑舌がよいとか色々要素はあるとは思いますけど…)

目指せクリスペプラー!

私の中で、イケボと言うとFMのDJを思い出します。
クリスペプラーさんなんか「まさに!」って感じです。(個人的にはAMのお笑いラジオ好きなんですけどね)


ただし、今回はあくまで「ちょっと良くしたい」なので自分の声を少し低くすることを目標としましょう。

また、できれば「っぽく」したいので空間系のエフェクト(カラオケでいうエコー、具体的にはリバーブとショートディレイ)をちょっと入れたいです。
これで少なくとも今の自分の声より「ちょっと良くした声」になる気がします。(あくまで気がするだけ)

整理すると

  • 不自然にならない感じで声をちょっと低くする

  • その低くした声の「いい部分」を更に引き出す

  • エコーをかけて「っぽく」する

これを音楽的にエフェクトを並べると

  1. PitchiShift(1音以内)

  2. EQ(Equalizer)でブースト

  3. Reverb

  4. ShortDelay

と言う感じです。
これらをやったのが冒頭にあるものです。

どうして失敗したか…

これをサクっとやるのにTone.jsというライブラリを使ったのですが、まずTone.jsのPichShiftの最小パラメーターが半音(カラオケの+1とか-1の単位)でしかできず、0.5とか0.25とかにできなかった事が大きいかなと思います。

↑Tone.js使えばこんな感じのアナライザーも実装できます。

よくアーティストが調子が悪い時に、半音だけキーを下げたりして歌うことがありますが、あれ結構違和感ある方多いと思います。それぐらい人間の耳って繊細なんですね。
せめて1/4ぐらいで音声が上下できれば、もうちょっと良い感じになった気もします。

次にEQが3バンドEQしかなく、高音・中音・低音のザックリとした設定しかできなかったことです。

つまり、ライブラリの選定を誤った自分のせいなんですけどね。

まぁ、リバーブ+ショートディレイだけでもちょっと「っぽい声」になる気はするので60%ぐらいは達成できた気がします

ちょっと頑張ったところ

録音機能を持たせたところです。

リアルタイムにエフェクトがかけられRECできるのもの無料で簡単に作れる時代って凄い…

これは、自分の音声をプレイバックし(リアルタイムに聴き)ながらやると骨を伝わってくる自分の声と衝突して訳わからなくなることがあったのと、DLできるようにすることで色々使いやすくなるかもなぁと思ったところです。

こちらのサンプルページで喋ってもらうと違いが分かると思います。

尚、DLするファイルの拡張子がoggでコーデックがopusなのはブラウザの仕様をそのまま使ったからです。すいませんorz

Noteでは上記ページのテストまでにしていますが、これを有名なライブ通信系のSkywayやAgora、弊社御用達のGoogle Meetで使えるところの検証まではしました。

webRTCまで見たい方は https://qiita.com/kurokky/items/04924ab4bb826264270e に記載

尚、いずれChromeの拡張を作って公開しようかなぁと思っています。
ただGoogleのMeetのマイクの乗っ取りの手順がちょっと面倒なのでどう実装しようかなぁと考え中です。
(ピッチシフトの量をもっと変えたり、コーラス、ディストーション系のエフェクトを加えると、それこそボイチェンとして使えるので需要はありそうな気もします。)

できなかったこと

これが一番悔しかったのですが、これを一番最初に思いついたのは、少し前に色んな意味でバズったゆっくりボイス」を「イケボ」にしたい!』と思ったのがきっかけだったんですね。

で、ブラウザには読み上げしてくれるText to Speech(TTS)機能があります。なので『その声に今回作ったものを被せればできるじゃん!』と思ってやろうとしたんですが、どうやらSpeech APIで出た音声をRecしたりするのが正式にはできない(それを回避したライブラリも最近のブラウザでは非対応になっていました)ので、いろんな意味で失敗したということです。

尚、超絶裏技を使えばできないことは出来なさそうでしたが、環境がかなり限定されるのでやめました。

まとめ

ということで、今回は中途半端に終わったものですが私のようなオッサンが若かりし頃「ネット接続のないブラウザだけの環境で、音声を録音してそれを加工する」ってのはちょっと考えられなかったり、ビデオ通話にエフェクトを入れるのも結構面倒だったりしたんですが、割とサクッとできました。

ただ、本来やりたかったことからは離れてしまい、ちょっと失敗に終わった感は否めないのです。
ただ、こういう記事は個人的に成功談とか、どこかで読めるものより「失敗した」系の記事の方が学びがあると思っているので今回はそう言った意味でも記事しました。

尚、前述の通り、技術系に関してはQiitaの方に纏めました。(こちらでは、実際の詰まりどころなど踏まえたサンプルコードなどになってます。)


サポートしていただいたら娘・息子に何かプレゼントしようと思います! 多分、ミルクorトミカになると思います。 面倒な方は、LINEスタンプを購入していただいても大丈夫です。 https://store.line.me/stickershop/author/261022/ja