Programing/python 어플 개발

kivy 어플에 소리 넣기 (kivy SoundLoader)

뇌님 2022. 5. 6. 21:50
반응형

 

 

지금까지 만든 알람 어플은 알람이라고 했지만 "Alarm"이라는 글자만 내부적으로 print할 뿐이였습니다.

 

이제는 우리의 귀로 소리를 들을 수 있도록 변형해보겠습니다.

Digital Watch Alarm Long.mp3
0.73MB

19초짜리 알람음 mp3를 사용하겠습니다. (출처: https://studio.youtube.com/  오디오보관함-음향효과)

 

main.py나 기타 파이썬 파일이 위치한 디렉토리에 다운로드 하시면 됩니다.

 

 

1. SoundLoader 사용해보기

kivy 어플리케이션에서 sound를 재생하는 가장 기본적인 방법은 다음과 같습니다. 

(참조: https://kivy.org/doc/stable/api-kivy.core.audio.html)

 

sound.py

from kivy.app import App
from kivy.core.audio import SoundLoader

class Play(App):
    sound = SoundLoader.load('Digital Watch Alarm Long.mp3')
    sound.play()

# Music().run()  # sound.py만 실행시킬 경우, Music().run()의 주석을 해제하세요

sound.py를 실행시키면 mp3파일이 실행되는 것을 들으실 수 있습니다.

(공식문서에는 mp3 정보를 print하고, if문을 통해 mp3파일을 찾을 수 있는 경우에만 작동하도록 처리하고 있습니다만, 여기서는 정말 파일을 불러와서 재생만 하는 것에 집중했습니다.)

 

 

2. sound.py를 Class화 하기

위의 Music()을 그대로 import하면 import 하자마자 sound.play()가 실행될 것이기 때문에,

어플 화면을 키자마자 알람소리를 듣게하고싶은 것이 아니라면 클래스화 하는 것이 좋겠습니다.

 

sound.py

from kivy.app import App
from kivy.core.audio import SoundLoader

class Play(App):

    def beep(self):
        sound = SoundLoader.load('Digital Watch Alarm Long.mp3')
        sound.play()

 

 

3. timer.py에서 sound.py를 import 하기

이제 준비가 완료되었습니다.

이전 게시물에서 만들었던 알람 어플리케이션 코드에 sound 재생 기능을 추가해보겠습니다.

 

(이전 게시물을 참조해주세요)

 

Kivy 기능 분할하기 (split file & class)

이전 글에서는 kivy를 이용해 알람 어플을 위한 내부 기능들을 만들어 보았고(비록 소리가 아닌 print였지만), 또 kivyMD를 이용해 간략하게 시계 위젯도 띄워 봤습니다. 알람 내부기능(지정된 시간

brain-nim.tistory.com

 

 

timer.py에 단 두줄만 추가하면 마무리입니다.

from kivy.app import App
from kivy.clock import Clock
from datetime import datetime

from sound import Play  # New!!!

class Alarm(App):
    def __init__(self, alarm_time, **kwargs):

    # 생략...
    
    # print alarm
    def alarm(self):
        print("Alarm!")
        Play().beep()  # New!!!
# 참조) 현 디렉토리 구성
kivy_application
 ├─ main.py
 ├─ timer.py
 ├─ sound.py
 └─ Digital Watch Alarm Long.mp3

이제 main.py를 실행시키고 알람 시간을 설정하면.... 

 

동영상 길이가 너무 길어질까봐 50초에 영상을 시작했습니다

시간에 맞춰서 알람소리가 잘 재생됩니다!

반응형