问题标签 [audiorecord]

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 投票
2 回答
1986 浏览

android - Android使用两台设备之间的声音获取距离

这个想法是Phone A同时发送声音信号和蓝牙信号,Phone B将计算两个信号之间的延迟。

在实践中,我得到的结果不一致,延迟从 90 毫秒到 160 毫秒。我尝试尽可能优化两端。

在输出端:
一旦蓝牙和音频输出各有自己的线程,就会产生音调
蓝牙仅在 AudioTrack.write 之后输出,并且 AudioTrack 处于流模式,因此它
应该在写入完成之前开始输出。

在接收端:
再次两个单独的线程
系统时间在每个 AudioRecord.read 之前记录

采样规格:
44.1khz
读取整个缓冲区
使用 fft 一次采样 100 个样本
考虑到自初始 read() 以来转换了多少样本

0 投票
2 回答
1162 浏览

android - 从 AudioRecord 计算经过的时间

如何从Android 中的AudioRecord计算经过的时间?

我正在尝试做的与此类似:图 5(第二张图)。为了进一步解释我自己,我正在实时录制声音,然后绘制音高并在一定时间内计算缓冲数据。

0 投票
1 回答
1482 浏览

java - 用零填充的 AudioRecord 缓冲区

为什么audioData short[]我在下面的代码中创建的缓冲区填充了0每个

?

缓冲区 ( audioData.length) 的大小不是零,这意味着缓冲区不是空的,它只是用零填充。

我尝试将其更改FREQUENCY8000-> 没有更改。

我正在实现 Echoprint 库 -如果您需要,请参阅此以获取更多信息。

audioData来自 LogCat 的缓冲区被零填充的证明:

0 投票
1 回答
12327 浏览

android - Android MediaCodec AAC 编码器

我使用MediaCodec自 API 级别 16 以来 Android SDK 提供的类和OMX.SEC.aac.enc编码器将音频编码为文件。我从AudioRecord课堂上得到音频输入。我的类实例AudioRecord配置如下:

我能够播放AudioRecord实例中的原始数据,所以问题不存在。

AudioRecord我将实例的输出写入ByteBuffer实例,并将其从编码器传递到可用的输入缓冲区。编码器的输出被写入 SD 卡上的文件。

这些是我的MediaCodec实例的配置参数:

VLC 告诉我我的 aac 文件中没有流。该命令FFMPEG -i @filename@给了我以下错误:Invalid data found when processing input。我测试的所有媒体播放器都无法播放我的文件。

为什么我无法播放我的文件?我没有收到任何OpenMAX错误,LogCat并且应用程序在编码时不会崩溃。我写了一个基于相同原理工作的视频编码器,它可以工作。

这是将数据从AudioRecord实例读取到缓冲区的代码:

我的编码器中的 add 函数将一个缓冲区的内容复制到另一个缓冲区:

以下代码用于占用编码器的输入缓冲区:

我将编码器的输出写入本地文件,如下所示:

0 投票
4 回答
7783 浏览

java - 为什么 Android AudioRecord 初始化失败?

我使用以下教程制作了一个录音应用程序:

当我在我的测试设备(LG P970 Optimus Black)上启动它时,我收到一个错误代码:

我找到了一些“解决方案”,例如向 Manifest 添加RECORD_AUDIO权限并使用该.release()方法。但是所有这些东西都已经在源代码中了。

这个问题还有其他解决方案吗?会不会是设备?

0 投票
2 回答
2604 浏览

android - Android 客户端和 Node.js 服务器

我正在尝试开发像PTTDroid这样的项目,我的意思是 Push-To-Talk 或 Walkie-Talkie 应用程序。

问题是在这个应用程序中你不能使用 3G 访问网络,所以我决定使用 Node.js 服务器并实现一个 Android 客户端与之通信。我尝试使用 Phonegap 进行多平台项目,问题是对于音频记录,您无法访问缓冲区,您只能开始和停止或暂停录制过程,但不能在捕获时发送数据。所以我的问题是,可以通过 Socket.IO 或类似的 Node.js 服务器通过原生 Android 功能(Audiorecord 类)实时流式传输音频捕获吗?

我发现了这个项目,Asimi JS,但我不知道其他人是否知道更好的方法来做我想做的事。

非常感谢您的帮助!

0 投票
1 回答
958 浏览

android - Android AudioRecord 读取方法:它可以读取比已记录更多的数据吗?

我在使用 android AudioRecord 类时遇到了很多问题。我一直对 AudioRecord 中的 read 方法如何工作感到困惑,希望有人能回答...

考虑这种情况;

  1. 我创建了一个新的 AudioRecord 对象,其 sampleRateInHz 值为 44100hz
  2. 然后我调用 startRecording() 方法,设备开始录制来自麦克风的输入。
  3. 正好 500 毫秒(或 22050 个样本)之后,我调用 read 方法并尝试将 44100 个样本读入一个长度为 44100 的新数组。

由于 AudioRecord 对象只记录了 500 毫秒(或 22050 个样本),而我试图读取最后的 44100 个样本,会发生什么?我可能的想法是;

  • read 方法会休眠 500ms,直到有足够的数据可用,然后读取所有 44100 个记录的样本,或者
  • read 方法将读取 AudioRecord 缓冲区(在 AudioRecord 对象内)中的内容,无论已记录了多少数据。因此,在这种情况下,前 22050 个样本将包含从麦克风记录的数据,随后的 22050 个样本将包含零,因为读取函数正在访问尚未写入的缓冲区区域。

我一直在不知疲倦地尝试用我的 android 设备对此进行测试,但这确实不是一件容易测试的事情。回答需要比我更大的头脑...任何帮助表示赞赏...

0 投票
1 回答
6460 浏览

android - AudioRecord - 无效的音频缓冲区大小

AudioFormat.ENCODING_PCM_8BIT用作 AudioFormat时,下面的行有问题。使用AudioFormat.ENCODING_PCM_16BIT这些工作正常。

日志猫:

0 投票
1 回答
484 浏览

android - 检查设备支持的 PCM 采样率

我想检查设备是否支持特定的采样率。

我已经尝试了以下(它应该根据http://developer.android.com/reference/android/media/AudioRecord.html#getMinBufferSize(int , int, int) 工作)但没有(它永远不会得到AudioRecord。 ERROR_BAD_VALUE):

0 投票
1 回答
3469 浏览

android - AudioRecord 将原始 PCM 数据写入/读取到文件

我正在尝试将 PCM 数据写入临时文件,以便稍后处理它而不会丢失任何可记录的内容。最初我尝试在同一个录制循环中进行处理,但录制的持续时间与实际持续时间不匹配。现在我想要的是从 PCM 文件中读取 short 并将其写入 WAV 文件(如果此问题得到解决,希望稍后处理短数据)和 header。如果我在 Audacity 中打开文件,它就会变成空的。如果我直接写入 WAV 文件而不是临时 PCM 文件,它工作正常。

Other issue is I am using the handler to run a thread in which I update the duration of recording and update VU meter view. I use mBuffer data to display in VU Meter view and is invalidated every second. No synchronization is used on the data but still it effects the recorded duration. Sometimes it comes out to be thrice the original duration.

Questions are (1) Why reading and writing PCM data to temp file is causing WAV file to be empty? Why reading from the unsynchronized short buffer (member variable) in a thread managed by handler is adding duration to WAV data, this happens when I write recorded buffer to WAV file directly?