#M5StickV의 마이크로 녹음 및 스피커로 재생을 시도했습니다.

개요



최근에 판매되고 있는 새로운 타입의 M5StickV에서는 마이크가 실장되고 있는 것이 판명되었습니다. 시리얼 넘버의 K027로부터 계속되는 숫자가 2003 이후인 모델에 마이크가 탑재되고 있습니다.
소지의 M5StickV가 마이크 대응하고 있었기 때문에, 마이크로 녹음·스피커로 재생을 해 보았다.

#M5stickV 의 마이크로 녹음·스피커로 재생을 해 보았다 🦻 피 c. 라고 r. 코 m / rPM 6kc — nnn (@nnn112358) August 21, 2020


또한 maixpy로 마이크로 녹음하려면 이전 버전의 audio 모듈에 결함이 있으며 최신 버전이 필요합니다. 두는 장소는 이쪽.





M5StickV(마이크 장착 버전)

htps //w w. 슈 tch-s 시엔세. 코 m/타타 g/6651/



M5StickV 회로도



Kendryte K210의 IO_12와 IO_13이 마이크 앰프의 Goertek4737에 연결되어 있습니다.








































K210 IOIO 이름기능
IO_12MIC DAT마이크 앰프의 DAT 터미널과 연결
IO_13MIC CLK마이크 Amp의 CLK 터미널과 연결
IO_11SPK SD스피커 Amp의 SD 단자와 연결
IO_14SPK LRCCLK스피커 Amp의 LRCCLK 단자와 연결
IO_15SPK BCLK스피커 Amp의 BCLK 단자와 연결


MaixPy의 Audio 모듈



MaixPy는 오디오 데이터를 처리하기 위한 Audio 모듈을 제공합니다.

Audio 객체에 매개 변수로 전달하여 Audio를 직접 녹음하고 재생할 수 있습니다.



import audio
audio.Audio(array=None, path=None, points=1024)
パラメーター
   array: オーディオオブジェクトに変換可能なbytearray型のデータ。
   Path:パスを指定します。現在wav形式のみをサポートしています。
   points: オーディオバッファのサンプリングデータ数を指定します。0の場合、バッファは開かれません。デフォルトは1024です。

audio_data = test_audio.to_bytes ()
   オーディオオブジェクトのオーディオデータをbytearray型のオブジェクトに変換します。



MaixPy의 I2S 모듈



I2S 모듈은 주로 I2S 장치를 구동하는 데 사용됩니다. k210에는 총 3개의 I2S 장치가 탑재되어 있으며 각 장치에는 총 4개의 채널이 있습니다. 사용하기 전에 핀 매핑 및 관리가 필요합니다.



from Maix import I2S
i2s_dev = I2S(device_num)
    device_num:K210 の I2S デバイス番号を指定します。最大 3 です。

i2s_dev.channel_config(channel, mode, resolution, cycles, align_mode)
    channel:I2S チャンネル番号
    mode:チャネル送信モード、受信モードを選びます
    resolution:チャネルの解像度、つまり受信データビット数を指定します
    cycles:通信データのクロック周期を指定します。
    align_mode:チャネルのアライメントモードを指定します

i2s_dev.set_sample_rate(sample_rate)
    サンプルレートを指定します



M5StickV 마이크로 녹음하기



maixPy의 Audio 모듈을 사용하여 M5StickV의 마이크로 녹음하는 소스 코드입니다.



from Maix import GPIO, I2S, FFT
import image,lcd,math,time,gc,lcd
from board import board_info
from fpioa_manager import fm
import audio

lcd.init()
lcd.clear()
lcd.rotation(2)

sample_rate = 22050
sample_points = 4096

# I2S MIC GPIO
fm.register(board_info.MIC_LRCLK, fm.fpioa.I2S0_WS, force=True)
fm.register(board_info.MIC_DAT, fm.fpioa.I2S0_IN_D0, force=True)
fm.register(board_info.MIC_CLK, fm.fpioa.I2S0_SCLK, force=True)

mic_dev = I2S(I2S.DEVICE_0)
mic_dev.channel_config(mic_dev.CHANNEL_0, mic_dev.RECEIVER, align_mode=I2S.STANDARD_MODE)
mic_dev.set_sample_rate(sample_rate)
print(mic_dev)

player = audio.Audio(path="/sd/record_1.wav", is_create=True, samplerate=sample_rate)
queue = []

lcd.draw_string(20,50,"REC")

for i in range(100):
    tmp = mic_dev.record(sample_points)
    if len(queue) > 0:
        ret = player.record(queue[0])
        queue.pop(0)
    mic_dev.wait_record()
    queue.append(tmp)

player.finish()

lcd.draw_string(20,50,"finish")



M5StickV 스피커로 재생



maixPy의 Audio 모듈을 사용하여 M5StickV의 스피커로 재생하는 소스 코드입니다.



from fpioa_manager import *
from Maix import I2S, GPIO
import audio

#Speaker I2s Initialize
fm.register(board_info.SPK_SD, fm.fpioa.GPIO0)
spk_sd=GPIO(GPIO.GPIO0, GPIO.OUT)
spk_sd.value(1)
fm.register(board_info.SPK_DIN,fm.fpioa.I2S1_OUT_D1)
fm.register(board_info.SPK_BCLK,fm.fpioa.I2S1_SCLK)
fm.register(board_info.SPK_LRCLK,fm.fpioa.I2S1_WS)
wav_dev = I2S(I2S.DEVICE_1)
sample_rate = 22050

#Play Wav File
def play_wav(fname):
    player = audio.Audio(path = fname)
    player.volume(100)
    wav_info = player.play_process(wav_dev)
    wav_dev.channel_config(wav_dev.CHANNEL_1,
        I2S.TRANSMITTER,resolution = I2S.RESOLUTION_16_BIT,
        align_mode = I2S.STANDARD_MODE)
    wav_dev.set_sample_rate(sample_rate )
    while True:
        ret = player.play()
        if ret == None:
            break
        elif ret==0:
            break
    player.finish()
    print("finish")

play_wav("record_1.wav")



참고 자료




좋은 웹페이지 즐겨찾기