분할 공격/지속 샘플 쌍을 유지하기 위해 SoundEnvelope 클래스를 만들었습니다. 또한 클래스는 서스테인 루프를 사전 처리하여 공격 덩어리의 마지막으로 선택한 양의 스테레오 샘플을 크로스 페이드하고 30ms MP3 인코더 오프셋을 적절히 재생하기 위해 잘라냅니다.AS3 : ByteArray 사운드 데이터 루프 스무딩 문제
트리밍과 루핑 모두 내 프로젝트에 필수적입니다.
공격이 원활하게 지속되고 서스테인 루프로 원활하게 들어가지만 루프가 결국 일부 데이터를 건너 뛰는 것처럼 보일뿐 아니라 크로스 페이딩 효과와 관련이있는 것처럼 보입니다. 타이밍 문제 일 수도 있지만 나는 그 문제를 찾을 수없는 것 같습니다.
동적 처리 사운드에 익숙하지 않은 사용자의 경우 여기 function입니다. 청크가 내 SoundEnvelope 인스턴스의 공격 또는 지속 변수에 포함되는지 여부를 결정하기 위해 if-else 포크가있는 루프를 사용하고 있습니다.
[UPDATE]
@A Shelly:
전문 합성기에서 사운드 봉투 공격 붕괴 서스테인 방출 시퀀스로 구성된다. 필자의 경우 공격과 붕괴는 같은 부분이며, 릴리스는 서스테인의 볼륨을 페이드 아웃하고 있습니다. 서스테인 볼륨은 부드럽게 되돌아 가야합니다.
_a
=
[tfweeeew] 및
_s
=
[weeeewweeeewwe] 부분으로 구성되어 있습니다. 자, 이것은 어떤 샘플이든 될 수 있습니다. 그리고 나는 균일 한 0.5 초 공격과 1.0 초의 서스테인 루프를 사용하고 있습니다. 따라서 사운드를 연속적으로 만들기 위해서는 루프의 끝 부분을 페이드 아웃해야합니다. 왜냐하면 자체 시작 부분과 일치하지 않아서 공격 부분의 끝 부분이 동시에 사라져서 샘플 타일링을 매끄럽게 만들 수 있기 때문입니다. 여기
[CODE]
는 루프의 ... 물론,이 샘플의 엔드 포인트에서 약간의 breathiness을 생산하는 것입니다,하지만 여전히 deewdeewdeewdeewdeew ... 처럼 반복하는 동안 팝업하는 것보다 낫다 기능, 난 정말 사전에 감사, 누군가가 나를 도울 수 있기를 바랍니다 :
public function fadeLoop(fadeStereoSamples:uint):void {
var volume:Number;
var helper:ByteArray = new ByteArray();
var fade:Number;
// moves the pointer to the overlapping part's beginning of sustain and attack ByteArrays
// _a and _s are the two chunk arrays in the SoundEnvelope object
_a.position = _a.length - fadeStereoSamples * 8;
_s.position = _s.length - fadeStereoSamples * 8;
// crossfade through input amount of sample-pairs
for (var i:uint = 0; i < fadeStereoSamples; i++) {
fade = i/fadeStereoSamples;
// fadestep left
helper.writeFloat(_a.readFloat() * fade + _s.readFloat() * (1 - fade));
// fadestep right
helper.writeFloat(_a.readFloat() * fade + _s.readFloat() * (1 - fade));
}
_s.position = _s.length - fadeStereoSamples * 8;
for (i = 0; i < fadeStereoSamples; i++) {
helper.position = 0;
_s.writeFloat(helper.readFloat());
_s.writeFloat(helper.readFloat());
}
_a.position = 0;
_s.position = 0;
}
글리치에 대한 더 자세한 설명을 제공 할 수 있습니까? 아마도 _a와 _s에 대해 두 개의 고유 한 사운드를 사용하는 테스트를 수행하면 (높은 주파수 대 낮은 주파수의 사인파?) 출력의 플롯에서 문제를 볼 수 있습니다. – AShelly
늦게 답변을 드려 죄송합니다. 마감일로 인해이 접근법을 취소해야했습니다. 나중에 개인적 관심사로 돌아올 가능성이 큽니다. –