python:如何播放 .spx 声音文件

FFmpeg 可以将.spx文件转码成.wav文件,基于 pyaudio 和 wave 实现播放.wav 声音文件。

where ffmpeg
D:\FFmpeg\64\ffmpeg.exe

pip install pyaudio
pip install wave

编写 play_spx.py  如下

# -*- coding: utf-8 -*-
""" 播放 *.spx 音频文件 """
import os
import sys
import time
from tkinter import filedialog
import pyaudio
import wave

# main()
f1 = ''
if len(sys.argv) ==1:
    filetypes = [('spx file','.spx'),('ogg file','.ogg')]
    f1 = filedialog.askopenfilename(initialdir='D:/Music', filetypes=filetypes)
elif len(sys.argv) ==2:
    f1 = sys.argv[1]
else:
    print('usage: python play_spx.py file1.spx')
    sys.exit(1)

if not os.path.exists(f1):
    print(f"{f1} is not exists.")
    sys.exit(2)

fn,ext = os.path.splitext(f1)
if ext.lower() not in ('.spx','.ogg'):
    print('ext is not (.spx , .ogg )')
    sys.exit(2)

f2 = fn +'.wav'
if not os.path.exists(f2):
    os.system(r"D:\FFmpeg\64\ffmpeg.exe -i %s -acodec pcm_s16le %s" % (f1,f2))
else:
    print(f"{f2} is exists")

# 初始化 PyAudio
p = pyaudio.PyAudio()
        
def play_wav(filename):
    # 打开 WAV 文件
    wf = wave.open(filename, 'rb')
    # 打开音频流
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                         channels=wf.getnchannels(),
                         rate=wf.getframerate(), output=True)

    chunk = 1024
    data = wf.readframes(chunk)
    while data :
        stream.write(data)
        data = wf.readframes(chunk)

    stream.stop_stream()
    stream.close()
    wf.close()

print(f2)
#time.sleep(1)
time1 = time.time()
# 播放音频
play_wav(f2)
time2 = time.time()
print("run time: %.3f s" % (time2-time1))

运行 python play_spx.py 

参阅:pyaudio:基于pyaudio和pydub 实现一个简易音乐播放器播放wav、mp3等格式音乐

你可能感兴趣的:(python,python,pyaudio,ffmpeg)