虽然pydub没有直接停止audioSegment播放的方法,但根据this documentation的说法,它将音频分成半秒钟的块,以便于键盘中断。在

因此,如果我们获取音频并在一个try-except块中运行while loop,我们应该能够使用“Ctrl+c”中断播放

下面是一个工作示例代码,它根据here中的文档将音频平移到左声道或右声道,然后使用上述逻辑在“Ctrl+c”上停止播放from pydub import AudioSegment

from pydub.playback import play
song = AudioSegment.from_wav("music.wav")
# pan the sound 15% to the right
panned_right = song.pan(+0.15)
# pan the sound 50% to the left
panned_left = song.pan(-0.50)
#Play panned left audio
while True:
try:
play(panned_left)
except KeyboardInterrupt:
print "Stopping playing"
break

我们从播放循环中断时得到空闲会话提示。你可以根据自己的需要量身定做。在

^{pr2}$

这使您可以轻松地在pydub内使用内置的平移方法,还可以中断播放的中间流。希望这能帮你解决问题。在

编辑-1

上述解决方案可能会遇到while循环将无限期播放的问题(如果您不中断它)。它可能只对测试有用。在

另一个选择是使用pythonmultiprocess模块生成一个进程,该进程在不需要时播放音频片段terminate。这样可以在播放过程中提供更多的控制。在

这里有一个例子。在from multiprocessing import Process

def play_audio(seg):
play(seg)
if __name__ == '__main__':
p = Process(target=play_audio, args=(panned_left,))
p.start()

当您需要停止音频时,只需在IDE或程序中调用p.terminate()。在Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32

Type "copyright", "credits" or "license()" for more information.

>>> ================================ RESTART ================================

>>>

>>> p.terminate()

>>>