查看: 211|回复: 0

[在线活动] 2025 AI训练营——扬声器的使用

[复制链接]
  • TA的每日心情
    开心
    昨天 11:47
  • 签到天数: 1372 天

    连续签到: 11 天

    [LV.10]以坛为家III

    39

    主题

    2万

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    19069
    最后登录
    2026-4-5
    发表于 2026-1-2 23:31:04 | 显示全部楼层 |阅读模式
    Snipaste_2026-01-02_23-30-01.png
    import math
    import time

    # 系统配置参数
    SYSTEM_CLOCK = 24000000  # 24MHz系统时钟
    AUDIO_SAMPLE_RATE = 8000  # 8kHz采样率
    AUDIO_BIT_DEPTH = 16      # 16位音频
    AUDIO_VOLUME = 0x7FFF    # 50%音量

    # 扬声器控制引脚
    SPEAKER_PIN = 22  # PIO1_06

    # 模拟硬件寄存器结构
    class SAI_Type:
        def __init__(self):
            self.CTRL = 0
            self.STAT = 0
            self.DATA = 0
            self.CONFIG = 0
            self.VOLUME = 0

    class GPIO_Type:
        def __init__(self):
            self.DR = 0
            self.GDIR = 0

    # 全局硬件实例
    SAI0 = SAI_Type()
    GPIO1 = GPIO_Type()

    def CLOCK_EnableClock(module):
        """使能模块时钟"""
        pass  # 模拟实现

    def RESET_PeripheralReset(module):
        """外设复位函数"""
        pass  # 模拟实现

    def SDK_DelayMs(ms):
        """毫秒级延时"""
        time.sleep(ms / 1000.0)

    # 初始化SAI音频接口
    def BOARD_AUDIO_Init():
        """初始化音频系统"""
        # 配置为I2S模式
        protocol = 1  # kSAI_ProtocolI2S
        direction = 1  # kSAI_DirectionTransmit
        syncMode = 0   # kSAI_ModeAsync

        # 设置采样率和位深
        sampleRate = AUDIO_SAMPLE_RATE
        bitCount = AUDIO_BIT_DEPTH

        # 使能SAI时钟
        CLOCK_EnableClock(0)

        # 复位SAI模块
        RESET_PeripheralReset(0)

        # 配置GPIO引脚为SAI功能
        GPIO1.GDIR |= (1 << SPEAKER_PIN)
        GPIO1.DR |= (1 << SPEAKER_PIN)

        print("音频系统初始化完成")
        print(f"采样率: {AUDIO_SAMPLE_RATE}Hz")
        print(f"位深度: {AUDIO_BIT_DEPTH}位")

    # 播放单音频率
    def AUDIO_PlayTone(frequency, duration):
        """播放指定频率的音调"""
        print(f"播放 {frequency}Hz 音调,持续{duration}秒")

        # 生成正弦波数据
        buffer = []
        for i in range(256):
            # 生成正弦波
            sample = int(32767.0 * math.sin(2 * math.pi * frequency * i / AUDIO_SAMPLE_RATE))
            buffer.append(sample)

        # 模拟DMA传输
        for sample in buffer:
            # 写入音频数据
            SAI0.DATA = sample
            time.sleep(1 / (AUDIO_SAMPLE_RATE * 256) * 1000)  # 模拟采样时间

    # 播放语音"你好"
    def AUDIO_PlaySpeech():
        """播放预录制的"你好"语音"""
        # 配置音量
        SAI0.VOLUME = AUDIO_VOLUME

        # 播放440Hz音调模拟语音
        AUDIO_PlayTone(440, 0.5)
        print("播放语音:你好")

    def main():
        """主程序"""
        print("RT1052扬声器驱动演示")
        print("="*40)

        # 初始化音频系统
        BOARD_AUDIO_Init()

        while True:
            # 播放"你好"
            AUDIO_PlaySpeech()

            # 延时2秒
            time.sleep(2)

    if __name__ == "__main__":
        main()

    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2026-4-6 01:04 , Processed in 0.095688 second(s), 22 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表