2011-02-04 6 views

답변

1

신호를 추가하기 만하면됩니다.

// fill the destination (output) with the sum of signals: input1, input2, input3 
for (size_t idx(0); idx < samplesToWrite; ++idx) { 
    output[idx] = input1[idx] + input2[idx] + input3[idx]; 
} 

신호에 볼륨 또는 패닝을 적용하려면 곱셈을 사용하십시오.

// to halve the amplitude of an audio signal: 
const double halfVolume = 0.5; 
for (size_t idx(0); idx < samplesToWrite; ++idx) { 
    signal[idx] *= halfVolume; 
} 
+0

일반적으로 스케일링이 필요하지 않습니다. 스케일링없이 트랙을 추가하면 일반적으로 클리핑이 발생합니다. –

+0

@ Paul R 감사합니다. 특히 int 형식의 경우 일반적으로 확장하는 것이 일반적입니다. 또한 컨텍스트에 따라 다르지만 사용되는 샘플 형식과 사용자가 결과에서 기대하는 바에 달려 있습니다. 목적지가 플로트이면, 실제적인 용도 (목적지 샘플 데이터 표현을 위해)에 위험이 존재하지 않는다. 정수 샘플 데이터 파일로 바운스 (bounce in place) 구현을했다면 바운스 (bounce)가 잘린 것을 사용자에게 알려주는 것이 좋습니다. OP는 특정 샘플 형식을 지정하지 않았지만 DerNalia는 제한 및 변환에 익숙하다고 가정했습니다. – justin

관련 문제