问题标签 [audiocontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-audio-api - 渲染的音频以慢动作播放
在解码我获取的 mp3 文件的音频数据、使用 my 渲染并将其OfflineContext
导出回 .wav 文件时,声音以不同的音高慢动作。是不是因为我的mp3文件的采样率和OfflineContext
不同?如果是,如何在不改变音高的情况下以不同的采样率导出 mp3 文件?
编辑:
我decodeAudioData
使用OfflineAudioContext
我用于渲染的运行:offlineContext.decodeAudioData(this.arrayBuffer)
. 的采样率为offlineContext
48000,而my audioContext
(用于正常播放,效果不错)的采样率为41000。
web-audio-api - 如何暂停离线渲染?
OfflineContext.suspend
停止 的进程OfflineContext.currentTime
,但是在渲染 ( ) 时它有什么影响OfflineContext.startRendering
?我想要做的是启动渲染过程,暂停它,做一些其他任务,并在其他任务完成后恢复它。当渲染过程暂停时,即将到来的AudioBuffer
不应该变大,这意味着当我将它导出AudioBuffer
到一个 wav 文件并播放它时,应该没有与渲染过程所采取的暂停相对应的静音。
我OfflineContext.suspend
在渲染时尝试过,它似乎确实在生成的 wav 文件中添加了一些静音,但也许我做错了什么。
- 如何暂停渲染过程?
- 是
OfflineContext.suspend
为了什么?
javascript - 为什么音频上下文不能在 Firefox 上正常工作?
不久前我做了这个,它使用浏览器AudioContext
创建一个Analyser
并给我音频数据,这样我就可以为正在播放的音乐制作动画。
当我当时完成此操作时,它在 Chrome 和 Firefox 中都能完美运行。当我最近尝试它时,它仍然可以在 Chrome 中运行,但在 Firefox 中无法正常运行。
每当我尝试跳过歌曲或更改 Firefox 中的源时,音频停止播放并且我停止接收分析器数据。
初始化
改变来源
所以问题是。我可以做些什么来在 Firefox 上解决这个问题,或者这只是一个错误,我应该坚持使用 Chrome?
编辑:我已将控制台日志放在有问题的功能中,但所有日志都通过并且没有引发错误
javascript - 您可以在 Firefox 上暂停离线音频上下文吗?
Firefox的浏览器兼容性表OfflineAudioContext.suspend
有一个空单元格,这很令人困惑。
它在 Chrome 中运行良好。我仍然认为这OfflineAudioContext.suspend
是目前在 Firefox (v51.0.1) 中实现的,因为我能够调用该方法。我的问题是,每当我调用此方法时,我都会得到:
这是两个主要调用的顺序
console.log(e)
打印上面的错误消息,所以它不会进入then
.
我尝试修改方法的“suspendTime”参数suspend
,将调用放在startRendering
方法之后,但没有成功。
它实际上应该在Firefox中工作吗?我认为他们允许我们调用该方法,但让它一直失败,这会很奇怪。
javascript - 使用 createGain 输出量没有变化
我想控制传入的 webRTC 音频流的音量。代码如下所示:
基本想法是有效的:我听到音频,我可以在我的 VU 表中看到信号的音量受到决定 gainFilters 设置的推子的影响。但是我通过扬声器听到的输出永远不会改变音量。
我不明白出了什么问题:脚本处理器看到的音频数据受到影响。当我将推子移到最低音量时,vu 表正确显示没有峰值。不过,我可以听到音频。
google-chrome - 未捕获的 DOMException:无法构造“AudioContext”:提供的硬件上下文的数量 (6)
我正在尝试实现 microsoft bing 语音 api,并且在我录制声音后的前 5 次它的工作正常,我在控制台中遇到异常。异常:未捕获的 DOMException:无法构造“AudioContext”:提供的硬件上下文数 (6) 大于或等于最大界限 (6)。
当我尝试使用 AudioContext.close() 关闭时,它显示另一个错误,例如“未捕获(承诺中)DOMException:无法关闭正在关闭或已经关闭的上下文。” 任何人都知道这是什么错误。我正在使用微软必应语音的语音 1.0.0 js sdk。
javascript - Audiocontext 将采样率从 44.1KHz 转换为 8KHz
我正在尝试流式传输麦克风音频,但我注意到音频以 44,1KHz 录制,而我发送数据的设备仅支持 8KHz 音频数据。
有没有办法使用 JavaScript 转换采样率?
javascript - 在 JS AudioContext.analyserNode 中确定频率
背景
我的目标是创建一个基于 JavaScript 的 Web 应用程序来分析和显示音频源中的频率信息,包括页面内源(<audio>
标签)和来自客户端麦克风的信号。我一切顺利:)
作为一名敏锐的萨克斯手,我的目标之一是通过检查高分音相对于基本音高的分布来比较不同萨克斯手和乐器音色中固有的信息。简而言之,我想解释为什么不同的乐器演奏家和乐器品牌即使在演奏相同的音高时听起来也不同。此外,我想将各种“替代指法”的调音和频率分布与同一演奏者/乐器的传统或标准指法进行比较。
使用 JS 访问和显示频率信息是一件相当简单的事情AudioContext.analyserNode
,我将它与HTML5 Canvas
元素结合使用来创建频率图或“winamp 样式条形图”,类似于在MDN 中找到的“使用 Web 音频 API 的可视化”。
问题
为了实现我的目标,我需要识别音频源中的一些特定信息,特别是基音的赫兹频率,以便在乐器演奏者/乐器之间进行直接比较,以及源的频率范围,以确定频谱我感兴趣的声音。这些信息可以在下面的变量fData
中找到......
问题
虽然我可以fData
通过 API 轻松地将其表示为条形图或折线图等<canvas>
,以使声源的基本部分和上部部分清晰可见,但到目前为止我还无法确定......
fData
(min-max Hz)的频率范围- 每个值的频率
fData
(Hz)
如果没有这个,我就无法开始识别源的主要频率(以便将调音的变化与传统音乐音高名称进行比较)和/或突出或排除所代表频谱的区域(放大或缩小等)以进行更详细的检查。
我的目的是通过音高(音符名称)和频率(Hz)突出显示主要频率,并在鼠标悬停时在图表中显示任何单个条的频率。注意我已经有一个数据对象,其中存储了 C 0 -B 8之间的所有音高频率 (Hz) 。
尽管多次阅读了AudioContext.analysisrNode 规范,并且几乎阅读了这个站点和 MDN 上关于这个主题的每一页,但我仍然对如何完成这部分任务没有确定的想法。
基本上,如何将Uint8Array() fData
中的值转换为以赫兹为单位的每个频率幅度的表示,这些频率由fData
数组元素反映。
任何意见、建议或鼓励将不胜感激。
英国石油公司
javascript - 附加 mediaElementSource 时网络音频静音
我正在尝试使用 html5 网络音频分析器从 twilio API 可视化通话录音,但是每当我附加我的分析器(可视化器)时,它都会使我的音频静音。
这是相关代码:
是设置分析仪的地方,其中 [Oscilloscope][1] 是我正在使用的分析仪库。
这是我加载和播放音频的地方:
loadAudio = function () { $audio[0].src = '/recordings/' + playlist[current].recordingSid $audio[0].addEventListener('canplaythrough', playAudio) $audio[0].load() }
playAudio = function () { scope.addSignal(source) $audio[0].play() }
我实际上让它工作了一段时间,但它实际上可能是 chrome 中的一个错误,它允许播放,当 chrome 更新时停止工作。
如果我注释掉
source = context.createMediaElementSource($audio)
音频将播放(只是没有可视化),反之亦然。
我想知道示波器代码中是否有某些东西会由于某种原因使音频流静音,或者我需要做些什么来连接source
或连接scope
到音频节点。我在文档中看到了一些关于连接流的内容
我通过克隆音频节点暂时解决了这个问题,这样我就有一个节点用于实际音频,一个节点用于示波器,但感觉很草率。
欣赏任何想法或指示。
起初认为这是一个 CORS 问题,但我解决了这个问题,所以我的服务器充当了 twilio 录音的本地代理。
createjs - 在 CreateJS 中将 AudioBuffer 传递给 AudioContext 分析器
我使用 AudioContext() 类在 JavaScript 中制作了一个 audioCtx。我有一个使用 audioCtx.createAnalyser() 制作的分析器。如果我的音频是一个音频标签,并且我使用 audioCtx.createMediaElementSource(audio) 创建了一个源,则将其传递给分析器: source.connect(analyser); 这有效 - 我收到数据。我还可以使用 audioCtx.createMediaStreamSource(stream); 连接麦克风 等等
但是,如果我的源是 CreateJS AbstractSoundInstance 对象(称为输入),它具有返回 AudioBuffer 对象的播放资源属性(声音正在播放):
AudioBuffer { sampleRate:44100,长度:5961072,持续时间:135.1717006802721,numberOfChannels:2 }
我似乎无法连接这个。我努力了
var source = audioCtx.createBufferSource(input.playbackResource);
然后尝试使用 analyser.connect(audioCtx.destination); 连接目的地 但我无法获得任何数据。我似乎对 CreateJS 声音的唯一钩子是playbackResource - SoundJS 文档说:“例如,WebAudioPlugin 将设置一个数组缓冲区。”
关于如何将 AudioBuffer 传递给分析器的任何建议(Lanny?Grant?)谢谢!