2016-09-16 7 views
0

music.fadeout()に問題があります。私が理解しているように、音楽はフェードアウト後に停止されます。なぜ、以下のコードでは、フェードアウト中にサウンドを再生できますが、後で再生することはできませんか?サウンドはフェードアウト後にミックスされています。 mixer.get_busy()はTrueを返します。フェードアウト完了後にmusic.fadeout()がサウンドをブロックするように見える

.fadeout()の代わりにmusic.stop()を使用すると、音楽が停止した後でサウンドが再生されます。

私はここで何が欠けていますか?私は(あなたの答えで覆われていたとは思わない

if not game_over: 
     if music_on: 
      pygame.mixer.music.fadeout(3000) 
      fadeout_start = ticks 
      #pygame.mixer.music.stop() 
     if fadeout_start + 3000 < ticks: 
      pygame.mixer.music.stop() 
     music_on = False 

EDIT

私の特定の問題テッドが、私はそれを解決するためにこれをやった一方

if not game_over: 
     if music_on: 
      pygame.mixer.music.fadeout(3000) 
      #pygame.mixer.music.stop() 
     music_on = False 

私は音楽(K_1)を起動し、それを停止して(K_2)、次にサウンドオブジェクト(K_5)を再生すると、 、mixer.get_busyはTrueで、サウンドは聞こえるように再生されます。しかし、上記を繰り返してもK_2を使わずに音楽(K_3)をフェードアウトすると、mixer.get_busyはTrueですが、可聴音はありません。

Pydocsは、単純なmusic.stop()と同じ方法でフェードアウト後に音楽が停止することを示唆しているようです。

import pygame 
from pygame.locals import * 
import sys 

pygame.init() 
pygame.mixer.init() 
pygame.display.set_mode((200,200)) 
pygame.display.set_caption("Sound tester") 

clock = pygame.time.Clock() 

pygame.mixer.music.load("theme.mid") 
sound = pygame.mixer.Sound("missile.wav") 

playing = pygame.mixer.get_busy() 



while True: 
    clock.tick(30) 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == KEYUP: 
      if event.key == pygame.K_1: 
       pygame.mixer.music.play(-1) 
      elif event.key == K_2: 
       pygame.mixer.music.stop() 
      elif event.key == K_3: 
       pygame.mixer.music.fadeout(2000) 
      elif event.key == K_4: 
       pygame.mixer.music.stop() 
      elif event.key == K_5: 
       sound.play(-1) 
      elif event.key == K_6: 
       pygame.mixer.stop() 

    music_playing = pygame.mixer.music.get_busy() 
    if music_playing: 
     print("music playing") 
    else: 
     print("no music") 

    sound_playing = pygame.mixer.get_busy() 
    if sound_playing: 
     print("Sound playing") 
    else: 
     print("no sound") 
+0

フェードアウトは、フェードアウトの後、 'pygame.mixer.music.stop()'のような音楽を止めます。申し訳ありませんが、あなたの問題を再現することはできません。私が音楽をフェードアウトするとき、私はまだ音楽が消えている間に音を止めて止めることができます。 –

+0

ああ、drat。とにかく返信をありがとうございます。 –

+0

音楽とサウンドファイルが何かあなたが共有したいと思っているのであれば、それらに問題があるかどうかをテストできますか? –

答えて

1

機能pygame.mixer.music.fadeout(3000)は、ボリュームを3秒間フェードアウトして音楽を停止します。音楽が停止したら、もう一度それを開始する必要があります。あなたのコードはフェードアウトした後に音楽を再生するべきではなく、あなたのプログラムの他の論理的なエラーのためにあるはずです(たぶんmusic_on = Trueを設定していますか?

はここにそれがどのように機能するかを実証するいくつかのコード:ことであれば

import pygame 
pygame.init() 
pygame.display.set_mode((250, 200)) 
clock = pygame.time.Clock() 

pygame.mixer.music.load("music.wav") 
playing = pygame.mixer.music.get_busy() 

while 1: 
    clock.tick(30) 

    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_f: 
       pygame.mixer.music.fadeout(3000) 
       print("Fading out") 
      elif event.key == pygame.K_p: 
       pygame.mixer.music.play(-1) 
       print("Play") 
      elif event.key == pygame.K_s: 
       pygame.mixer.music.stop() 
       print("Stop") 
     elif event.type == pygame.QUIT: 
      quit() 

    if playing != pygame.mixer.music.get_busy(): 
     playing = pygame.mixer.music.get_busy() 
     if playing: 
      print("Music is playing") 
     else: 
      print("Music is not playing") 

しかし、あなたはpygame.mixer.Soundオブジェクトを意味「音」は、それは完璧な理にかなっています。 pygame.mixerはサウンドを処理し、pygame.mixer.musicモジュールは音楽の再生を処理します。これらは別々です(密接に結びついていますが)。 pygame.mixerを停止すると、停止中に音が停止しますpygame.mixer.musicは音楽を停止します。

以下のコードを試してください。 1を押すと音楽と音声の両方が再生され、すぐにpygame.mixerが停止し、2を押すと音楽と音声の両方が開始され、すぐにpygame.mixer.musicが停止します。あなたはここで、彼らは別のものを止めるべきです。

import pygame 
pygame.init() 
pygame.display.set_mode((250, 200)) 
clock = pygame.time.Clock() 

pygame.mixer.music.load("music.wav") 
sound = pygame.mixer.Sound("sound.wav") 

playing = pygame.mixer.music.get_busy() 

while 1: 
    clock.tick(30) 

    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_1: 
       sound.play(-1) 
       pygame.mixer.music.play(-1) 
       pygame.mixer.stop() 
      elif event.key == pygame.K_2: 
       sound.play(-1) 
       pygame.mixer.music.play(-1) 
       pygame.mixer.music.stop() 
     elif event.type == pygame.QUIT: 
      quit() 
関連する問題