Python-如何在不让它们相互干扰的情况下多次播放相同的声音?

Python-如何在不让它们相互干扰的情况下多次播放相同的声音?,python,python-3.x,windows,audio,pygame,Python,Python 3.x,Windows,Audio,Pygame,我需要制作一个程序,其中一个音频文件将播放,在音频文件播放的中途,该文件将再次播放,但它不会切断尚未完成的文件,因此同一个文件将同时播放两次,只是开始时间不同 我尝试过使用多个库,如pygame、winsound和pyglet,但据我所知,它们都不允许这样做 编辑:我再次尝试使用pygame,但听起来不对。我想这是因为pygame的延迟 import pygame import time import threading pygame.mixer.pre_init(frequency=4410

我需要制作一个程序,其中一个音频文件将播放,在音频文件播放的中途,该文件将再次播放,但它不会切断尚未完成的文件,因此同一个文件将同时播放两次,只是开始时间不同

我尝试过使用多个库,如pygame、winsound和pyglet,但据我所知,它们都不允许这样做

编辑:我再次尝试使用pygame,但听起来不对。我想这是因为pygame的延迟

import pygame
import time
import threading

pygame.mixer.pre_init(frequency=44100)
pygame.mixer.init()

sound1 = pygame.mixer.Sound("Assets\\Blip.wav")
sound2 = pygame.mixer.Sound("Assets\\Blip.wav")
print(sound1.get_length())
half = 0.141/2

def play(ch,sound):
    pygame.mixer.Channel(ch).play(sound,loops=-1)

time.sleep(5)
t1 = threading.Thread(target=play,args=(0,sound1,))
t1.start()
time.sleep(half)
play(1,sound2,)
支持音频的并发播放。我们使用它可以方便地访问音频段长度(尽管您可以通过一些努力从简单的音频中获得相同的长度)。pydub还可以播放简单的音频(这让我们可以同时播放),这使得代码更简单

这里有一个有效的例子。我用两个不同的音频文件来检查/说明第二个音频段是在第一个音频段完成一半后开始的

#!/usr/local/bin/python3

from pydub import AudioSegment
from pydub.playback import _play_with_simpleaudio

import threading
import time

def play(sound):
    play_obj = _play_with_simpleaudio(sound)

sound1 = AudioSegment.from_wav("Audio_1.wav")
sound2 = AudioSegment.from_wav("Audio_2.wav")

half = sound1.duration_seconds /2
t1 = threading.Thread(target=play,args=(sound1,))
t1.start()
time.sleep(half)
play(sound2)
time.sleep(1)

因为pygame sound使用线程,所以即使不使用
Thread
,我也可以听到两种声音。如果不使用
线程
,可能听起来会更好。或者,也许这听起来永远不会好,因为你期待着一些不能这样做的事情。顺便说一句:在LinuxMint19.2、Python3.7.5、PyGame1.9.6上测试过,我试过了,但这两个声音并不重叠,它们似乎相互覆盖。在我的例子中,两个声音相互“重叠”。我能听到两种截然不同的声音,第一种声音放了一半。即使使用相同的wav文件,我也能听到第二个文件在第一个文件播放时踢进来<代码>时间。睡眠将控制第二个文件的播放时间。可以更改为
sound2.duration_秒
,以便第二个文件完全播放。如果没有,你能详细说明你的要求吗?