제5강 음원 파일의 처리
이번 강의의 목표
음원 파일의 조작 방법을 배우고, micro:bit의 센서로 소리를 다룰 수 있게 되는 것을 목표로 합니다.
구체적으로는 다음 내용을 다룹니다.
- 음원 파일의 재생・정지・반복 재생
- 피치 시프트・타임 스트레치
- 페이드인・페이드아웃・크로스페이드
- 녹음
음원 파일의 재생・정지・반복 재생
Pd에서는 else/play.file~ 오브젝트를 사용해 음원 파일을 재생할 수 있습니다. WAV나 AIFF 등의 음성 파일을 읽어 들여 재생・정지・반복 재생을 제어할 수 있습니다.
사용법
else/play.file~오브젝트를 만듭니다- 음원 파일을 Pd 패치와 같은 디렉터리 에 배치합니다
- 메시지 오브젝트를 사용해서 다음 명령을 보냅니다
기본 명령
| 메시지 | 동작 |
|---|---|
open 파일명 | 음원 파일을 연다 |
start | 재생을 시작한다 |
stop | 재생을 정지한다 |
loop 1 | 반복 재생을 활성화한다 |
loop 0 | 반복 재생을 비활성화한다 |
주의
음원 파일은 반드시 Pd 패치와 같은 폴더에 두세요. 다른 폴더에 두면 파일을 찾지 못해 오류가 납니다.
패치 예시

start 메시지를 보내면 재생이 시작되고, stop 으로 정지합니다. loop 1 을 보낸 뒤 start 하면 음원이 반복 재생됩니다.
피치 시프트・타임 스트레치
else/stretch.shift~ 오브젝트를 사용하면 음원의 피치(음의 높낮이)나 템포(재생 속도)를 실시간으로 변경할 수 있습니다.
인렛 설명
else/stretch.shift~ 에는 여러 개의 인렛이 있으며, 각각 서로 다른 파라미터를 제어합니다.
| 인렛 | 파라미터 | 설명 |
|---|---|---|
| 제1인렛 | 버퍼 크기 | 처리에 사용하는 버퍼의 크기 |
| 제2인렛 | 피치 | 음 높낮이의 변경량(센트 단위) |
| 제3인렛 | 템포 | 재생 속도(퍼센트) |
피치 설정
피치는 센트 단위로 지정합니다.
- 0 : 원래 높이(변화 없음)
- 1200 : 1옥타브 위
- -1200 : 1옥타브 아래
- 700 : 완전5도 위
피치의 기준
100센트 = 반음 1개분입니다. 1200센트 = 12반음 = 1옥타브가 됩니다.
템포 설정
템포는 퍼센트로 지정합니다.
- 100 : 원래 속도(변화 없음)
- 200 : 2배속
- 50 : 절반 속도
패치 예시

페이드인・페이드아웃・크로스페이드
여러 음원을 매끄럽게 전환하거나 음량을 서서히 변화시키려면 페이드 계열의 오브젝트를 사용합니다.
사용하는 오브젝트
| 오브젝트 | 기능 |
|---|---|
else/xselect~ | 여러 입력 중 하나를 선택해서 출력한다 |
else/xfade~ | 두 음원을 크로스페이드한다 |
else/xgate~ | 게이트의 개폐로 소리를 통과시키거나 멈춘다 |
크로스페이드의 원리
크로스페이드란 어떤 음원의 음량을 서서히 낮추면서 다른 음원의 음량을 서서히 높여, 매끄럽게 소리를 전환하는 기법입니다.
else/xfade~ 를 사용하면 -1에서 1까지의 값으로 두 음원의 혼합 비율을 제어할 수 있습니다.
- -1 : 입력1만 들린다
- 0 : 입력1과 입력2가 같은 음량으로 섞인다
- 1 : 입력2만 들린다
패치 예시(xfade~)
두 음원(drum.wav 와 drum2.wav)을 슬라이더로 전환하는 예입니다. 슬라이더의 값을 0〜1로 설정해 else/xfade~ 의 오른쪽 인렛에 보내면, 두 음원이 섞이는 정도가 변화합니다.

여러 음원을 전환하기(xselect~)
3개 이상의 음원을 전환하고 싶을 때는 else/xselect~ 를 사용합니다. 인수로 입력 수 와 페이드 시간(밀리초) 을 지정하고, 정수(0〜입력 수−1)로 재생하고 싶은 음원을 고릅니다. 지정한 페이드 시간에 걸쳐 이전 음원에서 새 음원으로 매끄럽게 전환됩니다.
예:else/xselect~ 3 1000 … 3개의 입력을 1000밀리초의 크로스페이드로 전환한다
- 0 : 입력1이 들린다
- 1 : 입력2가 들린다
- 2 : 입력3이 들린다
else/xfade~ 가 두 음원의 믹스 비율을 0〜1의 연속값으로 제어하는 것과 달리, else/xselect~ 는 정수로 「어느 음원을 낼지」를 전환한다는 점이 다릅니다.
패치 예시(xselect~)
3개의 음원을 정수(0・1・2)로 전환하는 예입니다. 라디오 버튼이나 숫자를 else/xselect~ 의 오른쪽 인렛에 보내면, 지정한 페이드 시간에 걸쳐 음원이 전환됩니다.

녹음
Pd에서는 마이크로부터의 입력을 녹음해서 파일로 저장할 수도 있습니다.
사용하는 오브젝트
| 오브젝트 | 기능 |
|---|---|
adc~ | 오디오 입력(마이크)으로부터의 신호를 받는다 |
else/rec.file~ | 음성 신호를 파일에 녹음한다 |
절차
adc~로 마이크로부터의 음성 신호를 취득합니다else/rec.file~에 연결합니다open 파일명메시지로 파일명을 지정합니다start메시지로 녹음을 시작합니다stop메시지로 녹음을 정지합니다
파일의 저장 위치
녹음된 파일은 Pd 패치의 저장 위치와 같은 디렉터리에 저장됩니다. 패치를 저장하지 않은 경우 파일의 저장 위치가 불명확해지므로 주의해 주세요.
패치 예시

연습 문제
다음 연습 문제에 도전해 봅시다. 지난 강의까지 배운 micro:bit와의 연동을 활용합니다.
연습1: 드럼 루프의 재생・정지
micro:bit의 A 버튼과 B 버튼을 사용해서, 드럼 루프의 재생과 정지를 제어하는 패치를 만들어 주세요.
힌트
else/play.file~을 사용해서 드럼 루프 음원을 읽어 들입니다- micro:bit의 A 버튼(버튼 값이 변화했을 때)으로
start메시지를 보냅니다 - micro:bit의 B 버튼으로
stop메시지를 보냅니다 loop 1을 설정해 두면 반복 재생이 됩니다select오브젝트를 사용해서 버튼의 값에 따라 메시지를 전환합시다
연습2: 기울기로 템포 변화
연습1의 패치에, micro:bit의 기울기(가속도 센서)로 템포가 변화하는 기능을 추가해 주세요.
힌트
else/stretch.shift~를 사용해서 재생 속도를 제어합니다- micro:bit의 기울기 값을 템포의 퍼센트 값(예: 50〜200)으로
scale등을 사용해 매핑합니다 - 기울기 값의 범위를 확인한 다음 적절한 범위로 변환합시다
연습3: 밝기 센서로 크로스페이드
밝기 센서의 값에 따라 다음과 같이 음원을 전환하는 패치를 만들어 주세요.
| 밝기 센서의 값 | 동작 |
|---|---|
| 70 이상 | 정지(소리가 나지 않음) |
| 30〜70 | 음원1을 재생 |
| 30 미만 | 음원2를 재생 |
힌트
else/xfade~또는else/xselect~를 사용해서 크로스페이드를 구현합니다- 밝기 센서의 값을
moses오브젝트 등으로 분기시킵니다 - 값의 범위에 따라 크로스페이드의 파라미터(0〜1)에 매핑합니다
- 70 이상일 때는
else/xgate~등으로 소리를 멈추는 방법도 있습니다
연습4: 밝기 센서로 녹음, A 버튼으로 재생
밝기 센서의 값으로 녹음의 시작・정지를 제어하고, A 버튼으로 녹음한 소리를 재생하는 패치를 만들어 주세요.
힌트
adc~와else/rec.file~로 녹음 기능을 만듭니다- 밝기 센서의 값이 일정 이하가 되면
start, 일정 이상이 되면stop을 보냅니다 else/play.file~으로 녹음한 파일을 재생합니다- A 버튼이 눌리면
open 파일명과start를 순서대로 보냅니다 - 녹음과 재생에 같은 파일명을 사용하도록 합시다