python winsound를 이용한 윈도우 환경에서 소리 재생 예제

 본 포스트에는 윈도우 환경에서 python의 winsound라이브러리를 이용한 사운드 재생의 예제를 싣고 있다.

import winsound


특정 주파수 톤 재생

Beep를 사용하여 특정 주파수의 소리를 정해진 시간동안 재생할 수 있다.

winsound.Beep(frequency, duration)

파라미터

  • frequency : Hz 단위며, 범위는 37Hz~32,767Hz
  • duration : milliseconds 단위이다.


example code

import winsoind
winsound.Beep(370,2000)



wave 재생

지정된 파일, 윈도우 레지스트리에 등록된 사운드 혹은 오디오 데이터(bytes-like object)를 재생한다. 만약 sound 리소스가 없는 경우 시스템 디폴트 사운드를 재생한다. 

winsound.PlaySound(sound, flags)

파라미터

  • sound : 파일 이름, 시스템 사운드 별명, 오디오 데이터
  • flags :
    • winsound.SND_FILENAME : sound 파라미터는 wave file 이름 이며, SND_ALIAS와 함께 사용하면 안된다.
    •  winsound.SND_ALIAS : sound 파라미터는 시스템 사운드 별명이며, SND_FILENAME와 함께 사용하면 안된다.
      • ex) 'SystemAsterisk', 'SystemExclamation', 'SystemExit', 'SystemHand', 'SystemQuestion'
    • winsound.SND_LOOP : 반복 재생한다. 테스트해보니 SND_ASYNC와 함께 사용하는 경우만 반복 재생된다. 재생을 멈추려면 SND_PURGE을 flag로 실행하면된다.
    • winsound.SND_MEMORY : sound 파라미터는 오디오 데이터. SND_ASYNC와 함께 사용시 RunTimeError 발생한다.
    • winsound.SND_PURGE : 지정된 사운드의 모든 인스턴스 재생을 중지한다.
    • winsound.SND_ASYNC : 사운드 async 재생한다. 실행 시 바로 리턴되고 사운드는 재생된다.
    • winsound.SND_NODEFAULT : 지정된 사운드 재생 못할 경우 시스템 디폴트 사운드를 재생하지 않도록 한다. 만약 파일이 없을 경우 RuntimeError가 발생한다.
    • winsound.SND_NOSTOP : 재행중인 사운드를 중단하지 않도록 한다.
    • winsound.SND_NOWAIT : 사운드 드라이버가 사용 중이면 바로 리턴 한다.


파일 반복 재생 example code

import winsound
winsound.PlaySound('addf8-Alaw-GW.wav',winsound.SND_FILENAME | winsound.SND_LOOP | winsound.SND_ASYNC)


파일 재생 정지 example code

import winsound
winsound.PlaySound('addf8-Alaw-GW.wav',winsound.SND_FILENAME | winsound.SND_PURGE)


윈도우 사운드 재생 example code

import winsound
winsound.PlaySound('SystemHand',winsound.SND_ALIAS)


오디오 데이터 재생 example code

import winsound
with open('drmapan.wav','rb') as f:
    winsound.PlaySound(f.read(),winsound.SND_MEMORY)

예제의 wav파일은 아래 사이트에서 다운 받았다.

http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples.html


윈도우 사운드 재생

윈도우 레지스트리에 지정된 사운드 재생한다.

winsound.MessageBeep(type=MB_OK) 

파라미터

  • type
    • -1 : 간단한 경고음 재생
    • winsound.MB_ICONASTERISK : SystemDefault 사운드 재생
    • winsound.MB_ICONEXCLAMATION : SystemExclamation 사운드 재생
    • winsound.MB_ICONHAND : SystemHand 사운드 재생
    • winsound.MB_ICONQUESTION : SystemQuestion 사운드 재생
    • winsound.MB_OK : SystemDefault 사운드 재생


example code

import winsound
winsound.MessageBeep(snd.MB_OK)

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

리눅스 디바이스 드라이버 기초와 예제