Interested_Spresense が 2022年02月26日03時48分08秒 に編集
初版
タイトルの変更
郷ひろみとリッキーマーチンの競演
タグの変更
spresense
Arduino_IDE
メイン画像の変更
記事種類の変更
セットアップや使用方法
ライセンスの変更
(CC BY 4+) Creative Commons Attribution CC BY version 4.0 or later
本文の変更
[今回用意したもの] SPRESENSEメインボード[CXD5602PWBMAIN1] https://www.switch-science.com/catalog/3900/ B-stem PDA01 SPRESENSE用機能拡張ボード https://www.switch-science.com/catalog/5687/ KIOXIA(キオクシア) 旧東芝メモリ microSDHCカード 32GB https://www.amazon.co.jp/dp/B08PTNWQ6P?aaxitk=a8f1b316576d3af7dc8db832d10d5cd9&smid=AN1VRQENFRJN5&ref=dacx_dp_7467415030103_8217637380303&th=1 あと、楽曲 2曲は各自、編集可能なMP3とかで入手してくださいね。 GOLDFINGER'99 郷ひろみ https://www.sonymusic.co.jp/artist/HiromiGo/discography/SRDL-4643 Livin' la Vida Loca リッキー・マーティン https://music.oricon.co.jp/php/music/MusicTop.php?music=26679 [じゃあ、やってみよう!] で、それぞれの曲を聞いてみますと…。 おお、リッキーの方が前奏がちょっと長い…。 そして、リッキーの方がほんのちょっとだけ早い…。 ってことで、まいどおなじみの、Audacityで前奏の位置合わせ…。 ※今回はピッチは変えませんでした。 Audacity https://www.audacityteam.org/ 位置の合った2つのMP3ファイルを、Spresense の Dual Playerで再生。 https://developer.sony.com/develop/spresense/docs/arduino_tutorials_ja.html#_mp3_dual_players これで、まずは、同時再生ができるようになった。 これを何らかのセンシングによって各プレーヤーごとの音量を調整するようにしてみる。 今回は、ロームさんのボードの加速度を選択。 https://www.chip1stop.com/view/searchResUpt/InventryInfo?unqPartId=ROHM*0085974&unqPartNm=SPRESENSE-SENSOR-EVK-701&keyword=SPRESENSE-SENSOR-EVK-701&partId=ROHM-0170579 この中の加速度を使って音量を切り替えてみます。 自分が持っているボードは古いので、KX122-1037 が載っています。 なので、includeとインスタンス生成は、以下。 ```インスタンス生成 #include <Wire.h> #include <KX122.h> KX122 kx122(KX122_DEVICE_ADDRESS_1F); ``` で、setupの先頭で、 ```setup void setup() { Wire.begin(); kx122.init(); //TODO: Error Handling. ``` と初期化します。 dual_players.ino は、それぞれのPlayerが別なタスクになっているので、 loop() の中は、何もないのですが、ここに、加速度のセンシングとそれに合わせたPlayerの音量調整を実装します。 今回、動画にあるように、基板上面に垂直、GPSのアンテナのある方向を軸に回転させるので、 ACCのX軸の値をベースに調整しました。 ※傾きと音の調整はファイルに合わせてやってもらうのが良いです。 ``` void loop() { byte rc; float acc[3] = {0,0,0}; /* Change mixing ratio from acc */ rc = kx122.get_val(acc); if (rc == 0) { int player0_db = -80 + acc[0] * 80; int player1_db = -80 - acc[0] * 80; printf("player0 db = %d \n", player0_db); printf("player1 db = %d \n", player1_db); theAudio->setVolume(-80, player0_db, player1_db); } usleep(100000); } ``` とすることで、簡単に競演できました! ![共演中](https://camo.elchika.com/f14328ddc301370274c7fdb54921f2b42b1dcb77/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35313935656231352d393966302d346438342d383363652d6562366533343062303533642f63616636623035392d326633332d346339362d383036652d366231383239386138396131/) [ **動画はこちら**](https://twitter.com/spresense/status/1388373871225556992)