基于二维码的音频播放器播放WAV文件失败,提示“Unknown Wave Format”
问题分析与解决方案
核心问题1:文件格式不匹配
你用pytube下载的是YouTube的MP3音频流,但强行将文件后缀命名为.wav,实际文件内容还是MP3格式。pygame的mixer加载时会按后缀判断格式,导致解析错误,出现“Unknown Wave Format”。
核心问题2:play方法调用错误
pygame.mixer.music.play()不需要传入文件路径参数,当前写法会导致播放逻辑异常。
修复步骤
方案一:直接使用MP3格式(最简单)
修改代码中文件名和路径,匹配实际下载的音频格式:
import cv2 from pytube import YouTube import pygame PURPLE = '255, 0, 188' PATH = 'A:\\VS\\programms\\ai-help' MUSIC_PATH = 'A:\\VS\\programms\\ai-help\\audio.mp3' # 改为MP3后缀 link = '' pygame.mixer.pre_init(44100, 16, 2, 4096) #frequency, size, channels, buffersize pygame.init() cap = cv2.VideoCapture(2) detector = cv2.QRCodeDetector() def download(): try: yt = YouTube(link) except: print('Connection error') try: mp3_stream = yt.streams.filter(only_audio=True).first() mp3_stream.download(output_path=PATH,filename='audio.mp3') # 文件名改为MP3 print('download complete') except: print('error downloading audiofile') def play(): pygame.mixer.music.load(MUSIC_PATH) pygame.mixer.music.play() # 移除多余的路径参数 print('now playing')
方案二:转换为WAV格式(需额外依赖)
如果确实需要WAV格式,可通过pydub将下载的MP3转换为标准WAV:
- 先安装依赖:
pip install pydub(需额外安装ffmpeg并添加到系统环境变量) - 修改代码添加转换逻辑:
import cv2 from pytube import YouTube import pygame from pydub import AudioSegment import os PURPLE = '255, 0, 188' PATH = 'A:\\VS\\programms\\ai-help' TEMP_MP3_PATH = 'A:\\VS\\programms\\ai-help\\temp_audio.mp3' MUSIC_PATH = 'A:\\VS\\programms\\ai-help\\audio.wav' link = '' pygame.mixer.pre_init(44100, 16, 2, 4096) #frequency, size, channels, buffersize pygame.init() cap = cv2.VideoCapture(2) detector = cv2.QRCodeDetector() def download(): try: yt = YouTube(link) except: print('Connection error') try: mp3_stream = yt.streams.filter(only_audio=True).first() mp3_stream.download(output_path=PATH,filename='temp_audio.mp3') # MP3转WAV audio = AudioSegment.from_mp3(TEMP_MP3_PATH) audio.export(MUSIC_PATH, format="wav") # 删除临时文件 os.remove(TEMP_MP3_PATH) print('download and convert complete') except: print('error downloading or converting audiofile') def play(): pygame.mixer.music.load(MUSIC_PATH) pygame.mixer.music.play() # 移除多余参数 print('now playing')
额外注意事项
- 确保pygame支持当前使用的音频格式,MP3格式需pygame完整版本支持;
- 若调整采样率,需保证转换后的音频参数与
pygame.mixer.pre_init设置一致; - 检查文件路径是否正确,避免因路径问题导致加载失败。
内容的提问来源于stack exchange,提问作者B3Crazy
相关产品推荐
相关产品推荐

