Spresense Header CodeSpresense Header Code

Spresense - エッジコンピューティングを低消費電力で

Spresense で乾電池でも動く本格的なエッジコンピューティングを体験してみませんか?

Spresense SDK

1. Spresense SDK の使い方

この章は、 Spresense SDK のインストール、セットアップならびに簡単なサンプルアプリケーション Hello, World! の作成について解説しています。Spresense SDK の基本的な使い方を学ぶことができます。

1.1. ツールの準備

Spresense SDK はLinux/Windows/macOSで開発を行うことができます。ユーザーが使用する環境に応じて以下のセットアップを行ってください。

サポートされているオペレーティングシステム

  • Linux

    • Ubuntu 16.04以降 (64bit)

  • Windows

    • 8.1/10

  • macOS

    • High Sierra (10.13)以降

1.1.1. Linux向けセットアップ

  1. シリアル通信の設定

    以下のコマンドを実行し、使用するユーザーを dialout グループに追加します。

    $ sudo usermod -a -G dialout <user-name>

    コマンドを実行した後、再起動してください。再起動するまで設定は有効になりません。

  2. ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。

    $ wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh
    $ bash install-tools.sh

    インストールしたツールを使用可能にするために、以下のコマンドを実行します。

    $ source ~/spresenseenv/setup

    このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の .bashrc に上記コマンドを追加してください。

  3. Spresense SDK リポジトリからソースコードをダウンロードします。

    $ git clone --recursive https://github.com/sonydevworld/spresense.git

1.1.2. Windows向けセットアップ

  1. 下記のサイトからMSYS2のインストーラをダウンロードし、インストールします。

  2. ビルドに必要なツールをインストールします。スタートメニューにある MSYS2 MSYS を起動し、以下のコマンドを実行します。

    $ curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh
    $ bash install-tools.sh

    インストールしたツールを使用可能にするために、以下のコマンドを実行します。

    $ source ~/spresenseenv/setup

    このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の .bashrc に上記コマンドを追加してください。

  3. Spresense SDK リポジトリからソースコードをダウンロードします。

    $ git clone --recursive https://github.com/sonydevworld/spresense.git
  4. シリアルドライバのインストール

    シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。

    Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。

1.1.3. macOS向けセットアップ

  1. Appleが提供している開発ツールをインストールします。 ターミナルを起動し、以下のコマンドを実行します。

    $ xcode-select --install
  2. 以下のサイトからPython3のインストーラをダウンロードし、インストールします。

  3. ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。

    $ curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh
    $ bash install-tools.sh

    インストールしたツールを使用可能にするために、以下のコマンドを実行します。

    $ source ~/spresenseenv/setup

    このコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の .bash_profile に上記コマンドを追加してください。

  4. ターミナルで以下のコマンドを実行し、Spresense SDK リポジトリからソースコードをダウンロードします。

    $ git clone --recursive https://github.com/sonydevworld/spresense.git
  5. シリアルドライバのインストール

    シリアルドライバのインストールは、Spresense ボードをMacに接続する前に行ってください。

    Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。

    High Sierra (10.13)以降のmacOSにこのドライバをインストールする場合、インストール中にセキュリティに関する警告が表示されます。 「システム環境設定 > セキュリティ」 メニューを開き、「一般」にある「開発元"Silicon Laboratories Inc"のシステムソフトウェアの読み込みがブロックされました。」と表示されている右にある「許可」ボタンをクリックしてください。この操作が行われない場合、シリアルで接続することができません。

1.2. USB接続

Spresense メインボードへUSBを接続します。

spresense musb connect
図 1. メインボードへのUSBの接続

1.3. サンプルアプリケーション "Hello, World!" のビルド手順

ダウンロードしたSpresense SDKフォルダに移動し、次の手順でビルドします。

  1. sdk ディレクトリへ移動します。

    $ cd spresense/sdk
  2. NuttX Kernelのコンフィギュレーションを行います。

    $ tools/config.py --kernel release
  3. SDKのコンフィギュレーションを行います。

    今回は hello というExampleアプリケーションをビルドするので examples/hello を指定します。

    $ tools/config.py examples/hello
    コンフィギュレーションについての詳細はコンフィギュレーションを参照してください。
  4. ビルドを行います。

    $ make buildkernel
    $ make
    ビルドについての詳細はビルドを参照してください。

全ての手順がうまくいけば、 nuttx.spk というバイナリイメージが、 sdk フォルダに作成されます。このバイナリイメージは Spresense で、実行可能なアプリケーションであり、そのまま Spresenseメインボードにアップロードすることができます。

1.4. Spresense メインボードへのブートローダーのインストール

Spresense メインボードを正しく動作させるためにはバージョンに合わせたブートローダーのインストールが必要になります。

Spresense ボードは出荷状態ではローダーはインストールされていません。
Spresenseのローダーを利用するためにはEnd User License Agreementの同意が必要です。

SDKのコンフィギュレーション 及び Spresense メインボードへのバイナリイメージのロード 時にバージョンに合わせたブートローダーが見つからない場合は次のような WARNING が出るのでそれに従ってインストールを行います。

WARNING: New loader v1.0.003 is required, please download and install.
         Download URL   : https://developer.sony.com/file/download/spresense-binaries-vx.x.x.zip
         Install command:
                          1. Extract loader archive into host PC.
                             ./tools/flash.sh -e <download zip file>
                          2. Flash loader into Board.
                             ./tools/flash.sh -l /home/user/mySpresense/spresense/firmware/spresense -c <port>
  1. バイナリのダウンロード

    WARNING 上の Download URL に記載されているリンクを開きバイナリのZIPファイルをダウンロードします。

  2. バイナリのPCへのインストール

    ダウンロードしたZIPファイルで次のコマンドを使いPCにインストールします。

    $ ./tools/flash.sh -e spresense-binaries-vx.x.x.zip
  3. バイナリのSpresense メインボードへのロード

    WARNING 上で表示されたコマンドをそのまま実行します。

    $ ./tools/flash.sh -l ../firmware/spresense -c <port>
  4. ロードが完了し自動で再起動されます。

1.5. Spresense メインボードへのバイナリイメージのロード

ビルドしたバイナリイメージ nuttx.spk をSpresenseにロードするためには tools/flash.sh を用います。

  1. Spresense メインボードとPCをUSBケーブルで接続します。

    Spresense メインボードが接続されるシリアルポートは、使用するOSによって指定の仕方が変わります。以降の説明では、Linuxで使用する場合のポート名を記載しています。使用するOSによって適宜読み替えてください。

    それぞれのOSでのシリアルポート名の特定の仕方は以下のようになります。

    • Linux

      Linux上では以下のコマンドでSpresense メインボードが接続されているシリアルポートを特定することができます。

      $ dmesg | grep "cp21.*attached"
      [12220.625979] usb 1-1: cp210x converter now attached to ttyUSB0

      この場合は、 ポート名は /dev/ttyUSB0 になります。

    • Mac

      Macの場合は、/dev/tty.SLAB_USBtoUART というポート名になります。

    • Windows

      Windowsの場合は、「設定」メニューから「デバイス」を選択すると、「その他のデバイス」の中に Silicon Labs CP210x USB to UART Bridge (COM3) のように表示されます。この場合、COM3 がポート名となります。

  2. 次のコマンドを使い nuttx.spk をSpresenseへロードします。

    $ tools/flash.sh -c /dev/ttyUSB0 nuttx.spk

    ロード中は以下のようなログが出力されます。

    >>> Install files ...
    install -b 115200
    Install nuttx.spk
    |0%-----------------------------50%------------------------------100%|
    ######################################################################
    
    252480 bytes loaded.
    Package validation is OK.
    Saving package to "nuttx"
    updater# sync
    updater# Restarting the board ...
    reboot
  3. ロードが完了し自動で再起動されます。

1.6. シリアルターミナル上での動作確認

ビルドしたイメージ nuttx.spk を実機へロードすると作成したプログラムが実行されます。 ここでは実行されているプログラムの動作確認をシリアルターミナルで行うための一例を説明します。

Linux/Macでは screenminicom などのシリアルターミナルが使用できます。 WindowsではTera Termなどのシリアル通信ソフトを使用してください。シリアル通信設定は以下のようになります。

表 1. シリアル通信設定

ボーレート

115200

データ

8 bit

パリティ

none

ストップ

1 bit

フロー制御

none

シリアルターミナルの使用方法に関する詳細は、それぞれのマニュアルなどを参照してください。

ここでは screen コマンドを使用する際の例を挙げます。Linuxの場合は、以下のコマンドで screen コマンドをインストールしてください。

$ sudo apt install screen
  1. 次のコマンドでシリアルターミナルを開きます。

    $ screen /dev/ttyUSB0 115200

    以下のようにNSHプロンプトが表示されればSpresense メインボードは正しく起動しています。

    NuttShell (NSH)
    nsh>
  2. hello コマンドを実行し Hello, World! と表示されれば完了です。

    NuttShell (NSH)
    nsh> hello
    Hello, World!!
    nsh>
    シリアルターミナルを開くたびにSpresense メインボードはリセットされます

Spresense SDK の基本的な使い方は以上です。

2. サンプルアプリケーション GPS(GNSS)

この章では、GPS(GNSS)のサンプルアプリケーションの動作手順を示します。

2.1. ビルド&ロード手順

ダウンロードしたSpresense SDKフォルダに移動し、次の手順でビルドします。

  1. sdk ディレクトリへ移動します。

    $ cd spresense/sdk
  2. NuttX Kernelのコンフィギュレーションを行います。

    $ tools/config.py --kernel release
  3. SDKのコンフィギュレーションを行います。
    今回は gnss というExampleアプリケーションをビルドするので examples/gnss を指定します。

    $ tools/config.py examples/gnss
    コンフィギュレーションについての詳細はコンフィギュレーションを参照してください。
  4. ビルドを行います。

    $ make buildkernel
    $ make
    ビルドについての詳細はビルドを参照してください。

    全ての手順がうまくいけば、 nuttx.spk というバイナリイメージが、 sdk フォルダに作成されます。

  5. Helloのサンプルと同様、ビルドしたイメージ nuttx.spk をSpresenseに tools/flash.sh を用いてロードします。

    $ tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
  6. ロードが完了し自動で再起動されます。

2.2. GPS動作確認

この nuttx.spk をSpresenseへロードするとGPSのプログラムが実行できます。

Helloサンプルと同様に、シリアルターミナルを開きます。

$ minicom -D /dev/ttyUSB0 -b 115200 -s

builtinされている、 gnss というアプリを実行すると、

tutorial gnss log1
図 2. GPS起動時ログ

というログが表示されます。

測位ができていないうちは、

> No Positioning Data

という表示と、起動時を0時とした時刻が表示されます。 見晴らしの良い場所であれば、およそ、1分ぐらいで、グリニッジ標準時での時刻が表示されます。 およそ、3分ぐらいで、測位ができるはずです。

測位ができた場合は、

> Hour:9, minute:13, sec:20, usec:559
> LAT 35.25.6303
> LNG 139.22.1986

このような表示が行われ、緯度経度が取得できます。

3. サンプルアプリケーション Audio Player

この章では、Audio Playerのサンプルアプリケーションの動作手順を示します。

3.1. ビルド&ロード手順

ダウンロードしたSpresense SDKフォルダに移動し、次の手順でビルドします。

  1. sdk ディレクトリへ移動します。

    $ cd spresense/sdk
  2. NuttX Kernelのコンフィギュレーションを行います。

    $ tools/config.py --kernel release
  3. SDKのコンフィギュレーションを行います。
    今回は audio_player というExampleアプリケーションをビルドするので examples/audio_player を指定します。

    $ tools/config.py examples/audio_player
    コンフィギュレーションについての詳細はコンフィギュレーションを参照してください。
  4. ビルドを行います。

    $ make buildkernel
    $ make
    ビルドについての詳細はビルドを参照してください。

    全ての手順がうまくいけば、 nuttx.spk というバイナリイメージが、 sdk フォルダに作成されます。

  5. Helloのサンプルと同様、ビルドしたイメージ nuttx.spk をSpresenseに tools/flash.sh を用いて、ロードします。

    $ tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
  6. ロードが完了し自動で再起動されます。

  7. Audio Playerの場合、デコード処理を行うDSPバイナリのロードが必要です。 DSPバイナリの置き場所は、SDカードか、SPI-Flashのどちらかを選択できますが、 ここでは、SDカードからロードする方法を行います。

    DSPバイナリのパスの指定は、アプリケーションコード(audio_player_main.cxx)内で指定します。 audio_player_main.cxx では、DSPBIN_PATH で指定しています。

    #define DSPBIN_PATH "/mnt/sd0/BIN"

    であれば、SDカードになります。

    SPI-flashにしたい場合は、"/mnt/spif/BIN" を指定してください。 また、nullを指定すると、Configで設定されたパスになります。

    この "/mnt/sd0/BIN" は、PCで読み込んだ時に、ルートディレクトリの下の BIN/ になります。
    このディレクトリを作成し、ここに必要なコーデックのDSPを置きます。

    MP3でデコードする場合は、
    spresense/sdk/modules/audio/dsp/ の下の MP3DEC を選択してください。

  8. 同時に再生したい音楽ファイルをSDカードに書き込みます。 audio_player_main.cxx では、AUDIOFILE_ROOTPATH で指定しています。

    #define AUDIOFILE_ROOTPATH "/mnt/sd0/AUDIO"

    このため、PC上で読み込んだ時に、ルートディレクトリの下の AUDIO/ 以下に、 再生したいオーディオファイルを置いて下さい。サブディレクトリに置くこともできます。

  9. 現在のAudio Playerサンプルでは、簡易PlayListを利用した再生を行っています。 このため、playlistファイルの置き場所とファイル名を指定して再生します。 audio_player_main.cxx では、PLAYLISTFILE_PATH でパスを指定、 PLAY_LIST_NAMEでファイル名を指定しています。

    #define PLAYLISTFILE_PATH "/mnt/sd0/PLAYLIST"
    #define PLAY_LIST_NAME "TRACK_DB.CSV"

    このため、PC上で読み込んだ時に、ルートディレクトリの下の PLAYLIST/ 以下に、 TRACK_DB.CSV というファイルを作成してください。

    TRACK_DB.CSV の中身は、spresense/sdk/modules/audio/playlist/ の下の README.txt を参照してください。

これらすべてを用意することで、音楽再生が行えます。

3.2. Audio Playerの動作確認

この nuttx.spk を実機へロードするとAudio Playerのプログラムが実行されます。

Helloサンプルと同様に、シリアルターミナルを開きます。

$ minicom -D /dev/ttyUSB0 -b 115200 -s

builtinされている、 player というアプリを実行すると、

tutorial player log
図 3. 音楽再生時ログ

というログが表示され、音声が再生されます。

エラーが発生した場合は、オーディオサブシステムのエラーについてを参照してください。

4. サンプルアプリケーション Audio Recorder

この章では、Audio Recorderのサンプルアプリケーションの動作手順を示します。

コードの構造、データフロー、APIリファレンスなどはAudio Recorder Functionsを参照して下さい。

4.1. ビルド&ロード手順

ダウンロードしたSpresense SDKフォルダに移動し、次の手順でビルドします。

  1. sdk ディレクトリへ移動します。

    $ cd spresense/sdk
  2. NuttX Kernelのコンフィギュレーションを行います。

    $ tools/config.py --kernel release
  3. SDKのコンフィギュレーションを行います。

    1. 今回は audio_recorder というExampleアプリケーションをビルドするので examples/audio_recorder を指定します。

      $ tools/config.py examples/audio_recorder

      このコンフィギュレーションを行うことによって、audio_recorder用の設定が行われます。
      そのうち、下記の項目については必要に応じて変更が可能です。その他は変更しないで下さい。

      [SDK audio]                    <= Y
        [Audio Recorder]             <= Y
          [DSP imange mount path]    <= /mnt/sd0/BIN  (1)
      1 DSPバイナリのデフォルトの置き場所をSDカードにします。SPI-flashにする場合は /mnd/spif/BIN
      コンフィギュレーション機能そのものについての詳細はコンフィギュレーションを参照してください。
    2. 記録する音声にユーザー独自の信号処理を行いたい場合はPreprocess を設定します。

      AudioRecorderでは記録する音声に対してユーザー独自の信号処理を行うことが出来ます。
      これを行いたい場合にはコンフィグメニューで [Use preprocess] を有効にする必要があります。

      コンフィグメニューを開きます。

      $ tools/cofig.py -m

      [Use preprocess] にチェックを入れます。

      [Examples]
        [Audio recorder example]
          [Use preprocess]        <= Y  (1)
      1 Preprocessを有効にします
      Preprocessの詳細についてはSDKデベロッパーガイドの Set preprocess を参照して下さい。
  4. ビルドを行います。

    $ make buildkernel
    $ make
    ビルドについての詳細はビルドを参照してください。

    全ての手順がうまくいけば、 nuttx.spk というバイナリイメージが、 sdk フォルダに作成されます。

  5. Helloのサンプルと同様、ビルドしたイメージ nuttx.spk をSpresenseに tools/flash.sh を用いて、ロードします。

    $ tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
  6. ロードが完了し自動で再起動されます。

  7. Audio Recorderの場合、エンコード処理を行うDSPバイナリのロードが必要です。 DSPバイナリの置き場所は、SDカードか、SPI-Flashのどちらかを選択できますが、 ここでは、SDカードからロードする方法を行います。

    DSPバイナリのパスの指定は、アプリケーションコード(audio_recorder_main.cxx)内のマクロ値で設定しています。
    audio_recorder_main.cxx では、 DSPBIN_PATH で設定していますので必要に応じてアプリケーションコードを変更して下さい。

    #define DSPBIN_PATH "/mnt/sd0/BIN"

    であれば、SDカード上の BIN ディレクトリになります。

    この "/mnt/sd0/BIN" は、PCで読み込んだ時に、ルートディレクトリの下の BIN/ になります。
    このディレクトリを作成し、ここに必要なコーデックのDSPを置きます。

    SPI-flashにしたい場合は、"/mnt/spif/BIN" を指定してください。 また、nullを指定すると、Configで設定されたパスになります。

    MP3でエンコードする場合は、
    spresense/sdk/modules/audio/dsp/ の下の MP3ENC を選択してください。
    その他のエンコードをする場合のCodec種別とDSPバイナリの組み合わせは下表の通りです。

    Codec DSPバイナリ

    MP3

    MP3ENC

    LPCM

    SRC

    また、Preprocess を設定している場合は、下記のPreprocess 用バイナリも同様にSDカードに置いてください。
    バイナリは spresense/examples/audio_recorder/worker/srcの下の PREPROC です。

    本サンプルアプリケーションでは、 PREPROC には簡単なRCfilterがデフォルトで組み込まれています。
    独自の信号処理などにカスタムをしたい場合には こちらを参考にして下さい。
  8. 記録した音声はSDカードに記録されます。 記録パスもアプリケーションコード(audio_recorder_main.cxx)内のマクロ値で設定しています。
    audio_recorder_main.cxx では、 RECFILE_ROOTPATH で設定していますので必要に応じてアプリケーションコードを変更して下さい。

    #define RECFILE_ROOTPATH "/mnt/sd0/REC"

    であればSDカードに記録されます。

4.2. Audio Recorderの動作確認

この nuttx.spk を実機へロードするとAudio Recorderのプログラムが実行されます。

Helloサンプルと同様に、シリアルターミナルを開きます。

$ minicom -D /dev/ttyUSB0 -b 115200 -s

builtinされている、 recorder というアプリを実行すると、

tutorial recorder log
図 4. 音声記録時ログ

というログが表示され、音声が記録されます。

記録された音声はPCで再生することが出来ます。その際にはSDカードルートディレクトリの下の REC/ に音声ファイルがあります。

エラーが発生した場合は、オーディオサブシステムのエラーについてを参照してください。

4.3. DSPバイナリ(PREPROC)のカスタムについて

DSPバイナリ(PREPROC)のカスタム方法について記載します。

4.3.1. Step1. PREPROCのコード編集

PREPROCのコード構成と編集箇所について説明します。
コードは、ユーザー編集すべき部分とフレームワークとして提供される部分の2つに分かれます。

ユーザーが編集するコード

ユーザーが主に編集すべきコードです。
これらのコードを編集してDSPで信号処理を記述することが出来ます。

woker ディレクトリの中にDSPのコードがまとまっており、その中に userproc ディレクトリがあります。
ユーザが信号処理などを書くのは userproc ディレクトリ内のみで、その他は基本的に変更の必要はありません。

main.cpp には、起動処理~MainCPUとのデータ通信制御が書かれていますので変更しないで下さい。

diag c218e3632dfa916b571321d164d9dfb5
図 5. コード構成
main.cpp

起動処理やDSP通信処理などが書かれています。編集の必要は有りません。

userproc_command.h

DSPとの通信コマンドを定義するヘッダファイルです。
必要なパラメータはこのファイルに記載します。

userproc.h

ユーザーコードのヘッダファイルです。

userproc.cpp

ユーザーコード本体です。
このファイルに信号処理などを書く、または呼び出します。

ユーザーコードに用意されるインタフェース

userproc.cppには、 Init , Exec , Flush , Set コマンドの枠組みが用意されており
ユーザーコードはそれぞれに対応する中身を書いていくことでDSP内での処理を実現することが出来ます。

ユーザーが記述すべき処理について説明します。
(※デフォルトではサンプルとしてRCフィルタが組み込まれています。)

コマンドによるDSP内部の状態遷移は下図の様な作りとなることを想定しています。

diag 8dd0a34e45b35a83ecce77f22a3332c0
図 6. 想定するDSP状態遷移

各コマンドを使い以下のような流れで処理を行います。

  1. AUDCMD_SETRECORDERSTATUSがコールされるとDSPが起動します。

  2. Init コマンドで必要なパラメータ(ch数やビット長など)を設定します。

  3. 記録開始するとキャプチャした音声データが Exec コマンドで定期的にDSPに送られるので所望のフィルタ処理をしてください。

  4. 任意のタイミングでDSP内部のパラメータなどを変更したい場合には、 Set コマンドを送ることで実装することを想定しています。このコマンドの実行タイミングは、 Exec を含めた受信順になります。+

  5. 記録停止すると最後の音声データの Exec の後、 Flush コマンドが送られるので終端処理の必要がある場合はここで処理をします。

コマンドの定義

各機能で使用するデータ型は userproc_command.h に書かれており、中身は自由に書き換えることが出来ます。

各コマンドのフォーマットは下図の様になっています。
先頭の白抜きの部分には最低限必要なパラメータが固定で配置されています。これらは変更しないで下さい。
ユーザーが userproc_command.h で定義するパラメータは下図の User param (ピンク色箇所)にあたる部分です。

diag 3d57cbbb80b2fb16206e83f6942e25e8
図 7. コマンドフォーマット

各コマンドについて説明します。

struct InitParam : public CustomprocCommand::CmdBase
  • Init処理用のパラメータです。
    デフォルトではすべてreserveとなっていますが、ch数やビット長など、必要なパラメータに変更してください。

struct ExecParam : public CustomprocCommand::CmdBase
  • Exec処理用のパラメータです。
    音声データのアドレス・サイズは上図の ExecParam にある様に継承元の CustomprocCommand::ExecParamBase に定義されています。
    詳細は /sdk/modules/include/audio/dsp_framework/customproc_command_base.h を参照してください。

struct FlushParam : public CustomprocCommand::CmdBase
  • Flush処理用のパラメータです。
    音声データのアドレス・サイズは上図の ExecParam にある様に継承元の CustomprocCommand::FlushParamBase に定義されています。
    詳細は /sdk/modules/include/audio/dsp_framework/customproc_command_base.h を参照してください。

struct SetParam : public CustomprocCommand::CmdBase
  • Set処理用のパラメータです。
    様々な動的に変更したいパラメータを定義します。デフォルトではRCフィルタのOn/Offや係数を定義しています。

各機能に対応する関数

下記の関数群は userproc.cpp に書かれています。中身は自由に書き換えることが出来ます。
それぞれのコマンド定義に従い処理を行います。

void UserProc::init(InitParam *)
  • InitParamに従い初期化を行う処理を書いて下さい。
    アプリケーションコードからの AUDCMD_INITMFE コマンドで実行されます。
    (デフォルトでは何もしていません。)

void UserProc::exec(ExecParam *)
  • ExecParamに従い信号処理を書いて下さい。
    記録を開始するとSDK内部から定期的に呼ばれます。
    1フレームは記録の設定がLPCMの場合には768サンプル、MP3の場合には1152(ただし16kHz時は1728)サンプルです。
    入力データアドレスからデータを取得し、信号処理を行い、出力データアドレスへ書き出して下さい。
    (デフォルトではRCフィルタ処理が書かれています。)

void UserProc::flush(FlushParam *)
  • FlushParamに従いFlush(終端)処理を書いて下さい。
    記録の停止時にSDK内部から一度だけ呼ばれます。
    IIRやFIRフィルタのように遅延が発生する場合は、最終フレームの後に flush を行い、遅延分の出力を行います。
    出力すべきデータがある場合には、出力データアドレスへ書き出して下さい。
    (デフォルトでは何もしていません。)

void UserProc::set(SetParam *)
  • SetParamに従い設定処理を書いてください。
    アプリケーションコードからの AUDCMD_SETMFE コマンドで実行されます。
    (デフォルトではRCフィルタの係数を設定しています。)

4.3.2. Step2. PREPROC バイナリのビルド

ConfigurationPreprocess を有効にしていれば、本アプリケーションのビルド時に自動で PREPROC バイナリが作成されます。
作成されるパスは spresense/examples/audio_recorder/worker/srcの 下の PREPROC です。
これをSDカードの /mnt/sd0/BIN(PCから見ると \BIN)フォルダに置いてください。