음악 파일 재생하기 (sound, music)
페이지정보
내용
음악 파일 재생하기 (sound, music)
pygame에서는 mixer에서 sound 기능을 제공한다. 또한 music 모듈을 통해서 오디오 스트리밍을 제공한다.
이번 강좌에서는 사운드를 사용하는 간단한 메서드를 살펴보도록 한다.
1. mixer의 Sound 객체로 sound 재생
sound 파일을 객체로 만들어서 play(), stop() 메서드를 통해 sound 파일을 재생할 수 있다.
Sound 객체를 만드는 형식은 다음과 같다.
pygame.mixer.Sound( filename )
Sound 파일형식은 현재 버젼(1.9.6)에서 wav, ogg 파일을 지원한다.
mySound = pygame.mixer.Sound( "sound.ogg" ) |
생성된 Sound 객체를 play()를 통해서 재생하고 stop() 메서드를 통해 재생을 멈춘다.
play() 메서드의 arguments는 다음과 같다.
play(loops=0, maxtime=0, fade_ms=0)
argument의 값을 통해 반복재생(loops)등을 설정할 수 있다. play(-1)을 하면 무한 반복된다.
예제 코드:
mySound = pygame.mixer.Sound( "sound.ogg" )
mySound.play()
mySound.stop() |
sound 객체는 여러 개를 만들어서 사용할 수 있다.
그 외에 소리를 점점 줄이면서 멈추는 fadeout(milliseconds), 현재 볼륨값을 얻는 get_volume(), 볼륨을 설정하는 set_voume(float) 등의 메서드를 사용할 수 있다.
fadeout()의 argument는 밀리세컨드 단위로 입력한다.
set_volume()의 argument는 0.0에서 1.0 사이의 float로 입력한다.
만약 0.0보다 작으면 볼륨이 변하지 않고, 1.0보다 크면 1.0으로 세팅된다.
예제 코드:
mySound = pygame.mixer.Sound( "sound.ogg" )
mySound.set_volume(0.7)
mySound.play(-1)
mySound.fadeout(1000) |
좀 더 다양한 mixer의 Sound에 대한 기능은 아래의 링크를 참고한다.
참고 : https://www.pygame.org/docs/ref/mixer.html
2. 스트리밍으로 재생
pygame에서는 streaming으로 음악을 재생할 수 있다.
스트리밍 할 음악을 load()하는 메서드는 다음과 같다.
musci.load() 메서드는 객체를 가지지 않으며, pygame에서는 한 개의 streming만 할 수 있다.
pygame.mixer.music.load( filename )
music 파일형식은 현재 버젼(1.9.6)에서 wav, mp3, ogg 파일을 지원한다.
pygame.mixer.music.load( "background.mp3" ) |
로드된 music을 play()를 통해서 재생하고 stop() 메서드를 통해 재생을 멈춘다.
play() 메서드의 arguments는 다음과 같다.
play(loops=0, start=0.0)
loops 값을 통해 반복 횟수를 정하고, start 값을 통해 음악 파일의 시작 점을 정할 수 있다. play(-1)을 하면 무한 반복된다.
예제 코드:
pygame.mixer.music.load( "background.mp3" )
pygame.mixer.music.play(-1)
pygame.mixer.music.stop() |
music streming도 Sound 객체와 마찬가지로 fadeout(milliseconds), get_volume(), set_voume(float) 등의 메서드를 사용할 수 있다.
fadeout()의 argument는 밀리세컨드 단위로 입력한다.
set_volume()의 argument는 0.0에서 1.0 사이의 float로 입력한다.
만약 0.0보다 작으면 볼륨이 변하지 않고, 1.0보다 크면 1.0으로 세팅된다.
또한 pause(), unpause() 메서드를 통해 음악을 멈춤, 다시 재생도 사용할 수 있다.
예제 코드:
pygame.mixer.music.load( "background.mp3" )
pygame.mixer.music.play(-1)
pygame.mixer.music.set_voume(0.7)
pygame.mixer.music.pause()
pygame.mixer.music.unpause()
pygame.mixer.music.fadeout(1000) |
좀 더 다양한 mixer의 Stream music에 대한 기능은 아래의 링크를 참고한다.
참고 : https://www.pygame.org/docs/ref/music.html
3. Sound()와 Stream music 차이점
Sound() 객체로 생성한 음악 파일을 재생하는 것과 music.load()로 로드한 파일을 재생하는 것은 매우 유사하다.
하지만 둘의 차이점은 다음과 같다.
1) Sound()는 재생 전에 파일 전부를 메모리에 올린다. 하지만 Stream music은 재생시 disk에서 streaming한다.
2) Sound() 객체는 여러 개를 만들어서 동시에 사용하던가 반복해서 중첩해서 사용할 수 있다. 하지만 Stream music은 하나의 stream만 제공하기에 다른 파일을 load()하면 이전에 재생되던 stream은 정지가 된다.
따라서 자주 사용하고, 재생 시간이 짧은 사운드는 Sound() 객체를 사용하고, 배경음악으로 지속적으로 재생되는 음악은 Stream music을 사용하는 식으로 구분해주면 될 것이다.
4. 사운드 이용한 예제 코드
키를 눌렀을 때, 다음과 같은 기능을 하는 프로그램 예제, 사운드 파일은 첨부해 둔 파일을 사용하면 된다.
↑: 배경음악 볼륨 높임
↓: 배경음악 볼륨 줄임
← : 배경음악 일시 멈춤
→ : 배경음악 다시 재생
a : 천동소리 내기
import pygame
# 스크린 전체 크기 지정 SCREEN_WIDTH = 400
pygame.init()
# 스크린 객체 저장
# FPS를 위한 Clock 생성 clock = pygame.time.Clock()
# wav, mp3, ogg 가능
# wav, ogg 가능
# Music stream 무한 반복
playing = True if event.type == pygame.QUIT:
if event.key == pygame.K_UP:
if event.key == pygame.K_DOWN:
if event.key == pygame.K_LEFT:
if event.key == pygame.K_RIGHT:
|
화살표키와 a 키를 눌렀을 때, 정상 동작하는지 확인한다.
첨부파일
- bagroundsample.mp3 (2.1M) 244 다운로드 | DATE : 2020-02-24 01:16:12
- thunder.ogg (62.0K) 201 다운로드 | DATE : 2020-02-24 01:16:12
- bagroundsample.ogg (1.9M) 179 다운로드 | DATE : 2020-03-04 20:25:02