はじめに
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の使い方はこんな感じです。
#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"); // ファイル再生
}
#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() にオーディオ処理をごちゃごちゃ書かなくて済むので、このライブラリは役に立つのではないかと思います。