簡體   English   中英

Python - 如何在不互相干擾的情況下多次播放相同的聲音?

[英]Python - How can I play the same sound multiple times without them interrupting each other?

我需要制作一個程序,在其中播放音頻文件,並且在音頻文件的持續時間中途將再次播放該文件,但它不會切斷尚未完成的文件,因此同一個文件將播放兩個一次只用不同的開始時間

我試過使用多個庫,如 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,)

simpleaudio支持音頻的並發播放。 我們使用pydub來輕松訪問音頻段長度(盡管您可以通過一些努力從簡單的音頻中獲得相同的長度)。 pydub 還可以使用pydub.playback._play_with_simpleaudio()播放簡單的音頻(這使我們可以同時播放 ,這使代碼更容易。

這是一個工作示例。 我拿了兩個不同的音頻文件來檢查/說明第二個音頻片段在第一個音頻片段中途完成后開始。

#!/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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM