Sipeed MAix Bit with MIC MaixPy で マイクのお試し #3

Sipeed MAix Bit with MIC MaixPy で マイクのお試し #3 です。

前回、Sipeed MAix Bit with MIC MaixPy #2 で
バイナリーのまま、音データを送信してみましたが、Serial通信でのデータ抜けが結構ありました。
そこで、今回は、 #2 のプログラムにハンド・シェイクを組み込んでみました。

プロトコル
PC側                     |           Bit側
1) b's' 送信       ------>        b's' が来たら、音データ(1 CHUNK*2 バイト)をバイナリ送信
                        <------          音データ(バイナリ) + '\r\n' 送信
2) 最後が、'\r\n'
で無ければ、  b'r' ---->        b'r' であれば、先に送ったデータを再送
                        <------          前の音データ(バイナリ) + '\r\n' を再送
3) 最後が、'\r\n'
であれば、     b's' ---->        b's' であれば、次のデータを送信
                        <------          音データ(バイナリ) + '\r\n'  送信

この様な簡単なプロトコルです。
Serial 通信は、多分、全2重なので、送信と受信が同時に行えます。

1. 最初は、やはり、Sipeed MAix Bit 側の python script です。

必ず、b's'を受信してから、音データ+'\r\n' を送信します。

2. PC 側の python script です。

1) b's' を送信して、音データの受信を待ちます。

2) 受信データの末尾が、'\r\n' であれば、スピーカへ出力して、次の b's' を送信します。
output = stream.write(line[:CHUNK*2])
で、 \r\n を除いて、pyaudio.PyAudio() のStream へ出力します。

3) 末尾に '\r\n' が付いていなければ、
b'r' を送信して、データの再送を促します。

結論は、感覚としては、 b's' / b'r' をわざわざ入れなくても、
Bit 側が、送信後、1度受信して、次のデータを送信するを繰り返すと、データ抜けはなくなるようです。
転送速度は、
Seepd=int(921600*1.6) 、 CHUNK=1024 で試すと
32,768[byte/sec]
となって、
Sample Rate 16,000 * 2 (Monoral 16bit) = 32,000[byte/sec]
を何とか出せるようになりました。

ですが、PC のスピーカーからは、まともな音はできません。
多分、 Bit 側の Python Script が遅くて、I2S で取り込むデータに抜けが出ている
気がします。
Bit側を、C言語で作れば、USB-Serial でも Sampling 16Khz Monoral 16bit で音が出そな
気がします。

今回は、ここまでぞね!!

このブログ記事について

このページは、おんちゃんが2020年3月16日 14:07に書いたブログ記事です。

ひとつ前のブログ記事は「Sipeed MAix Bit with MIC MaixPy で マイクのお試し #2」です。

次のブログ記事は「Sipeed MAix Bit with MIC Maixduino(Arduino) で マイクのお試し」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ