スピノカップ

魔法のバイオリン

https://github.com/kyutech-programming-club/Spino_backend

Python

C#

Unity

バイオリン専用音ゲー

なっちゃん

小林悠人

推しアイデア

ピアノタイルから発想を得たこのプロダクト。バイオリンの音階と連動してUnityのキャラクターが動くところが見どころ。

作った背景

チームメンバーそれぞれの強みを生かしたプロダクトを作成したかった。(Python+Unity+バイオリン)

推し技術

librosa Unity 3D バイオリンの演奏技術

プロジェクト詳細

チーム 全角_キャンセル界隈

風呂キャンセル界隈的なチーム名。ハッカソン中は風呂キャンセルしていない。

バイオリンの採択理由

459年前からバイオリン界隈は熱い!!!!!!! チームメンバーが扱える楽器がバイオリンだったから。 楽譜通りにただ弾くよりも、ゲームにすると楽しく演奏できると考えたから。

使用技術

フロントエンド:Unity バックエンド:Python image

Pythonでの実装

  • librosaを用いて、リアルタイムでバイオリンの音階(ドレミ)を判別する
  • 楽譜(.mxl)を読み込み、ドレミの文字列を作成している(8分音符に分割)

PythonとUnityの連携

Python側でjsonファイルを生成し、そのファイルをTCP通信で、Unity側に送信

Unityでの実装

  • Python側から送信されたjsonに記載された音階に基づいて、キャラクターを動作させる
  • 楽譜の文字列をもとにコースを作成
  • Pythonから送信される音階のjsonと正解データのjsonを照らし合わせて正誤判定する

工夫した点

Python

  • 音の出始めは、周波数の変動が激しいため、誤検出がほぼ確実に起こる。だから、音階の検出を開始させる音をあらかじめ決めた。

Unity

  • GitHub管理はコミュニケーションをとり、conflictを最小限に抑えた。
  • Shederを利用して、障害物となる雲を自作した。

苦労した点

  • 2つ以上音階が上がると、周波数が切り替わるタイミングで前の音と後の音の間の音階にも反応してしまうこと。例えば、ミとソを認識したいけど、ミ、ファ、ソと出てしまう。これの対策として、Unity側の正誤判定で正解の前後の音ならば許容ラインとした。

技術の無駄遣い

  • librosaで自動的に行われているフーリエ変換やオンセット検出を大学の授業資料を引っ張り出しながら理解しようとした。
  • 実装したいことについての論文を読んでみた。

なっちゃん

@af983bf66e78efa8