2016-06-25 8 views
0

Ich versuche, mehrere Sounds gleichzeitig in Pygame zu spielen. Ich habe eine Hintergrundmusik und möchte einen Regensound, um kontinuierlich zu spielen und gelegentliche Donnergeräusche zu spielen.Wie weisen Sie Kanälen in Pygame Sounds zu?

Ich habe folgendes versucht, aber mein Regengeräusch hört auf, wenn der Donnerschall spielt. Ich habe versucht, Kanäle zu verwenden, aber ich weiß nicht, wie ich wählen soll, von welchem ​​Kanal aus gespielt wird oder ob zwei Kanäle gleichzeitig abgespielt werden können.

 var.rain_sound.play() 

     if random.randint(0,80) == 10:     
      thunder = var.thunder_sound     
      thunder.play() 

Vielen Dank für Ihre Hilfe

Antwort

1

Sie nur einen Ton zu einem Zeitpunkt pro Kanal spielen können, aber Sie können mehrere Kanäle spielen. Wenn Sie die Kanäle nicht benennen, wählt pygame einen nicht verwendeten Kanal aus, um einen Sound abzuspielen. Standardmäßig verfügt Pygame über 8 Kanäle. Sie können einen Kanal angeben, indem Sie ein Channel-Objekt erstellen. Um einen Sound unbegrenzt zu loopen, können Sie das tun, indem Sie einen Sound mit dem Argument loops = -1 abspielen. Sie finden die Dokumentation für diese Klassen und Methoden unter http://www.pygame.org/docs/ref/mixer.html
Ich würde auch empfehlen, die integrierte Modulzeit zu verwenden, insbesondere die Funktion sleep(), die die Ausführung für eine bestimmte Zeit in Sekunden unterbricht. Das liegt daran, dass pygame.mixer-Funktionen, die einen Sound abspielen, so lange zurückkommen, bis der Sound endet. Wenn Sie versuchen, einen 2. Sound auf dem gleichen Kanal zu spielen, wird der 1. Sound gestoppt, um den 2. Sound zu spielen. Um sicherzustellen, dass Ihr Donner-Sound bis zum Ende gespielt wird, ist es am besten, die Ausführung während der Wiedergabe anzuhalten. Ich setze die sleep() Zeile außerhalb der if-Anweisung, da in der if-Anweisung die sleep() Zeile die Ausführung nicht pausiert, wenn der Donner-Sound nicht gespielt wird, also würde die Schleife sehr schnell zum nächsten Donner zurückkehren Ton, der viel häufiger ausgegeben wird als "gelegentlich".

import pygame 
import random 
import time 
import var 

# initialize pygame.mixer 
pygame.mixer.init(frequency = 44100, size = -16, channels = 1, buffer = 2**12) 
# init() channels refers to mono vs stereo, not playback Channel object 

# create separate Channel objects for simultaneous playback 
channel1 = pygame.mixer.Channel(0) # argument must be int 
channel2 = pygame.mixer.Channel(1) 

# plays loop of rain sound indefinitely until stopping playback on Channel, 
# interruption by another Sound on same Channel, or quitting pygame 
channel1.play(var.rain_sound, loops = -1) 

# plays occasional thunder sounds 
duration = var.thunder_sound.get_length() # duration of thunder in seconds 
while True: # infinite while-loop 
    # play thunder sound if random condition met 
    if random.randint(0,80) == 10: 
     channel2.play(var.thunder_sound) 
    # pause while-loop for duration of thunder 
    time.sleep(duration) 
+0

Sie können auch mit 'pygame.mixer.Channel.get_busy()' prüfen, ob ein bestimmter Kanal gerade mit der Wiedergabe eines Sounds beschäftigt ist. – Isa

Verwandte Themen