Interested_Spresenseのアイコン画像
Interested_Spresense 2022年02月26日作成 © CC BY 4+
セットアップや使用方法 セットアップや使用方法 閲覧数 1768
Interested_Spresense 2022年02月26日作成 © CC BY 4+ セットアップや使用方法 セットアップや使用方法 閲覧数 1768

郷ひろみとリッキーマーチンの競演

[今回用意したもの]

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の先頭で、

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);
}

とすることで、簡単に競演できました!

共演中

動画はこちら

ログインしてコメントを投稿する