채널 데이터를 AudioBuffer
에서 가져 와서 전송 가능한 객체를 통해 웹 작업자에게 전송하여 처리하고 있습니다. 이제 다시 넣으 려합니다. 정말이 복사해야합니까? 정말 바라고 있어요수동으로 pcm 데이터를 AudioBuffer에 넣으십시오.
var myData = new Float32Array(audioBuf.length);
var chanData = audioBuf.getChannelData(0);
for (var n = 0; n < chanData.length; n++) {
chanData[n] = myData[n];
}
그냥 AudioBuffer
채널 참조의 각을 ArrayBuffer
을 변경할 수있는 몇 가지 방법이있다. 뭔가 ...
audioBuf.channel[0].buffer = myData.buffer;
... 멋지고 간단하지만 효과적 일 수 있지만 외관상으로는 존재하지 않습니다. 이와 같이 참조를 변경하고 데이터 복사를 피할 수있는 방법이 있습니까?
편집 : 약간의 조사를 통해 웹 오디오 API를 전송 가능한 객체와 함께 사용하는 문제가 훨씬 더 성가시다. 배열 버퍼를 작업자에게 전송하면 AudioBuffer
의 기본 배열 버퍼가 지워지고 Float32Array
을 통해 복사 작업을 수행한다고해도 getChannelData
이 반환하지 않습니다. 내가 지금 원하는 것을 성취하기 위해 볼 수있는 유일한 방법은 원래 AudioBuffer
을 포기하고 완전히 새로운 AudioBuffer
을 만든 다음 내 데이터를 복사하는 것입니다. 정말??
이것은 현재 최신 브라우저에서 널리 지원됩니다.또한'copyFromChannel' 메쏘드가 메인 쓰레드에서 추가 배열 할당을 필요로하지 않고'getChannelData'보다 약 2 배 빠릅니다. (transferables와 함께 직접적으로 사용될 수는 없지만, 채널 데이터가 놓여지면 (자), 배열이 null가되어,'getChannelData'에 의한 같은 추가 할당이 필요합니다. –