음악 파일 재생하기 (sound, music) > Pygame - python GUI module

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Pygame - python GUI module

음악 파일 재생하기 (sound, music)

페이지정보

글쓴이 관리자 조회 40,282 조회 날짜 20-02-24 00:28 / Update:20-03-04 20:25
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

음악 파일 재생하기 (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
SCREEN_HEIGHT  = 500

 

pygame.init()

 

# 스크린 객체 저장
SCREEN = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("pygame sount test")

 

# FPS를 위한 Clock 생성

clock = pygame.time.Clock()

 

# wav, mp3, ogg 가능
pygame.mixer.music.load('bagroundsample.mp3')

 

# wav, ogg 가능
sound_thunder = pygame.mixer.Sound('thunder.ogg')

 

# Music stream 무한 반복
pygame.mixer.music.play(-1)

 

playing = True
while playing:
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            playing = False
            pygame.quit()


        if event.type == pygame.KEYDOWN:

 

            if event.key == pygame.K_UP:
                v = pygame.mixer.music.get_volume()
                pygame.mixer.music.set_volume(v + 0.1)
                print("volume up")

 

            if event.key == pygame.K_DOWN:
                v = pygame.mixer.music.get_volume()
                pygame.mixer.music.set_volume(v - 0.1)
                print("volume down")

 

            if event.key == pygame.K_LEFT:
                pygame.mixer.music.pause()
                print("일시 멈춤")

 

            if event.key == pygame.K_RIGHT:
                pygame.mixer.music.unpause()
                print("다시 재생")
                
            if event.key == pygame.K_a:
                sound_thunder.play()
                print("천둥소리")


    # 1초에 60번의 빈도로 순환하기
    clock.tick(60)

 

화살표키와 a 키를 눌렀을 때, 정상 동작하는지 확인한다.

첨부파일

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 52051 02-21
2 관리자 43346 02-22
열람중 관리자 40283 02-24
4 관리자 39253 02-22
5 관리자 38210 02-22
6 관리자 36044 02-21
7 관리자 34578 02-23
8 관리자 33504 02-22
9 관리자 33443 03-10
10 관리자 32805 02-22
11 관리자 32650 02-27
12 관리자 29337 02-25
13 관리자 29055 04-05
14 관리자 28935 02-21
15 관리자 27664 03-11
16 관리자 27248 03-05
17 관리자 26601 03-11
18 관리자 25708 03-11
19 관리자 23488 03-11
20 관리자 22838 04-05
21 관리자 21450 03-10
22 관리자 20588 03-11
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.