【问题标题】:Android - Play sound from microphone with different frequencyAndroid - 从不同频率的麦克风播放声音
【发布时间】:2014-01-24 15:55:09
【问题描述】:

我想制作一个 Android 应用,它可以监听麦克风,并向扬声器播放完全相同的声音,但只改变了频率。 假设我想播放的频率总是比输入频率高一倍。 我尝试使用调谐器,并使用该频率使用 AudioTrack 类播放新音符,但听起来不像输入。 (我猜是因为泛音消失了。)

所以我已经知道输入的频率,但我想改变频率而不只是弹奏一个新音符,因为它听起来会很不一样。

有人知道怎么做吗? 提前致谢, 杰罗恩 D.

【问题讨论】:

    标签: android audio


    【解决方案1】:

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

    您是对的,所有自然声音(如人声)都有很宽的频率范围。因此,您不能通过单个频率来近似麦克风输入并简单地更改该频率。相反,您需要一种“调制”技术:使用低通滤波器过滤输入,将其乘以另一个正弦波,移除图像,并将最终结果提供给 AudioTrack。基础知识请参考教科书《信号与系统》。

    【讨论】:

    • 谢谢,我想出了一个主意:如果我知道特定时间的幅度,我可以使用正弦回归得到正弦方程,从而得到频率。但这也能解决泛音问题吗?我假设麦克风确实记录了所有的泛音,所以只计算一个点的每个幅度的所有正弦函数就应该给出解决方案,对吗?
    • 你说对了一部分。任何音调都可以通过多个正弦/余弦波的组合来表示。获得正弦/余弦波系数的最有效方法是 fft。您需要对音频数据样本进行分组以执行 fft,而不是逐个样本进行。单个数据点不包含任何频率均值,而只有一条数据包含。
    猜你喜欢
    • 2018-06-18
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2019-11-02
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多