播放 .wav 文件指定秒数
我想在我的代码中播放一个.wav文件,播放的时间是随机的,然后再继续播放下一个文件。请问有什么好的方法吗?
我现在有以下代码:
#!/usr/bin/env python
从随机数库导入randint,导入时间库,导入pyaudio和wave库。
然后我用一个无限循环来做这件事:
每次循环,我会生成一个随机数,这个随机数用来表示.wav文件的名字,范围是1到45之间。然后我打印出这个随机数,告诉我现在要播放的是哪个文件。
接下来,我开始播放.wav文件:
我设置了一个叫chunk的变量,值是1024,这个是每次读取的数据块大小。
然后我打开对应的.wav文件,文件名是随机生成的数字加上.wav后缀。
接着,我创建一个音频流,用来播放声音。这个流会根据文件的格式、声道数和采样率来设置。
我读取文件中的数据,并开始播放:
只要还有数据,我就一直写入音频流中播放。
最后,当播放结束后,我会停止这个音频流,关闭它,并结束音频处理。
1 个回答
0
试试这个,虽然不确定它是不是干净的代码,但它确实能工作。
#!/usr/bin/env python
from random import randint
import time
import pyaudio
import threading
import multiprocessing
import wave
# play wav file
chunk = 1024
def playAudio(x):
f = wave.open(r"%d.wav" % x,"rb")
p = pyaudio.PyAudio()
stream = p.open(format = p.get_format_from_width(f.getsampwidth()),
channels = f.getnchannels(),
rate = f.getframerate(),
output = True)
data = f.readframes(chunk)
while data != '':
stream.write(data)
data = f.readframes(chunk)
stream.stop_stream()
stream.close()
p.terminate()
if __name__ == '__main__':
while True:
x = randint(1,45)
p = multiprocessing.Process(target=playAudio, args=(x,))
p.start()
time.sleep(5)
p.terminate()
p.join()