Web Audio API是一种可直接在浏览器中使用的高级音频处理API,可帮助使用JavaScript创建,操作和分析音频数据。
为了解决此问题,我使用Web Audio API实现了音频预处理:
我至少需要3/4个不同的TTS声音,但不幸的是,我只有一个声音。 这是因为我只有一个意大利神经声音(迭戈),而其他人都是标准的声音和质量...
将解码样本的 Float32Array 转换为 AudioBuffer
因为我尝试支持的浏览器之一不允许我使用 AudioContext.decodeAudioData() 解码特定的编解码器,所以我使用 Aurora.js 来解码音频文件。 我怎样才能改变
在Chrome或Firefox中使用exponentialRampToValueAtTime的音频淡出并不可靠
以下代码遵循 MDN 文档,但会导致突然静音而不是 2 秒长的淡出: const audioContext = new window.AudioContext(); 让振荡器; 让增益节点;
重新创建并启动“AudioBufferSourceNode”有多便宜?
MDN 说: 一个AudioBufferSourceNode只能播放一次;每次调用 start() 后,如果想再次播放相同的声音,则必须创建一个新节点。幸运的是,这些节点非常
为什么WebAudio的增益节点只有一个输入却可以混合多个输入?
我试图找到一种将音频流与 WebAudio 混合并使用 MediaRecorder 进行录制的方法。我一直在遵循此处概述的方法: 录制流中可用的多个音轨...
我正在尝试访问所连接的多输入音频接口的所有音频通道。我知道通道应该由 MediaStreamAudioSourceNode 节点在创建后公开...
从 PyAudio 流传输音频以在 Javascript 网页上播放
我正在尝试使用 PyAudio (特别是 pyaudiowpatch 分支)从我的计算机获取音频流,通过 websocket 传输音频数据(使用 websockets 库,并在网络上播放......
如何在本地测试包含需要安全上下文的类的 javascript
在Mac上,我正在尝试测试一些涉及AudioWorkletProcessor的网站javascript。 显然这个类“仅在安全上下文中可用”。 我假设这意味着 br...
在浏览器中使用 webAudio API 和 javascript 时出现故障
我在通过 javascript 使用 webAudio API 时遇到问题。 问题是我听到浏览器中播放的声音出现故障,即使我已经使用了增益节点来逐渐......
如何使用 HTMLAudioElement 控件来播放 AudioBuffer 的内容?
考虑到这个函数签名的要求: 函数 initPlayer(播放器: HTMLAudioElement, 缓冲区: AudioBuffer): void; 我正在寻找一种使用
从 MediaRecorder 发出的部分数据中解码AudioData
我有一个 MediaRecorder,它每 100 毫秒发出一次音频数据: const audioContext = new AudioContext() 导出异步函数 getMaxAmplitude(blob: Blob): Promise { 常量数据 =
网络开发者变身配音演员!我正在为后者开发我的个人网站,并且在为音频文件设置自定义控件时遇到了很多问题。我正在加载我的音频...
我是 Tone.js 新手,对 Gain 对象有疑问。 我在 html 中设置了一个音量滑块,如下所示: 玩 我是 Tone.js 新手,对 Gain 对象有疑问。 我在 html 中设置了一个音量滑块,如下所示: <button class="play">Play</button> <button class="stop">Stop</button> <div> Vol: <input type="range" class="vol-slider slider" min="0" max="10" value="4"> <div class="vol-text">4</div> </div> 单击“Play”时,我创建一个 Tone.PolySynth 和一个 Tone.Gain,然后使用 .chain() 函数将 Gain 连接到 PolySynth。 增益值取自音量滑块。 使用 Tone.Part 函数(下面的 js 代码)来播放音符。 应用程序首次启动时,序列会以正确的音量播放。 当音量滑块增加时,它还会以增加的音量(更高的增益)播放。 但是,当降低音量滑块时,序列的音量不会降低。 当从较高值变为较低值时,增益不会产生影响。 我对此感到困惑,并感谢知识/经验的帮助。 请使用 codepen https://codepen.io/minapre/pen/QWpmdJm $('.stop').on('click', function(e){ Tone.Transport.stop(); }) // .stop $(".vol-slider").on('input', function(e){ let val = $(this).val() $(".vol-text").text(val) }) // .vol-slider $('.play').on('click', function(e){ console.clear() testnotes = [ {time: "0:0:0", note: "D3", duration: "8n"}, {time: "0:0:0", note: "D3", duration: "16n"}, {time: "0:0:1", note: "E3", duration: "16n"}, {time: "0:0:2", note: "F3", duration: "16n"}, {time: "0:0:3", note: "G3", duration: "16n"}, {time: "0:1:0", note: "A3", duration: "16n"}, {time: "0:1:1", note: "B3", duration: "16n"}, {time: "0:1:2", note: "C4", duration: "16n"}, {time: "0:1:3", note: "D4", duration: "16n"}, {time: "0:2:0", note: "E4", duration: "16n"}, {time: "0:2:1", note: "F4", duration: "8n"}, {time: "0:2:2", note: "G4", duration: "8n"}, {time: "0:2:3", note: "A4", duration: "8n"}, {time: "0:3:0", note: "B4", duration: "8n"}, {time: "0:3:1", note: "C5", duration: "4n"}, ] Tone.Transport.stop() const synth = new Tone.PolySynth( ) let vol = parseFloat( $(".vol-slider").val() ) / 10 console.log("vol: " + vol) const gain = new Tone.Gain(vol).toDestination() synth.chain( gain); const part = new Tone.Part(function(time, note) { synth.triggerAttackRelease(note.note, note.duration, time); }, testnotes).start(0); Tone.Transport.start() }) // .play 看起来您每次单击“播放”时都会创建一个新的增益节点。 您只需创建这些 Tone 对象一次。 此外,$(".vol-slider").on('input'代码并未修改增益节点本身。 当 Tone 发挥作用时,您可以使用 gain.rampTo() 修改增益。 这应该有效: $(".stop").on("click", function (e) { Tone.Transport.stop(); }); // .stop // Create Tone objects here. const synth = new Tone.PolySynth(); let vol = 1; const gain = new Tone.Gain(vol).toDestination(); synth.chain(gain); let testnotes = [ { time: "0:0:0", note: "D3", duration: "8n" }, { time: "0:0:0", note: "D3", duration: "16n" }, { time: "0:0:1", note: "E3", duration: "16n" }, { time: "0:0:2", note: "F3", duration: "16n" }, { time: "0:0:3", note: "G3", duration: "16n" }, { time: "0:1:0", note: "A3", duration: "16n" }, { time: "0:1:1", note: "B3", duration: "16n" }, { time: "0:1:2", note: "C4", duration: "16n" }, { time: "0:1:3", note: "D4", duration: "16n" }, { time: "0:2:0", note: "E4", duration: "16n" }, { time: "0:2:1", note: "F4", duration: "8n" }, { time: "0:2:2", note: "G4", duration: "8n" }, { time: "0:2:3", note: "A4", duration: "8n" }, { time: "0:3:0", note: "B4", duration: "8n" }, { time: "0:3:1", note: "C5", duration: "4n" } ]; const part = new Tone.Part(function (time, note) { synth.triggerAttackRelease(note.note, note.duration, time); }, testnotes); $(".play").on("click", function (e) { console.clear(); Tone.start(); Tone.Transport.stop(); part.start(0); Tone.Transport.start(); }); // .play $(".vol-slider").on("input", function (e) { let val = $(this).val(); // This is a string at this point ... let valFloat = parseFloat(val); $(".vol-text").text(val); gain.gain.rampTo(valFloat, 0.1); }); // .vol-slider 这是一个将所有内容放在一起的代码笔: https://codepen.io/joewiss/pen/GRWxmML codepen 上接受的答案效果很好,但是当我在 IDE 上实现类似版本时,我遇到了滑块没有降到零的相同问题。然而,通过将滑块的范围设置为 [-20,10],我确实让它工作了: <input type="range" step="1" min="-20" max="10" class="range-slider" value="-10" /> 我调整了这些值,使浮点值的范围从 -1 到 0.5。这样它就可以衰减到零: volume_slider.oninput = function () { let valFloat = parseFloat(this.value)/20; gain.gain.rampTo(valFloat, 0.1); }
如何在 javascript (react) 中为所有主要浏览器(包括 safari)录制无损音频?
我当前的解决方案在 chrome、firefox 和 opera 等浏览器上工作正常,但在 safari 中我听到机器人声音。当我在 safari 中删除约束“echoChancellation”时,我录制了
在哪里可以找到使用 AudioNodes 的简单 PeerJS 示例?
我在 PeerJS 网站上没有看到任何音频连接的示例: https://peerjs.com/examples 文档提到返回一个流: https://peerjs.com/docs/#mediaconnection 哪...
媒体记录器对我来说非常有用,可以与 Mozilla 上记录的其余 Web 音频 API 一起完成相当复杂的过程。然而。除非我能得到它,否则它对我来说毫无用处