首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android之外使用AudioRecord的数据

在Android之外使用AudioRecord的数据
EN

Stack Overflow用户
提问于 2015-10-31 21:19:19
回答 1查看 116关注 0票数 0

我正在尝试将在android上录制的音频数据流到一个微控制器上进行播放。音频使用AudioRecord类进行记录,然后通过UDP发送。在接收端,微控制器接收数据并使用PWM进行播放.不过,有几个问题:

  • 我不知道AudioRecord类使用什么格式。我正在使用ENCODING_PCM_16BIT,但我甚至不知道它是否是双极的,如果是的话,如何将它转换成单极。
  • 由于带宽有限,我不能发送超过8位的样本。由于我的手机不支持8位PCM,所以我使用了16位版本,但是为了转换,我只使用了上面的8位。我不确定这是否正确。
  • 由于我使用了一个奇怪的晶体振荡器我的电路,音频必须采样在7.2kHz。我的手机支持8千赫采样,所以我只需使用它并发送%90的记录数据(使用以浮点数作为变量的for循环)。
  • 我用220个欧姆电阻和一个100 2W电容连接到我的ATmega32上的2W扬声器作为滤波器。(原理图)但是我也不确定这是否是正确的方法。

因此,所有这些加在一起只会产生噪音作为输出。当我在MIC附近“制造一些噪音”时,唯一改变的是输出噪声的体积和模式。但是,这种模式没有任何意义,对于人类的声音和音乐也是一样的。

这是我在通过UDP发送数据之前为转换数据而编写的代码:

代码语言:javascript
复制
float divider = 8/7.2f;
int index=0;
recorder.read(record_buffer,0,buffer_size);
for(float i=0;i<buffer_size;i+=divider)
{
    send_buffer[index++]= (byte) (record_buffer[(int)i] >> 8);
}

我不知道从这里往哪里走。如有任何建议,将不胜感激。

更新:我采纳了RussSchultz的建议,在UDP上发送了一个正弦波,并将输出连接到我的廉价O-范围。我得到的是:

代码语言:javascript
复制
No Data : http://i.stack.imgur.com/1XYE6.png
No Data Close-up: http://i.stack.imgur.com/ip0ip.png
Sine : http://i.stack.imgur.com/rhtn0.png
Sine Close-up: http://i.stack.imgur.com/12JxZ.png

当我开始发送正弦波时会出现漏洞,这可能是硬件上缓冲区溢出的结果。由于空白遵循一种模式,所以不可能是UDP数据丢失。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-21 19:28:19

所以在做了一个月的工作之后,我开始工作了。

  • 我不知道AudioRecord类使用什么格式。我正在使用ENCODING_PCM_16BIT,但我甚至不知道它是否是双极的,如果是的话,如何将它转换成单极。
  • 由于带宽有限,我不能发送超过8位的样本。由于我的手机不支持8位PCM,所以我使用了16位版本,但是为了转换,我只使用了上面的8位。我不确定这是否正确。

是躁郁症。我不得不把它转换成8位,在每个样本中增加一半的动态范围,并取上8位。

  • 由于我使用了一个奇怪的晶体振荡器我的电路,音频必须采样在7.2kHz。我的手机支持8千赫采样,所以我只需使用它并发送%90的记录数据(使用以浮点数作为变量的for循环)。

虽然我有轻微的频移,但还是可以接受的。

  • 我用220个欧姆电阻和一个100 2W电容连接到我的ATmega32上的2W扬声器作为滤波器。(原理图)但是我也不确定这是否是正确的方法。

我把过滤器改成了一个确切的3.6KHz低通RC滤波器(使用了许多在线计算器之一)。扬声器不应该直接连接,因为它需要一个当前的uC不能提供。你仍然会得到一个输出,但质量不是很好。你应该做的是驾驶扬声器使用达林顿对或(如我已经)使用一个简单的运算放大器电路。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33456751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档