7

如何在 Python 代码中停止通过 playaudio 模块播放音频?我播放过音乐,但我无法停止那种音乐。我怎样才能阻止它?

playsound.playsound("name_of_file")
4

6 回答 6

12

您可以使用 multiprocessing 模块将声音作为后台进程播放,然后随时终止:

import multiprocessing
from playsound import playsound

p = multiprocessing.Process(target=playsound, args=("file.mp3",))
p.start()
input("press ENTER to stop playback")
p.terminate()
于 2020-04-12T21:40:55.403 回答
7

Playsound是一个播放声音的单一功能模块,仅此而已。这似乎意味着它也不会停止播放声音。从他们自己的文档中:

playsound 模块只包含一件事 - 函数(也称为)playsound。

就个人而言,我喜欢使用pyaudio。以下代码改编自此处的示例。该代码播放音频并将空格键设置为暂停/播放按钮。

import pyaudio
import wave
import time
from pynput import keyboard

paused = False    # global to track if the audio is paused
def on_press(key):
    global paused
    print (key)
    if key == keyboard.Key.space:
        if stream.is_stopped():     # time to play audio
            print ('play pressed')
            stream.start_stream()
            paused = False
            return False
        elif stream.is_active():   # time to pause audio
            print ('pause pressed')
            stream.stop_stream()
            paused = True
            return False
    return False


# you audio here
wf = wave.open('audio\\songs\\And_Your_Bird_Can_Sing_mp3_2_wav.wav', 'rb')

# instantiate PyAudio
p = pyaudio.PyAudio()

# define callback
def callback(in_data, frame_count, time_info, status):
    data = wf.readframes(frame_count)
    return (data, pyaudio.paContinue)

# open stream using callback
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True,
                stream_callback=callback)

# start the stream
stream.start_stream()

while stream.is_active() or paused==True:
    with keyboard.Listener(on_press=on_press) as listener:
        listener.join()
    time.sleep(0.1)

# stop stream
stream.stop_stream()
stream.close()
wf.close()

# close PyAudio
p.terminate()
于 2019-08-05T00:56:42.463 回答
4

在 Windows 上尝试: import winsound

winsound.PlaySound(r'C:\sound.wav', winsound.SND_ASYNC)

停止播放:

winsound.PlaySound(None, winsound.SND_PURGE)
于 2019-08-05T01:44:04.390 回答
1
#pip install pygame
from pygame import mixer
import time
mixer.init() #Initialzing pyamge mixer

mixer.music.load('lovingly-618.mp3') #Loading Music File

mixer.music.play() #Playing Music with Pygame

time.sleep(5)


mixer.music.stop()
于 2021-04-20T19:35:43.700 回答
0

这是一个更简单的方法:

wmp = win32com.client.dynamic.Dispatch("WMPlayer.OCX")
wmp.settings.autoStart = True
wmp.settings.volume = 100
wmp.URL = file
while globals()["allowSound"]:
    PumpWaitingMessages()

您可以从另一个线程更改 globals()["allowSound"] 并在音频结束时将其设置为 false(您可以使用 wmp.durationString 获取音频的长度)

以下是有关此的更多信息:Windows Media Player COM 自动化适用于 VBS,但不适用于 Python

虽然这不使用 playsound 模块,但它是一个不错的选择。

于 2021-03-17T20:46:09.603 回答
0

程序成功执行后,音频文件将开始播放。现在单击终端,一旦看到光标,输入Ctrl+C,它将带您离开终端,音频也将停止播放。

使用的编程指令:

from playsound import playsound

playsound('//path//to//a//sound//file//you//want//to//play.mp3')
于 2021-06-15T08:42:13.913 回答