I2S

    I2S模块主要用于驱动I2S设备,k210一共有3个I2S设备,每个设备一共有4个通道,在使用前需要对引脚进行映射管理

    模块函数

    构造函数

    新建一个 I2S 对象

    from Maix import I2S
    i2s_dev = I2S(device_num)
    

    参数

    device_num I2S号,使用指定的 I2S,可以通过 I2S. 按tab键来补全

    返回值

    返回一个I2S 对象

    通道配置函数

    用于配置 I2S 通道,在此之前需要对引脚进行映射

    i2s_dev.channel_config(channel, mode, resolution, cycles, align_mode)
    

    参数

    • channel: I2S通道编号

    • mode: 通道传输模式,一共有接收和发送模式,录音为接受,播放为发送

    • resolution: 通道分辨率,即接收数据位数

    • cycles: 单个数据时钟数

    • align_mode: 通道对齐模式

    返回值

    设置采样率

    用于配置 I2S 采样率

    i2s_dev.set_sample_rate(sample_rate)
    

    参数

    sample_rate: int 类型,采样率

    返回值

    接收音频

    使用I2S接收音频数据

    audio = i2s_dev.record(points)
    

    参数

    • points: 一次采集的音频点数

    返回值

    audio: 一个audio音频对象

    发送音频

    使用I2S发送音频数据

    i2s_dev.play(audio)
    

    参数

    • audio: 发送的音频对象

    返回值

    例程

    例程1

    采集数据并直接播放

    from Maix import I2S
    import time
    from fpioa_manager import *
    
    fm.register(20,fm.fpioa.I2S0_IN_D0)#GO
    fm.register(19,fm.fpioa.I2S0_WS)
    fm.register(18,fm.fpioa.I2S0_SCLK)
    fm.register(34,fm.fpioa.I2S2_OUT_D1)
    fm.register(35,fm.fpioa.I2S2_SCLK)
    fm.register(33,fm.fpioa.I2S2_WS)
    sample_rate = 44*1000
    rx = I2S(I2S.DEVICE_0)
    rx.channel_config(rx.CHANNEL_0, rx.RECEIVER, align_mode = I2S.STANDARD_MODE)
    rx.set_sample_rate(sample_rate)
    tx = I2S(I2S.DEVICE_2)
    tx.channel_config(tx.CHANNEL_1, tx.TRANSMITTER, align_mode = I2S.RIGHT_JUSTIFYING_MODE)
    tx.set_sample_rate(sample_rate)
    while True:
        audio = rx.record(256)#sampling points number must be smaller than 256
        tx.play(audio)
    

    例程2

    采集数据转化为 Audio 并播放

    from Maix import I2S
    from Maix import Audio
    from Maix import FFT
    import time
    from fpioa_manager import *
    
    fm.register(20,fm.fpioa.I2S0_IN_D0)
    fm.register(19,fm.fpioa.I2S0_WS)
    fm.register(18,fm.fpioa.I2S0_SCLK)
    fm.register(34,fm.fpioa.I2S2_OUT_D1)
    fm.register(35,fm.fpioa.I2S2_SCLK)
    fm.register(33,fm.fpioa.I2S2_WS)
    
    rx = I2S(I2S.DEVICE_0)
    rx.channel_config(rx.CHANNEL_0, rx.RECEIVER, align_mode = I2S.STANDARD_MODE)
    rx.set_sample_rate(16000)
    tx = I2S(I2S.DEVICE_2)
    tx.channel_config(tx.CHANNEL_1, tx.TRANSMITTER, align_mode = I2S.RIGHT_JUSTIFYING_MODE)
    tx.set_sample_rate(16000)
    
    while True:
        audio = rx.record(256)
        audio_data = audio.to_bytes()
        play_audio = Audio(audio_data)
        tx.play(play_audio)