pygame 모듈로 백그라운드에서 음원 반복재생하기

dev_joo·2025년 3월 5일
post-thumbnail

pygame -백그라운드에서 음원 반복 재생 코드

### 음악을 반복 재생
import pygame, threading, time
pygame.mixer.init()
# 음원 파일 경로
audio_file = 'PLAVE-03-RIZZ.mp3'
audio_file2 = 'PLAVE-02-Dash.flac'
pygame.mixer.music.load(audio_file)
pygame.mixer.music.load(audio_file2) # 마지막으로 불러온 파일로 재생된다.

# 스레드를 관리하는 변수
global music_thread_started
music_thread_started = False    
# 음악을 백그라운드에서 재생하는 함수
def play_music():
    global music_thread_started
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():  # 음악이 끝날 때까지 대기
        time.sleep(1)  # 1초마다 확인 (CPU 자원)
    music_thread_started = False

while True:
    if not music_thread_started:
        music_thread_started = True
        # 백그라운드 작업을 반복적으로 실행하려면 인스턴스 생성을 새로 해줘야 함 (RuntimeError: threads can only be started once)
        music_thread = threading.Thread(target=play_music) 
        music_thread.daemon = True
        music_thread.start()



음악 재생 관련 모듈

pygame.mixer: 게임 개발에서 가장 많이 사용되며, 다양한 오디오 파일 형식을 지원. 게임 관련 프로젝트에서 유용.
pydub: 오디오 변환 및 편집 기능이 강력하고, FLAC 파일을 지원
playsound: 가장 간단한 재생을 위한 라이브러리, 빠르고 간단한 오디오 재생을 원할 때
simpleaudio: WAV 파일을 재생하는 데 간편하고, 고급 제어도 가능
audioread: 다양한 형식의 오디오 파일을 디코딩할 수 있지만, 직접적인 재생 기능은 없음
moviepy (FFmpeg): 비디오 및 오디오 편집을 위한 강력한 도구로, 오디오 재생 기능 외에도 다양한 편집 기능을 제공

1. pygame.mixer

특징: pygame.mixer는 pygame 라이브러리의 일부로, 2D 게임 개발에 필요한 기능을 제공하면서 오디오 파일의 재생도 지원합니다. 다양한 오디오 파일 형식을 지원하며, 게임 개발에 많이 사용됩니다.

지원 포맷: WAV, MP3, OGG, FLAC (실제로 FLAC도 지원합니다)

사용 예시:

import pygame
pygame.mixer.init()
pygame.mixer.music.load("song.mp3")
pygame.mixer.music.play()

장점:

  • 게임 개발에 최적화되어 있음
  • 간단한 API
  • 다양한 형식 지원

단점:

  • 고급 오디오 처리 기능이 부족
  • GUI 애플리케이션에서 좀 더 복잡한 오디오 처리가 필요할 경우 한계가 있을 수 있음

2. pydub

특징: pydub은 매우 강력한 오디오 처리 라이브러리로, 다양한 형식의 오디오 파일을 변환, 트리밍, 결합, 필터링하는 등의 작업을 할 수 있습니다. pydub은 직접적으로 오디오를 재생하는 기능을 제공하지 않지만, playback 모듈을 사용하여 간단히 재생할 수 있습니다.

지원 포맷: MP3, WAV, FLAC, OGG, AIFF 등

사용 예시:

from pydub import AudioSegment
from pydub.playback import play

sound = AudioSegment.from_file("song.flac")
play(sound)

장점:

  • 오디오 파일 변환, 트리밍, 조합 등 다양한 기능 제공
  • FLAC 파일 지원

단점:

  • FLAC 파일 재생을 위해 pydub은 FFmpeg이나 libav에 의존
  • 직접적인 재생에 있어 다소 제한적일 수 있음

3. playsound

특징: playsound는 매우 간단한 오디오 파일 재생 라이브러리로, 단 한 줄의 코드로 오디오 파일을 재생할 수 있습니다. 주로 WAV나 MP3 파일을 재생하는 데 사용됩니다.

지원 포맷: MP3, WAV

사용 예시:

from playsound import playsound
playsound('song.mp3')

장점:
간단한 사용법
매우 가벼운 라이브러리
단점:
고급 오디오 기능이나 제어가 불가능 (예: 볼륨 조절, 일시정지 등)
지원하는 포맷이 제한적


4. simpleaudio

특징: simpleaudio는 오디오 파일을 매우 쉽게 재생할 수 있는 라이브러리입니다. WAV 파일을 직접 로드하고 재생할 수 있으며, 고급 기능도 제공합니다. FLAC 파일을 지원하지 않지만, WAV 형식에서 매우 간단하게 사용할 수 있습니다.

지원 포맷: WAV

사용 예시:

import simpleaudio as sa

wave_obj = sa.WaveObject.from_wave_file("song.wav")
play_obj = wave_obj.play()
play_obj.wait_done()

장점:

  • 간단한 오디오 재생
  • WAV 파일에 대한 고급 제어 가능 (예: 반복 재생, 볼륨 조절 등)

단점:

  • WAV만 지원
  • 다른 형식을 지원하는 라이브러리보다는 기능이 제한적

5. audioread

특징: audioread는 다양한 오디오 형식을 읽고 디코딩하는 라이브러리입니다. 이를 사용하여 오디오 파일을 재생하는 라이브러리와 결합할 수 있습니다. 자체적으로 오디오를 재생하지 않지만, 파일을 읽고 디코딩하는 데 유용합니다.

지원 포맷: MP3, FLAC, OGG 등

사용 예시:

import audioread

with audioread.audio_open("song.flac") as f:
    # 오디오 데이터를 처리하는 코드 작성
    pass

장점:

  • 여러 오디오 파일 형식을 지원
  • 파일 디코딩 기능

단점:

  • 직접적으로 재생 기능은 제공하지 않음
  • 추가적인 라이브러리와 결합이 필요

6. FFmpeg (via moviepy)

특징: moviepy는 비디오 및 오디오 편집을 위한 라이브러리로, FFmpeg를 백엔드로 사용하여 FLAC 파일을 포함한 다양한 포맷을 지원합니다. 오디오 재생뿐만 아니라 다양한 오디오 및 비디오 편집 기능도 제공합니다.

지원 포맷: MP3, FLAC, WAV, OGG 등

사용 예시:

from moviepy.editor import AudioFileClip

audio = AudioFileClip("song.flac")
audio.preview()

장점:

  • 고급 오디오 및 비디오 편집 기능
  • 다양한 형식 지원

단점:

  • 라이브러리가 무겁고 복잡함
  • 고급 편집 작업에 비해 단순한 재생에는 과할 수 있음

마무리


처음엔 playsound 모듈을 사용해 구현하려고 했는데 가지고있는 flac 파일이 지원되지 않아 gpt가 추천해 준 pygame 모듈을 사용하게 되었다. 그런데 나중에 알아보니 이외에도 많은 모듈이 있었다. pygame은 게임관련 라이브러리인만큼 목적에 맞는 모듈 선정에 신중을 가하자💖🔥

profile
풀스택 연습생. 끈기있는 삽질로 무대에서 화려하게 데뷔할 예정 ❤️🔥

0개의 댓글