2014-01-24 130 views
0

我想制作一个Android应用程序,用于收听麦克风,并向扬声器播放完全相同的声音,但只改变频率。 说我想玩总是加倍频率相比,输入。 我尝试使用调音器,并使用该频率使用AudioTrack类播放新音符,但听起来与输入无关。 (我猜是因为泛音消失了。)Android - 从不同频率的麦克风播放声音

所以我已经知道输入的频率,但是我想改变频率而不是仅仅发挥一个新音符,因为它听起来会有很大的不同。

有谁知道如何做到这一点? 在此先感谢, Jeroen D.

回答

0

这似乎是一个信号处理问题,而不是编程问题。

你说得对,所有自然的声音都像人类的声音一样有着广泛的频率。所以你不能通过单一频率逼近麦克风输入,只需改变该频率。相反,您需要一种“调制”技术:使用低通滤波器对输入进行滤波,将其乘以另一个正弦波,移除图像,并将最终结果输入到AudioTrack。请参阅教科书“信号和系统”的基础知识。

+0

谢谢,我想出了一个想法:如果我知道特定时间的振幅,我可以使用正弦回归来获得正弦方程,从而得到频率。但这是否也能解决泛音问题?我假设麦克风确实记录了所有泛音,因此只需计算每个幅度的所有正弦函数就可以给出正确的解决方案? – JeroenD

+0

你完全正确。任何音调都可以由多个正弦/余弦波的组合来表示。获得正弦/余弦波系数的最有效方法是fft。您需要将音频数据样本分组来做fft,而不是按样本进行抽样。单个数据点不包含任何频率平均值,只有一部分数据。 – Daniel

相关问题