【问题标题】:Is there a way to play multiple mp3 files at once in pygame?有没有办法在pygame中一次播放多个mp3文件?
【发布时间】:2020-01-15 06:02:55
【问题描述】:

我正在尝试播放 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?

【问题讨论】:

  • 您能否更新您的问题以说明如何将mp3 转换为wav允许同时播放。
  • 这能回答你的问题吗? How to assign sounds to channels in Pygame?
  • @Kingsley 那需要 var????
  • 显然你需要 wav 才能使用 pygame.mixer.Sound(),这显然是使用 pygame 播放双重声音所必需的

标签: python pygame


【解决方案1】:

所以这个问题有一个正式的答案......

无法通过 PyGame 使用通道同时播放多个 MP3 声音文件。它们可以使用pygame.mixer.music 函数集单独播放。

但是,绝对可以将您的声音文件转换为OGG sound format - 它的压缩方式与 MP3 或未压缩的 WAV 格式非常相似。显然,如果您想编写 MP3 音乐播放器,这不是一个解决方案,但对于游戏来说,这是一个次要的要求。 Audacity 等免费软件可以轻松转换声音格式。

我已将comment link 中的示例改编为不使用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()

【讨论】:

  • 当我这样做时,它说我的 ogg 文件无法打开。我很确定这是因为它位于错误的位置,但这里是供参考的确切措辞:pygame.error: Unable to open file 'Giorno.ogg'
  • 你能解释一下我必须如何组织我的文件才能让它工作吗?
  • 在本例中,.ogg 文件与代码位于同一目录中,我从该目录 运行程序。我下载了 .mp3 文件(来自代码中注释的链接),使用声音编辑程序“Audacity”将它们保存为 .ogg。通常,如果在给定路径中找不到文件,或者它不是 .ogg 文件,您会收到此错误。
  • 不能把文件末尾的.mp3改成.ogg吗?
  • @BenDover - 内部声音数据的布局没有完全不同。它需要转换。就像 .DOC 和 .PDF,它们看起来可能相同,但内部却完全不同。
猜你喜欢
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多