Ali*_*hes 4 javascript clone audiobuffer web-audio-api
我有一个deepClone在整个程序中使用的函数,该函数克隆一个对象的所有属性和值并返回克隆的对象(请参见下面的代码)。我现在想audioBuffer在对象中包含 an 并成功将其复制到返回的对象。有没有办法修改函数以包含此功能?
注意:并非所有传递给该deepClone函数的对象都会包含audioBuffer,因此它应该能够处理并成功克隆带有或不带有它们的对象。
编辑:有人能想出一种方法来JSON.parse(JSON.stringify(object))与作为答案之一提供的解决方案相结合吗?即在克隆发生时检查对象的属性,以if (property == 'trackBuffer')与其他对象不同的方式克隆它?
deepClone功能:
function deepClone (object) {
return JSON.parse(JSON.stringify(object));
};
Run Code Online (Sandbox Code Playgroud)
function deepClone (object) {
return JSON.parse(JSON.stringify(object));
};
Run Code Online (Sandbox Code Playgroud)
正如您从代码片段中看到的, 的clonedTrack被trackBuffer转换为一个空对象,这正是 所期望的JSON.parse(JSON.stringify(object));。
deepClone修改以成功克隆但保留现有功能的最佳方法是什么audioBuffer?
任何帮助将不胜感激,谢谢!
我的建议是,将AudioBuffer序列化(反序列化)作为特殊情况处理会更安全。当您的代码必须跨多个浏览器运行并且面向未来时,您最好使用该对象支持的 API。
function cloneAudioBuffer(fromAudioBuffer) {
const audioBuffer = new AudioBuffer({
length:fromAudioBuffer.length,
numberOfChannels:fromAudioBuffer.numberOfChannels,
sampleRate:fromAudioBuffer.sampleRate
});
for(let channelI = 0; channelI < audioBuffer.numberOfChannels; ++channelI) {
const samples = fromAudioBuffer.getChannelData(channelI);
audioBuffer.copyToChannel(samples, channelI);
}
return audioBuffer;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |