프로그램 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