Liệu có thể load tất cả các file music một lúc, sau đó play 1 số file được không?

Mình muốn hỏi là liệu có thể load tất cả các file music một lúc rồi chỉ khi nào cần đến file nào thì mình mới play file đó được ko (Chứ không cần phải lập lại lệnh load rồi mới play). VD là mình có 2 file music cần chơi mình muốn load cả 2 file music ở ngoài vòng lập rồi trong vòng lập khi mình cần dùng file nào thì mình chỉ cần gõ lệnh pygame.mixer.music.play(…) hoặc lệnh nào đó để python play đúng bài nhạc đó mà không cần phải load lại ko. Mong mọi người giúp đỡ ạ

Việc load sẵn file audio khá đơn giản, chỉ cần tạo ra một Sound object bằng pygame.mixer.Sound(đường dẫn file), khi cần play thì chỉ cần dùng method play() của nó (giống giống pygame.mixer.music.play) là xong.

Ý bạn là load tất cả cùng một lúc? Cái này thì bạn tìm hiểu về lập trình bất đồng bộ trong Python.

3 Likes

MÌnh không có sẵn file audio để viết thử code, nhưng theo mình hiểu ý của bạn,thì bạn có thể tham khảo qua 3 links này.

https://classes.engineering.wustl.edu/ese205/core/index.php?title=Playing_multiple_sounds_at_once

5 Likes

Mình hơi khó giải thích một chút nhưng ý mình là thay vì mình muốn tìm cách code được như ở dưới

pygame.mixer.music.load('1.mp3')
pygame.mixer.music.load('2.mp3')
while True:
    if ...:
        # ở đây mình muốn play bài 1
    if ...:
        # ở đây mình muốn play bài 2

thay vì mình phải gõ:

while True:
    if ... :
       pygame.mixer.music.load('1.mp3')
       pygame.mixer.music.play()
    if ... :
       pygame.mixer.music.load('2.mp3')
       pygame.mixer.music.play()
1 Like

Nếu đã load sẵn một file audio trước đó thì khi gọi pygame.mixer.music.load(địa chỉ file mới) thì nó sẽ load cái file mới, ghi đè lên dữ liệu cái cũ (trong RAM), thành ra:

pygame.mixer.music.load('1.mp3')
pygame.mixer.music.load('2.mp3')

đã load file 2.mp3, ghi đè lên dữ liệu file 1.mp3 trong RAM.

Ví dụ dùng cách mình nói ở trên, gần giống cái bạn yêu cầu:

music_loader = pygame.mixer.sound #ăn gian tí 😗
audio_1 = music_loader('1.mp3') #Lưu luôn trên RAM để khỏi phải load lại dữ liệu trong ổ cứng.
audio_2 = music_loader('2.mp3')
while True:
    if ...:
        audio_1.play()
    if ...:
        audio_2.play()

Ngoài ra, để trình bày nội dung đẹp hơn thì bạn nên dùng Markdown

Markdown là gì?

Cách post code bằng markdown:

4 Likes

Python thì càng phải dùng Markdown ấy chứ ko chẳng biết đâu mà lần :smiley:


Đây là lí do:

The difference between the music playback and regular Sound playback is that the music is streamed, and never actually loaded all at once.

Nên nếu bạn muốn lưu lại sử dụng tiếp thì dùng pygame.mixer.Sound là đúng rồi. À mà Sound không có MP3 (!) mà chỉ có OGG.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?