【问题标题】:Audio playback drops the beginning of the sound when played in a loop循环播放时,音频播放会降低声音的开头
【发布时间】:2022-12-31 19:46:46
【问题描述】:

我正在尝试循环播放音频文件(此示例重复 3 次)。音频文件很短。只是有人说“你好,世界”。

import pygame


def wait_for_player():
    while pygame.mixer.music.get_busy():
        continue


def play_file(filename):
    pygame.init()
    pygame.mixer.music.load(filename)   
    for i in range(3):
        pygame.mixer.music.play()       
        wait_for_player()


if __name__ == '__main__':
    play_file('hello_world.mp3')

我听到的声音是这样的:

"Hello, world"
"o, world"
"o, world"

也就是说,在随后的重播中,音频会在开头被短暂剪辑。在不同的设备上,相同的代码和相同的音频文件听起来像这样:

"o, world"
"Hello, world"
"Hello, world"

这些设备中的每一个都使用蓝牙——一个在 Raspberry Pi 上,另一个在 Windows 笔记本电脑上。我在其他几台没有蓝牙的设备上再次尝试,每次都能正确播放音频。所以可能是蓝牙问题。

我尝试在“你好”之前填充一两秒的静音,但它没有任何区别(除了间隔每次播放之间的时间 - 音频仍然被剪辑,因为它没有填充静音)。

我的下一步是添加一段(希望如此)难以察觉的音频来“启动泵”,但我宁愿使用有效的代码也不愿使用变通方法。我能以编程方式做些什么来确保每次都能播放整个声音吗?

预计到达时间:这是我的解决方法。我将 this gist 复制到 tone.py 中。它环绕着 mixer.Sound,使演奏音符变得容易。下面修改后的代码以低音量播放低频音符。这足以“启动泵”,它现在适用于所有设备。这仍然是一种解决方法,所以希望有人能给出更好的答案——但如果必须的话,我可以接受这个。

from time import sleep
import pygame
from tone import Note


def wait_for_player():
    while pygame.mixer.music.get_busy():
        continue


def play_file(filename):
    pygame.init()
    Note(0.08, volume=0.01).play(-1)
    sleep(1)
    pygame.mixer.music.load(filename)
    pygame.mixer.music.play(loops=3)
    wait_for_player()


if __name__ == '__main__':
    play_file('hello_world.mp3')

【问题讨论】:

  • 你看到pygame.mixer.music.play有一个循环参数了吗?你可以试试pygame.mixer.music.play(loops=3)pygame.org/docs/ref/music.html#pygame.mixer.music.play
  • @Flursch 我不知道这个 - 谢谢!虽然它没有解决问题,但使代码更漂亮 :-) 按照您喜欢的文档,我还了解到 pygame.mixer.music.play(-1) 永远循环(这实际上是我想做的)
  • 旁注:您可以在代码开头的 while 循环中添加一些延迟以节省资源。

标签: python audio pygame raspberry-pi bluetooth


【解决方案1】:

pygame.mixer.music.play 有一个 loops 参数:

loops 是一个可选的整型参数,默认为0,表示重复播放音乐的次数。如果此参数设置为 -1,则音乐无限重复。

将循环设置为 -1 以永远播放音乐:

pygame.mixer.music.play(-1)

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多