pyxen.Sound
Entity에 컴포넌트로 첨부되는 짧은 오디오 클립입니다.
사운드는 메모리에 전체가 로드됩니다 — 점프, 타격, 아이템 획득 같은 짧은 효과에 사용하세요.
오디오 개념은 오디오를 참조하세요.
생성자
Sound(filename, *, volume=1.0, pan=0.0, loop=False, delay=0.0, pitch=1.0)
filename은 유일한 위치 인수로, 프로젝트에 있는 WAV 오디오 에셋의 이름입니다. 나머지 다섯 개는 키워드 전용이며 같은 이름의 속성의 시작 값을 설정합니다(컴포넌트 속성 참고).
매개변수
| 매개변수 | 타입 | 설명 |
|---|---|---|
filename | str | WAV 에셋 이름(확장자 없이). 사운드 뱅크 안의 사운드는 bank/sound |
volume | float | 시작 게인. 기본값 1.0 |
pan | float | 시작 스테레오 위치(-1.0에서 1.0). 기본값 0.0 |
loop | bool | 끝나면 다시 재생. 기본값 False |
delay | float | 재생이 시작되기 전의 무음 시간(초). 기본값 0.0 |
pitch | float | 재생 속도, 0.25에서 4.0. 기본값 1.0 |
예시
jump_sound = Sound("jump")
quiet_echo = Sound("jump", volume=0.3, delay=0.15)
high_jump = Sound("jump", pitch=2.0)
Sound 첨부
생성 시:
sfx = world.spawn(sound=Sound("jump"))
또는 나중에:
entity.sound = Sound("jump")
사운드를 할당하면 즉시 재생이 시작됩니다.
컴포넌트 속성
entity.sound를 통해 접근:
| 속성 | 타입 | R/W | 설명 |
|---|---|---|---|
loop | bool | R/W | 반복 활성화 |
volume | float | R/W | 게인 (>= 0.0으로 클램프) |
pan | float | R/W | 스테레오 패닝 (-1.0에서 1.0) |
time | float | R/W | 현재 재생 위치(초) |
delay | float | R/W | 재생이 시작되기까지의 무음 시간(초) |
pitch | float | R/W | 재생 속도 (0.25에서 4.0) |
duration | float | R | 전체 길이 (초) |
finished | bool | R | 재생이 완료되면 True |
loop
entity.sound.loop = True
활성화되면 사운드가 끝난 후 자동으로 다시 시작됩니다.
volume
entity.sound.volume = 0.5
0.0 미만의 값은 0.0으로 클램프됩니다.
pan
entity.sound.pan = -1.0 # 완전히 왼쪽
entity.sound.pan = 1.0 # 완전히 오른쪽
entity.sound.pan = 0.0 # 가운데
-1.0에서 1.0 범위로 클램프됩니다.
time
t = entity.sound.time
entity.sound.time = 0.25 # 처음 0.25초를 건너뜀
재생 위치(초)입니다. 값을 대입하면 그 위치로 탐색합니다. 끝을 넘는 값은 끝으로 제한되며, 이미 끝난 소리를 탐색하면 다시 재생됩니다.
delay
entity.sound.delay = 0.002 # 2밀리초 뒤에 시작
소리가 시작되기까지의 무음 시간(초)입니다. time 과 달리 아무것도 건너뛰지 않습니다. 소리는
여전히 첫 샘플부터 시작하며, 시작 시점만 늦어집니다.
같은 효과음이 한 프레임 안에서 여러 번 울릴 때 쓰는 것입니다. 같은 파형의 복사본이 같은 샘플에서 시작하면 위상이 맞아 더해집니다. 둘이면 1.4배가 아니라 두 배의 진폭이 되고, 열이 겹치면 각각을 아무리 신경 써서 맞춰도 믹스가 풀스케일을 넘습니다. 몇 밀리초만 어긋나도 상관 관계는 끊어지며, 그 정도는 빈틈으로 들리지 않습니다.
딜레이가 갈라놓는 것은 어택입니다. 짧은 타격음에는 잘 듣지만 지속음에는 아무 효과가 없습니다.
pitch
entity.sound.pitch = 2.0 # 한 옥타브 위
entity.sound.pitch = 0.5 # 한 옥타브 아래
사운드를 재생하는 빠르기입니다. 1.0은 녹음된 그대로, 2.0은 한 옥타브 높게 절반의 시간에,
0.5는 한 옥타브 낮게 두 배의 길이로 재생됩니다. 값은 0.25에서 4.0, 위아래로 두 옥타브로
제한됩니다. 같은 사운드를 점점 높은 피치로 재생하면 음계가 되므로, 연쇄나 연속 기록에는 음마다
사운드를 따로 두지 않고 사운드 하나면 됩니다:
def on_match(step):
world.spawn(sound=Sound("match", pitch=1 + 0.12 * step))
time과 duration은 사운드 자체의 초 단위 그대로입니다. pitch가 2.0이면 1초짜리 사운드는
0.5초 동안 재생되고, 그동안 time은 0.0에서 1.0까지 갑니다.
duration
d = entity.sound.duration
읽기 전용. 녹음된 그대로의 사운드 전체 길이 (초). pitch와 상관없습니다.
finished
if entity.sound.finished:
world.destroy(entity)
읽기 전용. 사운드 재생이 완료되면 (loop가 False일 때) True.
형식
사운드 에셋은 WAV 파일이어야 합니다.
일반적인 에러
파일 이름 누락
Sound()
ValueError: Sound must have a file
잘못된 에셋
Sound("nonexistent")
ValueError: Sound 'nonexistent' not found. For sounds inside a sound bank, use 'bank/sound'.
게임은 이 오류와 함께 멈춥니다. 에셋 이름은 확장자 .wav 없이 지정합니다. 사운드 뱅크 안의 사운드는 bank/sound라는 이름을 씁니다.