K230庐山派同时播放语音和视频流有杂音和花屏

Viewed 39

问题描述


from libs.PipeLine import PipeLine
from libs.YOLO import YOLOv5
from libs.Utils import *
from media.media import *
from media.pyaudio import *
import media.wave as wave
import os


def play_audio_file(filename):
    """播放音频文件(如果初始化失败则静默跳过,不影响主流程)"""
    wf = None
    stream = None
    p = None
    # 检查文件是否存在
    try:
        os.stat(filename)
    except:
        print(f"⚠️ 音频文件不存在: {filename}")
        # 如果os.path.exists不可用,尝试直接打开文件
        return

    wf = wave.open(filename, 'rb')  # 打开wav文件
    CHUNK = int(wf.get_framerate() / 25)  # 设置音频chunk值
    print(f"CHUNK={CHUNK}")
    p = PyAudio()
    p.initialize(CHUNK)  # 初始化PyAudio对象
    # MediaManager.init()
    # 注意:MediaManager已由Pipeline初始化,无需重复初始化
    print(2)

    # 创建音频输出流,设置的音频参数均为wave中获取到的参数
    # 如果初始化失败(如资源被占用),则静默跳过
    stream = p.open(format=p.get_format_from_width(wf.get_sampwidth()),
                    channels=wf.get_channels(),
                    rate=wf.get_framerate(),
                    output=True,
                    frames_per_buffer=CHUNK)
    print(3)

    # 设置音频输出流的音量
    stream.volume(vol=5000000)
    data = wf.read_frames(CHUNK)  # 从wav文件中读取一帧数据
    while data:
        stream.write(data)  # 将帧数据写入到音频输出流中
        data = wf.read_frames(CHUNK)  # 从wav文件中读取一帧数据
    print(4)

    if stream:
        stream.stop_stream()  # 停止音频输出流
        stream.close()  # 关闭音频输出流
    if p:
        p.terminate()  # 释放音频对象
    if wf:
        wf.close()  # 关闭wav文件
    # MediaManager.deinit()
    # 注意:不要调用MediaManager.deinit(),因为Pipeline还在使用它



if __name__=="__main__":
    # 添加显示模式,默认hdmi,可选hdmi/lcd/lt9611/st7701/hx8399/nt35516,其中hdmi默认置为lt9611,分辨率1920*1080;lcd默认置为st7701,分辨率800*480
    display_mode="lcd"
    rgb888p_size=[320, 320]
    pl=PipeLine(rgb888p_size=rgb888p_size,display_mode=display_mode)
    pl.create()
    while True:
        play_audio_file("/sdcard/examples/0.wav")
    pl.destroy()

硬件板卡


庐山派

软件版本


CanMV_K230_LCKFB_micropython_v1.4-24-gf73abaf_nncase_v2.9.0

1 Answers

你好,参照这个帖子修改:https://www.kendryte.com/answer/questions/10010000000007307