问题标签 [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 投票
0 回答
1444 浏览

android - 为android声音输出添加延迟

所以我为一个安卓应用写了这篇文章。这个想法很简单:

检测声音是否正在播放,如果是,则打开 BluethoothSCO 频道,以便在那里播放音频。

我想用它将导航方向信息“路由”到我的汽车扬声器。它几乎像预期的那样工作。

在音频识别和 bluethoothsco 连接准备就绪之间有大约 1 秒的“巨大”延迟。这导致丢失了近一半的导航信息。

我的想法是添加延迟或暂停播放一秒钟。

现在:检测到声音 -> BluethootSCO 打开(声音一直在此处播放) -> 汽车扬声器发出声音

想法:检测到声音->暂停/延迟1秒->BluethootSCO打开->恢复播放->汽车扬声器发出声音

我考虑过录制它并在之后播放它,但对于“现在左转”之类的一些信息来说已经太晚了。

短暂的延迟是可以的,但我不知道要实现这个:(

由于该应用程序仅供我自己使用,因此使用 root 可以。也许有可能直接在 AudioFlinger 上?

0 投票
1 回答
616 浏览

javascript - AudioBufferSourceNode.buffer 已弃用?

根据

https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/buffer

AudioBufferSourceNode.buffer 现在已弃用。什么是新的替代方案?我似乎找不到它。

0 投票
1 回答
2715 浏览

swift - 使用准确的 CMTime 将 AudioBuffer 转换为 CMSampleBuffer

这里的目标是通过 AVCaptureDataOutput 的视频和录制 CoreAudio 的音频创建一个 mp4 文件。然后将两者的 CMSampleBuffers 发送到具有随附 AVAssetWriterInput(AVMediaTypeVideo) 和 AVAssetWriterInput(AVMediaTypeAudio) 的 AVAssetWriter

我的音频编码器将 AudioBuffer 复制到新的 CMSampleBuffer 并将其传递给 AVAssetWriterInput(AVMediaTypeAudio)。这个例子是如何完成 AudioBuffer 到 CMSampleBuffer 的转换。转换为 CMSampleBuffer

长话短说,它不起作用。视频显示但没有音频。

但是,如果我注释掉视频编码,那么音频就会被写入文件并且可以听到。

这从经验告诉我这是一个时间问题。到 CMSampleBuffer的转换确实显示

它产生一个时间 CMTimeCopyDescription ,{0/1 = 0.000} 这对我来说似乎完全错误。我尝试跟踪渲染的帧并传递时间值的帧数和时间尺度的采样率,如下所示

但没有骰子。更好看的 CMSampleTimingInfo {107520/44100 = 2.438},但文件中仍然没有音频。

视频 CMSampleBuffer 会产生类似这样的内容{65792640630624/1000000000 = 65792.641, rounded}。这告诉我 AVCaptureVideoOutput 的时间尺度为 10 亿,可能是纳秒。我来宾时间值是设备时间之类的东西。我找不到任何关于 AVCaptureVideoOutput 使用的信息。

有人有任何有用的指导吗?我什至走在正确的轨道上吗?

这是转换

还有我创建的assetWriters

0 投票
1 回答
1741 浏览

android - 如何在Android中从缓冲区播放音频

我正在尝试播放从 android 流式传输到 android 的缓冲区中的音频。尝试使用仅适用于 PCM 格式的 AudioTrack。要播放 MP3,我希望使用 MediaPlayer,但它不支持从缓冲区播放。我怎样才能让它工作?

0 投票
0 回答
968 浏览

ios - 将 AudioBufferList 中的 NSData 加载到 AVAudioPlayer

从委托方法中,我在录制音频时收到了 AudioBufferList。我正在尝试从 AudioBufferList 收集数据并将其保存,以便将其加载到我的 AVAudioPlayer 中,但 AVAudioPlayer 抛出错误,我无法播放录音。我需要能够在没有文件的情况下通过 AVAudioPlayer 播放音频,只需使用 AudioBufferList。

最初我将录音保存到文件中,然后将其加载到 AVAudioPlayer 中,但是使用这种方法,我无法附加到录音,而不必制作另一个音频文件,然后在附加后合并这两个文件。这花费了很多时间,我仍然希望能够在附加之间收听录音。所以现在我没有保存音频文件,这样我就可以继续追加它,直到我想保存它。这个问题是我从 AudioBufferList 保存的 NSData 没有正确加载到 AVAudioPlayer 中。

这是我收集 NSData 的代码:

当我尝试将 NSData 加载到 AVAudioPlayer 中时,出现以下错误:

错误:错误域 = NSOSStatusErrorDomain 代码 = 1954115647 “操作无法完成。(OSStatus 错误 1954115647。)”

任何帮助,将不胜感激。

谢谢,

0 投票
4 回答
2888 浏览

ios - 使用 AVCaptureAudioDataOutputSampleBufferDelegate 快速捕获音量级别

我正在尝试使用它编译和运行的 AVCaptureDevice 等来控制音量,但这些值似乎是随机的,而且我也不断收到溢出错误。

编辑:

RMS范围为0到20000左右是否正常?

...

0 投票
2 回答
3215 浏览

javascript - Web Audio API - 合并两个音频缓冲区

我有音频文件,我正在使用 Web Audio API 在浏览器上播放它们。现在我想同时播放所有的音频文件。

我使用 Web Audio API 获得了所有音频文件的音频缓冲区。我可以循环播放所有音频,但我想将所有音频缓冲区合并到一个音频缓冲区中,然后播放。

有谁知道在 Web Audio API 中合并两个音频缓冲区?

0 投票
2 回答
3894 浏览

javascript - Javascript:从 Int16 转换为 Float32

我正在尝试将 WAV 文件放在 AudioBuffer 中,以便我可以操作它。我之前从 AudioBuffer 创建了 WAV 文件,这需要将 Float32Array 转换为包含 Int16 值的 DataView。我使用了我拿起的这个方便的功能:

好吧,我现在需要做的就是反转这个(WAV 文件是从服务器加载的,所以我没有原始数据了)。我无法弄清楚该函数中实际发生了什么或数据是如何转换的。

0 投票
1 回答
318 浏览

javascript - 如何创建和正确调度 AudioBufferSource 节点?

我正在尝试使用 Javascript 开发节拍器。我按照本文中的说明创建了一个调度程序,它经常被调用并调度“滴答”,它存在于一个名为ticksInQueue. 我希望“滴答声”是节拍器的实际声音,而不是振荡器产生的频率。

振荡器

按照这个关于如何创建节点的视频教程AudioBufferSource,我编写了这段代码,在加载窗口时执行。

但是,如果我用缓冲区替换振荡器,如下所示,控制台会告诉我“ Uncaught InvalidStateError: Failed to execute 'start' on 'AudioBufferSourceNode': cannot call start more than once.

音频缓冲源

0 投票
1 回答
1132 浏览

javascript - 将 MediaElementAudioSourceNode 转换为 AudioBufferSourceNode

如果你想解码音频数据,createMediaElementSource() 不能在移动设备上工作,但是 createBufferSource() 方法工作正常:

此代码在网络浏览器中正常工作,但在移动设备中不正常:

此代码适用于 Web 和移动浏览器:

在我的情况下,我有一个来自要解码的视频播放器的音频源,它是一个 MediaElementAudioSourceNode,我需要将它转换为 AudioBufferSourceNode 才能让我的代码在移动设备上运行,换句话说,是否有可能将sourceT1转换为sourceT2

任何想法如何做到这一点?

编辑: 基于这个答案,不幸的是我认为这是不可能的