見出し画像

一定の品質を満たす楽器音の収録を目的とした楽器音収録アプリ #CMMR2023

こんにちは。

本記事では、11月13日-17日に開催されたThe 16th International Symposium on Computer Music Multidisciplinary Researchのデモセッションで発表した一定の品質を満たす楽器音の収録を目的とした楽器音収録アプリについて紹介します。

原稿:https://zenodo.org/records/10113404

デモ動画:https://youtu.be/K-AOkXbkIzY

注:この記事は、アプリの紹介にフォーカスしたものという位置付けです。
厳密な情報は上記の原稿をご参照ください。

概要

本研究では、収録直後に楽器音の解析を行い、演奏ミスやクリッピングなどを検出するスマートフォンアプリを開発しました。特に、楽器音の統計的解析に向けて、音圧レベル(Sound Pressure Level; SPL)をチェックし、スマートフォンから離れすぎている場合や環境音・ノイズが強すぎる場合などを検出・再収録を促す機能を実装しました。これにより、一般的な環境での収録でも、一定の品質を満たす楽器音の収集が可能になると考えています。また、このアプリは主に金管楽器を想定しており、演奏動作を妨げないために、収録から解析まで1タップで完結できるように設計しました。

コンセプト

  1. 収録直後に、適切に楽器音を収録できているか解析が実施されること。

  2. 楽器音の収録から解析まで少ない操作で完結できること。

アプリ手順

今回発表したアプリの全体図

まず、スマートフォンを適切な距離に置いてアプリを起動します。起動画面にて収録条件(楽器音の高さ、強弱)を選択し、[START]ボタンより収録を始めます。ここから、解析結果が得られるまで、アプリは自動的に遷移します。

収録画面に遷移後、3秒間のカウントダウンのち、5秒間の楽器音を収録します。収録中は等価騒音レベルが表示されており、リアルタイムに音圧レベルを確認することができます。また収録中にクリッピングした場合は、画面右上のランプアイコンが点灯します。点灯後は解析せず、"Task failed."として再収録を促します。

収録終了後、自動的に解析を始めます。一定の品質を満たしていない場合、"Task failed."とします。一定の品質を満たしている場合、楽器音の基本周波数・等価騒音レベル・スペクトログラムが可視化されます。ユーザーは可視化された結果を受けて、[RETRY]ボタンより再収録することができたり、[NEXT]ボタンより起動画面に戻り、別の収録を行うことができます。収録された楽器音は、選択した収録条件を含めたファイル名で保存されます。

解析

ここまでの設計では、SPLがユーザーによってバラバラになり、統計的解析に向けて課題に挙がりました。特に、SPLが高すぎる場合はクリッピングで検出できますが、スマートフォンと楽器が遠すぎるなどでSPLが低くなるを解決する必要がありました。そこでテスト収録を実施し、得られたSPLの傾向から3 - 27 dBに閾値を設定し、収録後の解析で楽器音のSPL(中央値)がこの範囲に含まれるとき、適切に収録されたと判断することにしました。この機能により、一定のSPLを持つ楽器音の収集が可能になりました。

テスト収録による結果

実装

このアプリはSwiftで実装されており、収録は標準フレームワークであるAVAudioRecorderを使用して、48 kHz、16 bits、WAVE形式で収録しています。収録中に表示される等価騒音レベルは、200 ms分の波形に対して求めています。また、解析に向けた音響特徴量は、WORLDで求めています。この辺りは、WORLDをSwift向けにラッパーしたWorldInAppleを参考させていただいています。

求めた基本周波数・等価騒音レベルは、Appleが提供しているSwift Chartsで可視化しました。開発途中で、ライブラリのネームコンフリクトが発生し、作り直しを強いられたりしました(現在は解決済み)。このうち、スペクトログラムは、MATLABのimagesc()、Pythonのlibrosa.display.specshow()のようなお手頃な関数がなかったので、CGImageで画像を生成する形で可視化しました(この辺りはまた記事を書きます)。

まとめ

この記事では、11月に開催された CMMR2023 で発表したアプリについて紹介しました。当日の発表では、さまざまな方とディスカッションさせていただき、とても有意義なものになりました。改めて感謝申し上げます。

お読みいただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?