この記事で扱っていること
- あつ森の声を作る方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
Nintendo Switchから出ているあつまれどうぶつの森、すごい人気ですね。時期的にあまり外出できず、家の中で過ごすことが多い中、現実世界の友達とも気軽に楽しめるとして男女問わず、ゲームの得意苦手に関係なく遊べるゲームだと思います。
このゲームの世界で、どうぶつ達と会話する際、どうぶつ達の声をよく聞いてみると、一応セリフを話しているようには聞こえるのですが、とても早口で話しているようです。
もちろんゲームなので決まった言葉しか話さないのですが、であればどんな言葉も同じように話せるようにと、ボイスチェンジャーのようなノリで録音した言葉を「どうぶつの森語」に変換するプログラムを作ってみました。
作りが甘いところがあり、セリフの長さによってはあまりうまく変換されない場合もあるのですが、気軽に楽しめるプログラムとしては悪くないと思います。
どんな結果になるか
プログラムの機能としては、録音、および再生の機能を備えています。
音声ファイルには名前をつけることができ、このプログラムがあるのと同じ階層に適当にsound folderというフォルダを無ければ作り、ここに音声ファイルを保存していきます。
再生時には保存した音声ファイルを指定して再生ボタンを押すことで再生することができます。
音声の記録中には記録中を示すLEDが光る他、音声波形をグラフ表示します。
再生時にはファイルを選択し、また再生速度も調整します。プログラムの中身を見たら実に単純なことしか行っていないのですが、再生速度は大体「2」のときにそれっぽく聞こえます。1だと遅すぎて、3だと早すぎる感じです。
プログラムの構造
ベースのアルゴリズムは自体はイベント駆動型のステートマシンにしています。
このプログラムで楽なのは、録音も再生も既にサンプルファインダにあるサンプルをそのまま使用できることです。
あとはこれらの機能を、ユーザーがフロントパネルでどのボタンを押したかによってステートを変えるデザインに落とし込むだけなので、作るのにあまり時間はかかりません。
個々のステートの中身を紹介していきます。
まず、初期化と終了、これらは特に何もしていません。初期化も、何かするかと思って一応用意しましたが今回はなくても問題ありません。
次に、イベントを待つためのidleステートです。ここには、イベントストラクチャ以外に、フロントパネル上のリストの表示を常に更新するための仕組みを設けています。以降のステートはどれも終わったらidleステートに戻ってくるので、一つのステートが終わって特にフォルダの中身の変化があった場合に常に最新の状態を表示させるのにはこの組み方が便利です。
また、フロントパネルのボタンの有効、無効を無効プロパティで指定しています。このプログラムの場合、記録ボタンが押された後に記録停止以外のボタンを押してしまった場合にフロントパネルがロックされるため、それを防ぐ仕組みを設けています。
次にrecordのステートです。音声を記録する機能を持ちますが、サンプルファインダのサンプルを丸々使用できました。ただし、このステートでもやはりフロントパネルのボタンの有効、無効の設定を行っています。
次にファイル削除のためのdeleteステートです。リストからユーザーが指定したファイルを削除します。
最後はplayステートです。これもサンプルファインダのサンプルをまずは丸々コピーして持ってきていますが、再生時に書き込んでいる波形の情報を少しいじっています。
波形データ(配列になっているのでForループの自動指標付けで要素に分解しています)の要素でYの配列に対して、配列関数である「デシメート1D配列」によってとびとびの値をとるようにしています。
速度調整の値によって、とびとびの幅を変えます。
これらを実装すればあつ森語変換のプログラムの完成です。
音声ファイルを保存するフォルダについて
このプログラムの場合、音声ファイルをsound folderという特定のフォルダに保存していくように作られているのですが、もしこのsound folderがない状態で実行するとエラーとなってしまいます。
その不便を解消するのであれば、「あるべき場所」にsound folderがあるかを探し、もしなければsound folderを生成して、そこに音声ファイルを作る、といったこともできます。
実装は簡単で、フォルダが存在するかどうかを判定し、存在していなかったらフォルダを生成するだけです。
LabVIEWはハードウェアを動かしたりする「まじめな」用途で使用することが多いとは思いますが、プログラミング言語なので、もちろんこうした遊びのようなこともできてしまいます。
ステートマシンなど、初心者の人たちには少しハードルが高いかもしれませんが、理屈をわかっている人にとってはすぐに実装できるシンプルなプログラムだと思うので試してみると面白いと思います。
ここまで読んでいただきありがとうございました。
コメント