簡體   English   中英

有沒有辦法在 pygame 中一次播放多個 mp3 文件?

[英]Is there a way to play multiple mp3 files at once in pygame?

我正在嘗試播放 2 個 mp3 文件,但每次播放另一個文件時,第一個都會停止。 每當我使用頻道時,游戲最終都會崩潰。

這是我的代碼:

pygame.mixer.music.load('music.mp3')
pygame.mixer.music.play(-1)
#insert generic if statement here
pygame.mixer.music.load("differentmusic.mp3')
pygame.mixer.music.play()

有什么方法可以允許同時播放 2 個 mp3 文件,還是必須將它們全部轉換為 wav?

就這樣,這個問題有一個正式的答案......

使用 PyGame 的頻道無法同時播放多個MP3聲音文件。 它們可以使用pygame.mixer.music函數集單獨播放。

但是,絕對可以將您的聲音文件轉換為OGG 聲音格式- 其壓縮方式與 MP3 或未壓縮的 WAV 格式非常相似。 顯然,如果您想編寫 MP3 音樂播放器,這不是一個解決方案,但對於游戲來說,這是一個次要的要求。 Audacity等免費軟件可以輕松轉換聲音格式。

我已經修改了評論鏈接中的示例,不使用var模塊。 就像鏈接的代碼一樣,它會不斷播放下雨聲,然后按h會在輸出中添加汽車喇叭meep-meep

import pygame

# Window size
WINDOW_WIDTH    = 400
WINDOW_HEIGHT   = 400
WINDOW_SURFACE  = pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.RESIZABLE

DARK_BLUE = (   3,   5,  54)

### initialisation
pygame.init()
pygame.mixer.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ), WINDOW_SURFACE )
pygame.display.set_caption("Multi Sound")

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

# Rain sound from: https://www.freesoundslibrary.com/sound-of-rain-falling-mp3/ (CC BY 4.0)
rain_sound = pygame.mixer.Sound( 'rain-falling.ogg' )
channel1.play( rain_sound, -1 )   # loop the rain sound forever

# Car Horn sound from: https://www.freesoundslibrary.com/car-horn-sound-effect/ (CC BY 4.0)
horn_sound = pygame.mixer.Sound( 'car-horn.ogg' )

### Main Loop
clock = pygame.time.Clock()
done = False
while not done:

    # Handle user-input
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            done = True
        elif ( event.type == pygame.KEYUP ):
            if ( event.key == pygame.K_h ):
                if ( not channel2.get_busy() ):                          # play horn if not already playing
                    channel2.play( horn_sound )
                    print( 'meep-meep' )

    # Window just stays blue
    window.fill( DARK_BLUE )
    pygame.display.flip()

    # Clamp FPS
    clock.tick_busy_loop(60)

pygame.quit()

暫無
暫無

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

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