5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

spresenseAdvent Calendar 2021

Day 16

Spresenseを使ったシンプルなAudio Playerをつくってみた

Posted at

はじめに

SpresenseのもつAudio機能を簡単に使えるようにするためのArduinoライブラリ「SP_Audio」を作成しました。イメージは、DFPlayer Miniぐらいのシンプルさを目指しています。ただ、DFPlayerとは違って、MP3だけではなくWAVも再生可能、ハイレゾも再生可能、デュアルデコードで2つのストリームを同時に再生可能、さらにビープ(tone)も組み合わせると同時にトリプル再生可能、そして、再生だけはなく録音にも対応、ハイレゾ録音も可能。これらSpresenseのもつAudio機能そのものなのですが、DFPlayerとはレべチです。

前置きが長くなりましたが、「SP_Audio」ライブラリはSpresenseのもつAudio機能をかなり抽象化しているので、機能の中身を知りたいひとはソニー公式のAudioチュートリアルに丁寧に解説されているのでそちらを参考にすると良いと思います。

SP_Audio 特徴

  • DFPlayer MiniっぽくシンプルなAPIでオーディオ機能を扱える
  • ライブラリ内で専用スレッドを立てて処理しているので、他の処理との組み合わせ動作が簡単!
  • 機能
  • MP3/WAVの再生機能
  • MP3/WAVの録音機能
  • ビープ音再生機能
  • デュアルデコード対応
  • ハイレゾ対応

SP_Audio 使い方

ライブラリはこちらです。Arduino/libraries 以下にインストールしてください。
(インストール方法について、もう少し具体的な方法を知りたい場合はコメントください)

APIの使い方はこんな感じです。

MP3再生
#include <SP_AudioPlayer.h>
SP_AudioPlayer player;

void setup()
{
  /* Initialize Player */
  player.begin(); // 初期化
  player.volume(10); // ボリューム設定
  player.setFs(48000); // サンプリングレート設定
  player.setBitlen(16); // ビット長設定
  player.setChannel(2); // チャンネル数設定

  /* Player */
  player.mp3play("/mnt/sd0/sample.mp3"); // ファイル再生
}
MP3録音
#include <SP_AudioRecorder.h>
SP_AudioRecorder recorder;

void setup()
{
  /* Initialize Recorder */
  recorder.begin(); // 初期化
  recorder.volume(50); // マイクゲイン設定
  recorder.setFs(48000);  // サンプリングレート設定
  recorder.setBitlen(16); // ビット長設定
  recorder.setChannel(2); // チャンネル設定

  /* Recorder */
  recorder.mp3recorder("/mnt/sd0/sample.mp3"); // 録音開始
  sleep(10); // 10秒間録音
  recorder.stop(); // 録音停止
}

SP_Audio サンプルコード一覧

機能についてAPIを細かく説明するより、サンプルコードを動かしてみてもらった方が早いと思うのでexamples一覧(2021/12/16時点)を載せておきます。

example 説明
MP3Player SDカードのmp3フォルダに置いてあるMP3ファイル(16bit, 2ch)を順番に再生する。
WAVPlayer SDカードのwavフォルダに置いてあるWAVファイル(44.1kHz, 16bit, 2ch)を順番に再生する。
MP3Recorder SDカードにsample.mp3(48kHz, 16bit, 2ch)を10秒間録音する。録音が終わったら再生、を繰り返す。
WAVRecorder SDカードにsample.wav(48kHz, 16bit, 1ch)を10秒間録音する。録音が終わったら再生、を繰り返す。
HiresWavRecorder SDカードにhires.wav(192kHz, 16bit, 1ch)を10秒間録音する。録音が終わったら再生、を繰り返す。
MP3DualPlayer SDカードのmp3フォルダに置いてあるMP3ファイル(16bit, 2ch)を順番にデュアル再生する。
WAVDualPlayer SDカードのwavフォルダに置いてあるWAVファイル(44.1kHz, 16bit, 2ch)を順番にデュアル再生する。
TalkingDisplay 音源words.zipをSDカードに展開しておく。シリアルからのコマンド入力にしたがって日付や時間を再生する。
Beeper 音階をビープ再生する。
PlayRtttl スターウォーズをビープ再生する。
SerialBeeper シリアルコマンド入力にしたがってビープ再生する。
SerialPlaylist シリアルコマンド入力にしたがってプレイリストを再生する。

さいごに

オーディオ機能をメインに使うというよりも、他の機能を実装しているアプリケーションの中で、音機能も簡単に組み合わせて使いたいよという場合に、setup(), loop() にオーディオ処理をごちゃごちゃ書かなくて済むので、このライブラリは役に立つのではないかと思います。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?