关于IIS的web.config处理程序部分中的scriptProcessor,除了%s(它似乎代表所请求的文件名)之外是否还有%符号?例如,%aa是否已识别出宏/符号?除了%s之外还有其他人,他们在哪里描述?
我已经成功地在React中实例化了一个简单的AudioWorklet,并希望像谷歌的例子那样启动一个简单的振荡器.为了测试运行它,我正在渲染一个按钮,其onClick事件调用以下内容:
SRC/App.jsx:
userGesture(){
//create a new AudioContext
this.context = new AudioContext();
//Add our Processor module to the AudioWorklet
this.context.audioWorklet.addModule('worklet/processor.js').then(() => {
//Create an oscillator and run it through the processor
let oscillator = new OscillatorNode(this.context);
let bypasser = new MyWorkletNode(this.context, 'my-worklet-processor');
//Connect to the context's destination and start
oscillator.connect(bypasser).connect(this.context.destination);
oscillator.start();
})
.catch((e => console.log(e)))
}
Run Code Online (Sandbox Code Playgroud)
问题是,每次单击时,addModule方法都会返回以下错误:
DOMException: The user aborted a request.
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu v16.0.4上运行Chrome v66.
SRC/worklet/worklet-的node.js:
export default class MyWorkletNode extends window.AudioWorkletNode {
constructor(context) {
super(context, 'my-worklet-processor');
}
}
Run Code Online (Sandbox Code Playgroud)
SRC/worklet/processor.js …
由于旧的 Webaudio 脚本处理器自 2014 年以来已被弃用,并且 Audioworklets 在 Chrome 64 中出现,因此我决定尝试一下。但是我在移植我的应用程序时遇到了困难。我将从一篇好文章中举两个例子来证明我的观点。
首先是脚本处理器方式:
var node = context.createScriptProcessor(1024, 1, 1);
node.onaudioprocess = function (e) {
var output = e.outputBuffer.getChannelData(0);
for (var i = 0; i < output.length; i++) {
output[i] = Math.random();
}
};
node.connect(context.destination);
Run Code Online (Sandbox Code Playgroud)
另一种填充缓冲区然后播放它:
var node = context.createBufferSource(), buffer =
context.createBuffer(1, 4096, context.sampleRate), data = buffer.getChannelData(0);
for (var i = 0; i < 4096; i++) {
data[i] = Math.random();
}
node.buffer = buffer;
node.loop = true;
node.connect(context.destination);
node.start(0);
Run Code Online (Sandbox Code Playgroud)
两者之间的最大区别是第一个在播放期间用新数据填充缓冲区,而第二个则预先生成所有数据。 …
我们一直在开发基于 JavaScript 的音频聊天客户端,该客户端在浏览器中运行并通过 WebSocket 将音频样本发送到服务器。我们之前尝试使用 Web Audio API 的 ScriptProcessorNode 来获取样本值。这在我们的台式机和笔记本电脑上运行良好,但在从我们必须支持的手持平台传输时,我们遇到了较差的音频质量。我们将此归因于记录的脚本处理器性能问题(https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API)。在手持设备上,脚本处理器缓冲区大小为 2048,音频始终出现中断。在下一个最大大小间隔 (4096),音频很流畅(没有中断),但延迟太多(大约两秒)。
我们从 ScriptProcessorNode 获得的结果促使我们尝试使用 Audio Worklet。不幸的是,在我们的工作集实现中,音频质量更差:中断和延迟,即使在我们的笔记本电脑上也是如此。我想知道是否有一种方法可以调整我们的工作集实现以获得更好的性能,或者我们所经历的是否是音频工作集当前状态的预期(“符合课程标准”)(Chromium 问题796330、813825和836306似乎相关)。
以下是有关代码功能的更多详细信息:
其工艺方法如下。var“samples”是一个 Float32Array,它被初始化为缓冲区大小并重用。我对缓冲区大小进行了一些尝试,但似乎没有影响。该方法基于AudioWorklet:Web 音频的未来第 4.1 节中的指导,以最大限度地减少内存分配。
if (micKeyed == true) {
if (inputs[0][0].length == framesPerBlock) {
samples.set(inputs[0][0], currentBlockIndex * framesPerBlock);
currentBlockIndex++;
if (currentBlockIndex == lastBlockIndex) {
// console.log('About to send buffer.');
this.port.postMessage(samples);
currentBlockIndex = …Run Code Online (Sandbox Code Playgroud) javascript websocket getusermedia scriptprocessor web-audio-api
这是一个简单的jsFiddle链接,它使用网络音频测量实时输入的响度(它将值作为百分比输出到控制台).
我计划有一个输入而没有输出,因为没有必要延迟我的音频信号等待我的自定义节点完成音量.
但是,很明显,如果连接的话,scriptProcessor 只会记录值context.destination.难道我做错了什么?或者这是一个错误?或者这是预期的行为?
function gotStream(stream) {
var mediaStreamSource = context.createMediaStreamSource(stream);
var gainNode = context.createGain();
gainNode.gain.value = 3;
var levelChecker = context.createScriptProcessor(2048);
mediaStreamSource.connect(gainNode);
gainNode.connect(levelChecker);
//Commenting out the line directly below stops the script processor from working!
levelChecker.connect(context.destination);
levelChecker.onaudioprocess = process;
}
function process(e) {
var buffer = e.inputBuffer.getChannelData(0);
var maxVal = 0;
for (var i = 0; i < buffer.length; i++) {
if (maxVal < buffer[i]) {
maxVal = buffer[i];
}
}
console.log(Math.round(maxVal * 100) + …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 React 中创建一个 AudioWorklet。我正在使用 create-react-app 并将在 React 上下文之外工作的脚本导入到 App.jsx 中。它无法实例化我的 AudioWorkletNode 扩展并引发以下错误:
Failed to compile.
./src/worklet/worklet-node.js
Line 2: 'AudioWorkletNode' is not defined no-undef
Run Code Online (Sandbox Code Playgroud)
代码:
// The code in the main global scope.
class MyWorkletNode extends AudioWorkletNode {
constructor(context) {
super(context, 'my-worklet-processor');
}
}
let context = new AudioContext();
context.audioWorklet.addModule('processor.js').then(() => {
let node = new MyWorkletNode(context);
});
Run Code Online (Sandbox Code Playgroud)
同样的代码成功初始化了 AudioWorklet,所以我有点困惑为什么 AudioWorkletNode 没有被识别。