gpt4 book ai didi

c - 通过微 Controller 实现乐器自动化教学

转载 作者:行者123 更新时间:2023-11-30 20:41:04 27 4
gpt4 key购买 nike

该项目的前提是:

例如,会有预先录制的吉他轨道。学生将用吉他弹奏同一首轨道。我需要比较这两个声音,看看学生弹得好不好。我将首先使用 STM32 微 Controller 和 Keil uVision 软件进行仿真(用 C 语言编程)。

我知道我将使用使用 DMA 的 ADC,并且我假设我会对波信号进行快速傅里叶变换,然后以某种方式比较两个频率响应。另外,节奏会不会有问题?我的意思是,每个音符都会击中确切的毫秒然后进行比较,这是不合逻辑的

我见过一些方法,例如隐马尔可夫模型或 Goertzel 算法,但我不太确定它们的作用以及它们是否对项目来说是最佳且简单的。所以我的问题是:是否有一种最适合的特定算法以及如何在我的代码上实现它(因为我还没有真正开始编写代码,到目前为止主要是理论阅读)。

编辑:我昨天发了一篇类似的帖子,但我的前提太复杂,无法解决,所以我在一个新的前提上发帖,更容易完成。我认为不要在第一个线程中询问,因为它会混淆两个不同的问题。

最佳答案

假设您可以使用 FFT 找出哪些音符在什么时间演奏(这对于扭曲的吉他和弦来说可能很困难),您可以这样做,例如两个流每秒 10 次,然后检查两个流中的音符匹配的频率。这将为您提供一个百分比,如果您需要二进制值,则必须使用阈值。

如果两个流的长度不相等(节奏不同),那么您将不得不拉伸(stretch)。您不必拉伸(stretch)实际音频,只需拉伸(stretch)音符测量之间的时间(例如,第一个流每 100 毫秒一次,第二个流每 125 秒一次)。

因此,最大的问题可能是找出在任何给定时刻正在演奏的音符。我首先构建频率到音符的映射。此外,对 1100 Hz 左右的信号进行低通滤波可能是一个好主意,这样可以消除一些不需要的谐波(无论如何你都不能在吉他上演奏比吉他更高的谐波),并且类似地对信号进行高通滤波80 赫兹。然后在FFT或DFT之后(不确定您选择哪个重要),找到接近真实音符频率的频率。然后选择最响亮的声音以及相对于最响亮的声音高于某一阈值的声音(例如,丢弃任何声音小于最响亮声音一半的声音,但需要进行一些实验才能找到一个好的阈值)。

关于c - 通过微 Controller 实现乐器自动化教学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18918871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com