더북(TheBook)

프로그램 1.5.8 디지털 신호 처리 (playthattune.py)

import math
import stdarray
import stdaudio
import stdio
 
SPS = 44100
CONCERT_A = 440.0
 
while not stdio.isEmpty():
    pitch = stdio.readInt()
    duration = stdio.readFloat()
    hz = CONCERT_A * (2 ** (pitch / 12.0))
    n = int(SPS * duration)
    samples = stdarray.create1D(n+1, 0.0)
    for i in range(n+1):
        samples[i] = math.sin(2.0 * math.pi * i * hz / SPS)
    stdaudio.playSamples(samples)
stdaudio.wait()
pitch
duration
hz
n
samples[]
'라'음에서의 거리. 음높이
음 재생 시간
주파수
샘플 수
샘플링한 사인 곡선

이 프로그램은 표준 입력 스트림에서 사운드 샘플을 읽고 표준 사운드 장치에 출력한다. 이 데이터-주도 프로그램은 표준 입력 스트림에서 음높이(‘라’음에서의 거리)와 시간(초 단위)으로 정의된 반음계 순음(pure tone)을 재생한다. 여기에서는 표준 입력 스트림에서 음표를 읽고, 지정된 주파수와 시간 동안의 사인 곡선에서 초당 44,100개를 샘플링해 배열을 생성한 후, stdaudio.playSamples()를 호출해 각 음을 연주한다.

% more elise.txt
7 .25
6 .25
7 .25
6 .25
7 .25
2 .25
5 .25
3 .25
0 .50

% python3 playthattune.py < elise.txt

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.