Spresense-Arduino のスケッチ例
pcm_captureを参考にマイクからの音声データを取得し、Wifi経由でデータを送信したいと考えています。

スケッチ例
pcm_captureの中にある以下のコードがキャプチャした音声データの中身を表示していることはわかるのですが、具体的にどのような構造で音声データが格納されているかがわかりません。

```

    printf("Size %d [%02x %02x %02x %02x %02x %02x %02x %02x ...]\n",
             size,
             s_buffer[0],
             s_buffer[1],
             s_buffer[2],
             s_buffer[3],
             s_buffer[4],
             s_buffer[5],
             s_buffer[6],
             s_buffer[7]);
    
```

4CHで録音している場合、MIC_Aの音声データがほしい場合どのようにすればいいのでしょうか

よろしくお願いいたします。
CC BY-SA 4.0
2019-05-20T05:43:58.770
55107
2020-07-09T18:03:10.297
34389
question
spresense arduino
Spresense-Arduino のスケッチ例 pcm_captureの音声データ構造について
ソニーのSPRESENSEサポート担当です。

お問い合わせの件についてお答えいたします。

PCMのキャプチャデータは次のようにBufferに格納されます。

  * リトルエンディアンで、Mic A, Mic B, Mic C, Mic D ,...の順に並んでいます
  * 1サンプル当たり16bit音声であれば16bit、24bit音声であれば32bitデータを使用します

これらのデータは構造体を定義してバッファの内容をキャストすると処理がしやすくなります。  
16bit音声と24bit音声の場合の簡単なサンプルコードを示します。

■ **16ビット4Ch録音の場合**

```

    struct channel_bit16 {
       uint16_t micA;
       uint16_t micB;
       uint16_t micC;
       uint16_t micD;
    };
    
    struct channel_bit16 *mic_data = (struct channel_bit16 *) s_buffer; // 0番目のデータにアクセス
    uint16_t mic_a = mic_data[0].micA;
    uint16_t mic_b = mic_data[0].micB;
    uint16_t mic_c = mic_data[0].micC;
    uint16_t mic_d = mic_data[0].micD;
    
```

■ **24ビット4Ch録音の場合**

```

    struct channel_bit24 {
       uint32_t micA;
       uint32_t micB;
       uint32_t micC;
       uint32_t micD;
    };
    
    struct channel_bit24 *mic_data = (struct channel_bit24 *) s_buffer; // 0番目のデータにアクセス
    uint32_t mic_a = mic_data[0].micA;
    uint32_t mic_b = mic_data[0].micB;
    uint32_t mic_c = mic_data[0].micC;
    uint32_t mic_d = mic_data[0].micD;
    
```

以上、ご参考になれば幸いです。  
今後ともSPRESENSEをどうぞよろしくお願いいたします。

SPRESENSEサポートチーム
CC BY-SA 4.0
2019-06-04T05:58:23.637
55500
2019-06-04T05:58:23.637
29520
55107
answer