频率记录如何与扬声器一起工作?

Posted

技术标签:

【中文标题】频率记录如何与扬声器一起工作?【英文标题】:How does frequency recording works with speakers exactly? 【发布时间】:2019-09-08 09:11:54 【问题描述】:

我目前正在尝试使我的 android 应用程序基于频率工作,但我遇到了一些扬声器问题。 事实上,根据我使用的方法,我得到了三种不同的结果。以下是 440 Hz 声音的方法和结果(发烧友为 A):

方法一:我直接在应用程序中使用我的声音。

结果: Method 1 Result

平均频率:443 Hz。效果不错。

方法2:我通过默认的Android录音应用程序录制我的声音,将此文件添加到我的应用程序Firebase数据库中并与我的应用程序一起播放。

结果: Method 2 Result

平均频率:224 赫兹。频率除以 2 ?!

方法 3:我用笔记本电脑播放 Youtube 上的 440 Hz 声音,然后直接用我的应用程序录制。

结果: Method 3 Result

平均频率:886 Hz。频率现在乘以 2?!

方法 4 :方法与第二种方法相同,但我不使用默认的 Android 录制应用程序。我使用 EasyVoiceRecorder,我可以在其中配置采样率(我输入 44 kHz)和编码(我输入 .wav)。

结果: Method 4 Result

平均频率:431 Hz。效果不错。

其他信息

为了将 Firebase 数据库中的文件保存为 WAV 文件,我使用 AndroidAudioConverter library 以不操纵不同的音频格式并利用 WAV 标头信息。 我使用 AudioTrack 和 AudioRecord 类,然后使用 Fast Fourier 变换以每 128 毫秒获取一次主频率。录音是 配置为 44.1 kHz 采样率、AudioFormat.CHANNEL_IN_MONO 和 AudioFormat.ENCODING_PCM_16BIT。 AudioTrack 是根据配置的 WAV头文件信息。 当我播放位于原始应用程序文件夹中的声音时,频率 结果是完美的。

我真的不明白分享我的应用程序代码的意义,因为正如我向您展示的那样,它仅在我使用第三方设备(默认录制应用程序、笔记本电脑等)时才有效,所以应该是硬件问题。但是如果你需要一些代码片段,问我,我会给你。

感谢您的阅读,提前感谢您的帮助和...祝您编码愉快! :D

【问题讨论】:

您录制的声音几乎不会是纯正弦波,而是几种不同频率的正弦波的混合。您的程序似乎在识别信号中最强的正弦方面存在一些困难。 嗯..你确定吗?我记录了频率,所以我知道声音是几个正弦波的组合。但是,为了得到信号的主频,我使用FFT(幅度/频率),得到幅度最高的频率。它每次都适用于原始文件夹音频文件,并且我的声音直接记录在应用程序中。为什么只有当我使用手机播放与我的声音相同的声音时它才起作用?我不明白这怎么可能是代码问题... 您误以为这是硬件问题;如果不是决定哪个组件最强,那么几乎可以肯定,您看到的是单声道/立体声或样本宽度的误解。但是,如果没有其他人可以比较的实际细节,这就变成了一个禁止的“使用”问题。提示:尝试播放您自己代码中的声音,看看您是否混淆了它的解释,您的耳朵会立即告诉您,尤其是在您录制声音时。 对不起,回答晚了,我正在尝试根据您所说的进行调试。我想我明白了。对于方法 2,肯定是因为转换,因为 m4a 转换文件的 wav 标头表明该文件是立体声的,而不是告诉文件是单声道并给出正确频率的 easyvoicerecorder。此外,我没有听到这两个文件在语气方面有任何区别。对于方法 3,我认为笔记本电脑会发出立体声,但我的 AudioRecord 配置为单声道,因为当我将其配置为立体声时,我得到了正确的频率。 但是,我该如何解决这些问题?如何更换 AndroidAudioConverter 系统?而对于方法3,我怎么知道声音是由计算机发出的还是只是通过语音发出的? 【参考方案1】:

如果您使用 FFT 进行频谱频率幅度峰值拾取,那么任何强于基频的谐波或互调产物都会混淆结果。

Youtube 和许多录音应用程序会压缩音频。低质量压缩的影响之一是频谱失真。此外,通过笔记本电脑的小扬声器播放音频,低频响应较差,也会使频谱失真。

解决方案包括不使用压缩音频格式,使用频率响应更平坦的更大扬声器,以及使用更好的pitch detection/estimation algorithm 而不是仅仅选择 FFT 幅度峰值。

【讨论】:

以上是关于频率记录如何与扬声器一起工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MATLAB 中绘制扬声器的频率响应

一叶知秋:扬声器的冲激响应与阻抗频率特性

如何使用 alsa 库 API 与耳机和扬声器一起使用?

频率分析 - Novocaine 和麦克风播放:如何禁用扬声器输出?

计算正弦扫描频率响应的问题

如何将扬声器输出写入文件 sounddevice