SuperAPI AI 工具集

web-audio-api

编程与开发

查看项目

更新于 10-16 09:29

技能介绍

用途:这是 software-mansion/react-native-audio-api 项目中 Web Audio API 的规范参考与浏览器直通层(src/web-core/)。当实现一个必须匹配 Web Audio API 规范的节点、核对规范细节,或为 RN 专有扩展补充浏览器实现时使用。规范参考:https://webaudio.github.io/web-audio-api/ ,MDN:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API 。实现或审查节点时重点核对处理模型与渲染量子(128 帧)、AudioNode 声道数规则与 channelCountMode / channelInterpretation、AudioParam 自动化方法/取值钳制/时序、各节点构造选项与默认值及合法范围。

主要能力:该库一套 TypeScript API 跨两个平台,入口通过 package.json 字段解析切换。React Native 侧类位于 src/core/,持有 C++ JSI HostObject 引用,调用转到原生;Web 浏览器侧类位于 src/web-core/,包装 globalThis.* 浏览器对象并直接委托浏览器引擎。两侧共享 src/interfaces.ts 接口、src/types.ts 类型、src/errors/ 错误类与 src/hooks/。web-core 中每个文件是浏览器 API 对象的薄封装:构造时通过 globalThis.XxxNode 实例化并存为 this.node,getter/setter/方法直接委托,AudioParam 由本地类包装。web-core 规则:每个公开方法/属性须在规范中有对应(或放入 custom/);允许额外校验以与 RN 侧错误行为一致;不含业务逻辑。浏览器不存在的节点放入 src/web-core/custom/,目前含用于网页时间拉伸的 signalsmith-stretch WASM 封装。

覆盖状态:已完整实现 AnalyserNode、AudioBuffer、AudioBufferSourceNode、AudioDestinationNode、AudioNode、AudioParam、AudioScheduledSourceNode、BiquadFilterNode、ConstantSourceNode、ConvolverNode、DelayNode、GainNode、IIRFilterNode、OfflineAudioContext、OscillatorNode、PeriodicWave、StereoPannerNode、WaveShaperNode。部分实现 AudioContext(close/suspend/resume/currentTime/destination/sampleRate/state)、BaseAudioContext、AudioListener。尚未实现 AudioWorklet 系列、ChannelMergerNode、ChannelSplitterNode、DynamicsCompressorNode、MediaElement/MediaStream 系列、PannerNode 等。

使用方式:新增规范节点时实现 src/web-core/MyNode.tsx,继承正确基类,构造时 new globalThis.MyNode(context.context, options),用 new AudioParam(node.myParam, context) 包装所有 AudioParam 属性,委托所有 getter/setter/方法,补充与 RN 侧一致的校验,从 src/api.web.ts 导出,并在 interfaces 中共享接口,同时更新 packages/audiodocs/docs/other/web-audio-api-coverage.mdx 覆盖表。若浏览器无该节点,在 src/web-core/custom/ 添加桩或替代实现并从其 index.ts 导出。

限制与注意:RN 专有扩展(AudioBufferQueueSourceNode、AudioRecorder、RecorderAdapterNode、WorkletNode 系列、AudioManager、独立 decodeAudioData、decodePCMInBase64)不在 api.web.ts 导出,或仅有桩/自定义实现。规范合规要点:IIRFilterNode 的 feedback[0] 不得为 0;feedforward 全零须抛 InvalidStateError;OscillatorNode.type 设为 'custom' 须抛 InvalidStateError;AudioParam 的 min/max 须与规范完全一致;sampleRate 范围为 [8000, 96000];decodeAudioData 在 RN 侧额外支持字符串 URL 属有意扩展。维护见 maintenance.md。