问题标签 [audiobuffer]

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.

0 投票
1 回答
109 浏览

web-audio-api - 使用 WebAudio AnalyserNode.getFloatFrequencyData() 来改变 BufferSource 的音高

我有一个 BufferSource,因此我创建了它:

是的,CORS 解决方法很可悲,但这是我发现无需运行 HTTP 服务器即可在本地工作的方式。反正...

我想改变这个缓冲区的音高。我尝试了各种不同的形式:

一切都无济于事。无论我尝试什么,dataArray 总是充满 -Infinity 值。

我的想法是获取这个频域数据,然后将所有频率向上/向下移动一定量,并从中创建一个新的振荡器节点,如下所示:

反正。如果有人对如何改变音高有更好的想法,我很想听听。可悲的是, detune 和 playbackRate 似乎都在做基本相同的事情(为什么有两种方法可以做同样的事情?),即只是加快或减慢播放速度,所以不是这样。

0 投票
0 回答
305 浏览

android - 日志中多次出现相同的错误 - processAudioBuffer(34): gainBuffer(192) returned 192 = 128 + 64 err 0

0 投票
2 回答
935 浏览

javascript - JavaScript 将 arraybuffer 作为音频播放。需要帮助解决“decodeaudiodata无法解码音频数据”

我有一个 .net 核心 WebSocket 服务器,它从客户端 A 接收实时流音频,然后我需要将此实时音频流式传输到客户端 B(浏览器)。所以我从客户端 A 收到字节数组,并将字节数组发送到客户端 B(浏览器)*字节数组是正确的,因为我可以将其转换为 .wav 并毫无问题地播放。

在客户端 B(浏览器)中,我尝试将数组缓冲区解码为音频缓冲区,以便将其放入输出和播放。

mediastreamhandler.SendArraySegToAllAsync 是我开始将字节数组从服务器发送到客户端 B 的地方。我使用第一种方法发送到所有方法,稍后将通过匹配 websocket 连接 ID 进行修改并发送数据。

然后我通过 Javascript 中的 websocket.onmessage 接收音频字节数组。然后我将字节数组传递给解码和播放。但这里它说“无法解码数据”。在 Mozilla 中,它确实说内容格式未知(我需要重新格式化收到的字节数组吗?)字节数组本身很好,因为我使用相同的字节在本地创建 .wav 文件并播放它任何问题。

然后我尝试另一种方法来解码和播放音频,这一次,它播放了一些白噪声,而不是从客户端 A 流式传输音频。

我想我真的需要一些帮助,试图在几周内完成数组缓冲区,但仍然没有任何突破。卡在这里。不知道我做了什么,你们能指导我或告诉我任何其他方法吗?提前非常感谢,真的是认真的。

0 投票
0 回答
58 浏览

javascript - 有什么方法可以在 javascript 浏览器中更改文件 FPS 或将 wav conventer 准备为 60FPS 视频?

我正在制作 Web 应用程序,它存储从大型视频文件中剪切下来的短音频文件。用户上传 .mp4 文件,选择声音长度,这里有一个小技巧。剪切音频只能在后端完成(如果我错了,请纠正我)并且发送 700MB 数据不是一个好的选择,所以我使用下面的代码从 .mp4 解码音频数据,然后使用 start 和 stop 参数发送它。后端(Node.js)使用 FFMPEG 剪切音频并保存。

这部分有效,但我意识到来自 60FPS 视频的解码音频听起来不太好(不可怕但在我的应用程序中完全没用)。我的目标是避免第三方,尤其是桌面应用程序(如 audacity),并允许用户从任何 mp4 视频中剪切相关的音频部分。有没有办法在浏览器中将 60FPS 视频转换为 30FPS 视频(ArrayBuffer)然后解码音频?

0 投票
1 回答
77 浏览

type-conversion - WAV 音频文件的大小应该是音频缓冲区的两倍吗?

我有一个 JS webaudio AudioBuffer,我使用 3rd 方代码将其转换为 WAV,WAV 的长度/大小始终至少是 AudioBuffer 大小的两倍。当我处理长时间的音频(多 MB)时,这是一个潜在的问题。

我的 AudioBuffer 是单声道(单声道),我已经确认我正在创建单声道 WAV(其中库创建立体声 WAV,文件大小为 4 倍)。我尝试使用多种解决方案进行转换,但无法获得与 AudioBuffer 相同大小的 WAV 文件。我试过Crunkeraudiobuffer-to-wav这篇文章。使用 audiobuffer-to-wav 我尝试了 16 位 (2x) 和 32 位 (4x)。

也许这是不可能的,并且由于音频数据格式。但理想情况下,我可以获得与 AudioBuffer 相同文件大小的 WAV,甚至更好的压缩 MP3。

作为上下文,我将 WAV 输入到 HTML 音频元素中。我意识到我可以使用 Web Audio 直接播放音频,但有理由使用 HTML 音频元素。谢谢你的帮助!

0 投票
1 回答
68 浏览

javascript - Web 音频 API 缓冲区回调?

所以我正在制作一个游戏机模拟器,我现在在音频部分。如果重要的话,基本上我将样本推送到单声道音频缓冲区(1 个通道,2048 长度,22000 采样率)。所以我推到这个缓冲区,每次它满了,我就玩它。但这会导致双倍生锈的爆裂声。这太糟糕了。

我听说最佳方法是在缓冲区满时排队,等待“内部缓冲区”完成播放然后播放该缓冲区。但是,我在 api 中找不到类似的东西。我在想可能是完成后的回调或其他任何事情,但没有。

有谁知道是否有这样的事情?或者如果有不同的方法来解决这个问题?谢谢大家 !

0 投票
1 回答
83 浏览

html5-audio - AudioBuffer 节点 VS MediaElement

我正在使用 HTML5 中的 WebAudio。我正在与一个开发团队合作。我们在循环播放 MP3 文件时遇到问题。这些文件以 MP3 格式创作,并无间隙打印。
在循环播放期间,我仍然有轻微的颠簸。

MediaElements 是否缓冲到 RAM 中?我想知道 AudioBuffer 源节点在循环时的行为是否与 MediaElement 节点不同。

我找对地方了吗?

我很欣赏任何见解。

0 投票
0 回答
121 浏览

react-native - 使用本机反应的实时音频重新编码和处理

我们的要求

  • 获取音频缓冲区并使用 C 处理缓冲区,以便通过创建和应用声音掩码来减少噪音。
  • 使用图表(条形图和线条聊天)可视化获取的音频。非常感谢任何指向库或 GitHub 示例的指针。
0 投票
1 回答
336 浏览

javascript - 如何使用 Web 音频 API 在 javascript 中连续生成原始音频样本?

对于音乐应用程序,我需要能够使用 Web 音频 API 连续无缝地生成原始音频样本。经过搜索,我发现了 AudioBuffer(https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer),看来这就是我需要的。但是,音频缓冲区只能播放一次(https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode),因此不能真正连续播放。我尝试了这种解决方法:

本质上,这段代码创建了一个缓冲区和源节点,播放缓冲区,当缓冲区结束时,它创建一个新的源和缓冲区并继续播放。但是,当缓冲区完成播放时,此方法会产生明显的静音。我认为这与 JS 事件循环有关,但我不确定。

理想情况下,我想要这样的东西:

希望我能够让它发挥作用。如果我不这样做,我可能会尝试编写一个带有 c++ 绑定的 npm 包来执行此操作。

0 投票
0 回答
18 浏览

javascript - 检测循环的音频缓冲区结束?

我有AudioBuffer一个循环运行,我想在每次缓冲区到达循环末尾时运行一些代码。AnAudiobuffer继承了一个ended事件,但它不会被触发 if AudioBuffer.loop = true

有没有一种简单的方法可以实现这一目标?