1
1

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.

音楽再生システムを作ってみた 音楽再生機能 設計編

Last updated at Posted at 2023-05-09

1. 今回のやりたいこと

音楽再生システムを作ります。
これを実現するためには、下記4つの機能が必要になります。

  • 表示機能
  • ダウンロード機能
  • 音楽受信機能
  • 音楽再生機能

詳細については下記リンクを参照ください。
音楽再生システムを作ってみた (前編)

本記事では、音楽受信機能と音楽再生機能の設計編に関する内容を記載します。

2. 音楽受信/再生機能

音声データのフォーマットはWAVファイルとし、BlueTooth経由で受信します。BlueToothデバイスには、HC-06を使用します。(HC-06の詳細についてはKOZOS上で超音波センサのデータを周期的にPCへ送信してみた (設計編)を参照ください)

音楽受信/再生機能のソフトウェア構成図を以下に示します。
下記図の左半分が音楽受信機能、右半分が音楽再生機能になります。
image.png

次章から、各ソフトウェアの説明をします。

2.1 音楽受信/再生アプリケーション

改めての説明にはなりますが、音楽データはBlueTooth経由で受信します。BlueToothデバイスとして使用するHC-06の通信インタフェースはUARTであり、その最大通信速度は115200bpsとなっています。音声の仕様としては、1サンプル16bit、モノラル、サンプリング周波数16kHzとなっています。
1サンプルは16bitのため、1サンプルをBlueTooth経由で受信するのに約0.13ms((1/115200)×16)かかります。1s分の音声を再生するには16000サンプル必要になるため、1s分の音声データを受信するのに約2s(16000×0.13)かかってしまいます。

ある程度連続で音声を再生させたいため、アプリにて音声データをためる必要があります。
音楽データをためるためのバッファ構造を以下に示します。
image.png
バッファは2次元配列で定義し、1つ1つのデータが1サンプルに相当します。x方向は160サンプル(10ms分の音声データ)とし、これを1フレームと定義します。今回は、最大3秒分の音声データを格納するようにするため、y方向は300フレームとします。

2.2 WAVファイル解析マネージャ

WAVファイルにはヘッダとデータがあります。ヘッダを解析し、WAVファイルと認識した場合は、データを音楽受信/再生アプリケーションへ通知します。

2.2 BlueToothデバイスドライバ

BlueToothデバイスを制御するためのソフトウェアになります。
BlueToothデバイスドライバ下記2つのタスクから構成されています。

  • データ受信タスク
    BlueToothからのデータを受信するタスクになります。
    データを受信するとWAVファイル解析マネージャへ通知します。

  • データ送信/接続チェックタスク
    BlueToothデバイスと接続状態を管理し、接続されている場合はデータをBlueToothデバイスへ送信します。(ただし、今回はデータ送信は行いません。デバッグ用にATコマンドを送信するときにのみ使用します。)
    デバイスとの接続方法については結構調べたため、詳しく説明したいと思います。KOZOS上で超音波センサのデータを周期的にPCへ送信してみた (設計編)でも接続方法について記載しているのですが、今回はより詳細に調査いたしました。
    今回、HC-06と使用しているマイコンとは以下のように接続しています。
    image.png
    HC-06には、STATE、RXD、TXD、GND、VCC、WAKE UPピンがあります。いろいろ調査したところSTATEピンがデバイスとの接続チェックに使えることがわかりました。
    以下に何かしらと接続されているときと接続されていないときのSTATEピンの波形を載せます。
    ・接続されているときの波形
    image.png
    ・接続されていないときの波形
    image.png
    上記の通り、何かしらと接続されているときは常に3.3V、接続されていないときは約200ms周期でhighとlowを繰り返しています。10ms周期でSTATEピンを確認し、16回連続同じ値であれば”接続された”、そうでない場合は"接続されていない"と判断することとしました。

2.3 USARTドライバ

USART通信を行うためのソフトウェアになります。
BlueToothデバイスとはUARTで通信するため、USARTドライバが必要になります。

2.4 GPIOドライバ

GPIOの制御を行うためのドライバになります。
2.1のデバイス接続チェックタスクで述べたように、STATEピンで接続状態を確認する必要があるため、GPIOドライバが必要になります。

3. 最後に

今回作成したソースコードを下記githubに置きました。
Nucleo-L4R5ZI_System
簡単な動作確認しかできていませんので、使用される場合は自己責任でお願いいたします。

次回は、音楽再生機能についての記事を作成する予定です。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?