4

我只是为了好玩而编写一个小型 Python 游戏,并且我有一个功能可以完成开头的叙述。

我试图让音频在后台播放,但不幸的是 MP3 文件在功能继续之前先播放。

如何让它在后台运行?

import playsound

def displayIntro():
    playsound.playsound('storm.mp3',True)
    print('')
    print('')
    print_slow('The year is 1845, you have just arrived home...')

另外,有没有办法控制playsound模块的音量?

我使用的是 Mac,我并不热衷于使用 playsound。它似乎是我可以开始工作的唯一模块。

4

10 回答 10

17

只需更改TrueFalse(我使用 Python 3.7.1)

import playsound
playsound.playsound('storm.mp3', False)
print ('...')
于 2019-01-07T12:57:48.810 回答
13

在 Windows 中:

使用winsound.SND_ASYNC异步播放它们:

import winsound
winsound.PlaySound("filename", winsound.SND_ASYNC | winsound.SND_ALIAS )

停止播放

winsound.PlaySound(None, winsound.SND_ASYNC)

在 Mac 或其他平台上:

你可以试试这个Pygame/SDL

pygame.mixer.init()
pygame.mixer.music.load("file.mp3")
pygame.mixer.music.play()
于 2017-06-10T10:26:11.837 回答
3

好吧,你可以只使用 pygame.mixer.music.play(x):

#!/usr/bin/env python3
# Any problems contact me on Instagram, @vulnerabilties
import pygame

pygame.mixer.init()
pygame.mixer.music.load('filename.extention')
pygame.mixer.music.play(999)

# Your code here
于 2018-12-23T19:10:54.143 回答
3

Pygame中有一个名为mixer的库 您可以将MP3 文件添加到包含Python 脚本的文件夹中,并在其中放入如下代码:

from pygame import mixer

mixer.init()
mixer.music.load("mysong.mp3")
mixer.music.play()
于 2018-12-23T19:15:49.067 回答
2

一个很好的方法是使用 vlc。非常常见且受支持的库。

pip install python-vlc

然后写你的代码

import vlc

#Then instantiate a MediaPlayer object

player = vlc.MediaPlayer("/path/to/song.mp3")

#And then use the play method

player.play()

#You can also use the methods pause() and stop if you need.

player.pause()
player.stop

#And for the super fancy thing you can even use a playlist :)

playlist = ['/path/to/song1.mp3', '/path/to/song2.mp3', '/path/to/song3.mp3']

    for song in playlist:
        player = vlc.MediaPlayer(song)
        player.play()
于 2021-08-21T23:05:19.873 回答
1
from pygame import mixer

mixer.music.init()
mixer.music.load("audio.mp3") # Paste The audio file location 
mixer.play() 
于 2019-02-14T09:56:37.293 回答
1

你可以试试just_playback。这是我围绕miniaudio编写的一个包装器,它在后台播放音频,同时提供播放控制功能,如暂停、恢复、搜索和设置播放音量。

于 2021-03-12T11:08:21.743 回答
1

使用vlc

import vlc
player = None
def play(sound_file):
    global player
    if player is not None:
        player.stop()
    player = vlc.MediaPlayer("file://" + sound_file)
    player.play()
于 2021-06-07T19:43:54.770 回答
1

我使用了一个单独的线程来播放声音而不阻塞主线程。它也适用于 Ubuntu。

from threading import Thread
from playsound import playsound

def play(path):
    """
    Play sound file in a separate thread
    (don't block current thread)
    """
    def play_thread_function:
        playsound(path)

    play_thread = Thread(target=play_thread_function)
    play_thread.start()
于 2021-09-17T08:24:30.347 回答
1

这是一种重现相似长度声音的解决方案。这个解决方案对我有用,可以解决错误:

MCI 未打开或识别指定的设备。

这里遵循作为类方法的语法,但即使没有类,您也可以将其更改为工作。

导入这些包:

import multiprocessing
import threading
import time

定义这个函数:

def _reproduce_sound_nb(self, str_, time_s):
        def reproduce_and_kill(str_, time_sec=time_s):
            p = multiprocessing.Process(target=playsound, args=(str_,))
            p.start()
            time.sleep(time_sec)
            p.terminate()
        threading.Thread(target=reproduce_and_kill, args=(str_, time_s), daemon=True).start()
    

在主程序/方法中:

self._reproduce_sound_nb(sound_path, 3) # path to the sound, seconds after sound stop -> to manage the process end
于 2021-10-05T13:16:42.863 回答