使用 Python 播放音频并获取当前播放秒数?
Play audio and get current second of playback using Python?
我正在与 python 开发语音界面。我在播放音频时遇到问题。
在raspberry pi上用什么黑背简单的mp3文件?
我需要播放音频,在播放结束前2秒我需要开始另一个任务(打开麦克风流)
我该如何存档?可能的问题是我还没有找到读取当前播放秒数的方法。如果我能读懂这个,我会在当前时间为 audiolength - 2 秒时开始一个新线程。
我希望你能帮助我或者有这方面的经验。
我找到了解决方法。
PyAudio 提供了一种逐块播放音频的方法。通过它,您可以读取当前块并将其与音频的整体大小进行比较。
class AudioPlayer():
"""AudioPlayer class"""
def __init__(self):
self.chunk = 1024
self.audio = pyaudio.PyAudio()
self._running = True
def play(self, audiopath):
self._running = True
#storing how much we have read already
self.chunktotal = 0
wf = wave.open(audiopath, 'rb')
stream = self.audio.open(format =self.audio.get_format_from_width(wf.getsampwidth()),channels = wf.getnchannels(),rate = wf.getframerate(),output = True)
print(wf.getframerate())
# read data (based on the chunk size)
data = wf.readframes(self.chunk)
#THIS IS THE TOTAL LENGTH OF THE AUDIO
audiolength = wf.getnframes() / float(wf.getframerate())
while self._running:
if data != '':
stream.write(data)
self.chunktotal = self.chunktotal + self.chunk
#calculating the percentage
percentage = (self.chunktotal/wf.getnframes())*100
#calculating the current seconds
current_seconds = self.chunktotal/float(wf.getframerate())
data = wf.readframes(self.chunk)
if data == b'':
break
# cleanup stream
stream.close()
def stop(self):
self._running = False
希望对某人有所帮助,
亚历克斯
尝试just_playback。这是我围绕 miniaudio 编写的包装器,它提供播放控制功能,如暂停、恢复、搜索、获取当前播放位置和设置播放音量。
我正在与 python 开发语音界面。我在播放音频时遇到问题。
在raspberry pi上用什么黑背简单的mp3文件?
我需要播放音频,在播放结束前2秒我需要开始另一个任务(打开麦克风流) 我该如何存档?可能的问题是我还没有找到读取当前播放秒数的方法。如果我能读懂这个,我会在当前时间为 audiolength - 2 秒时开始一个新线程。
我希望你能帮助我或者有这方面的经验。
我找到了解决方法。 PyAudio 提供了一种逐块播放音频的方法。通过它,您可以读取当前块并将其与音频的整体大小进行比较。
class AudioPlayer():
"""AudioPlayer class"""
def __init__(self):
self.chunk = 1024
self.audio = pyaudio.PyAudio()
self._running = True
def play(self, audiopath):
self._running = True
#storing how much we have read already
self.chunktotal = 0
wf = wave.open(audiopath, 'rb')
stream = self.audio.open(format =self.audio.get_format_from_width(wf.getsampwidth()),channels = wf.getnchannels(),rate = wf.getframerate(),output = True)
print(wf.getframerate())
# read data (based on the chunk size)
data = wf.readframes(self.chunk)
#THIS IS THE TOTAL LENGTH OF THE AUDIO
audiolength = wf.getnframes() / float(wf.getframerate())
while self._running:
if data != '':
stream.write(data)
self.chunktotal = self.chunktotal + self.chunk
#calculating the percentage
percentage = (self.chunktotal/wf.getnframes())*100
#calculating the current seconds
current_seconds = self.chunktotal/float(wf.getframerate())
data = wf.readframes(self.chunk)
if data == b'':
break
# cleanup stream
stream.close()
def stop(self):
self._running = False
希望对某人有所帮助, 亚历克斯
尝试just_playback。这是我围绕 miniaudio 编写的包装器,它提供播放控制功能,如暂停、恢复、搜索、获取当前播放位置和设置播放音量。