audio - APCS 最终项目:将音频文件转换为更简单的 MIDI 文件
问题描述
假设我有生日快乐的音频文件。我想将该音频文件转换为听起来像这样的音频文件:生日快乐。
首先,我想知道我是否有能力对此进行编程?一个几乎完成 APCS 的高中生可以编程吗?
如果可以:我将如何更改歌曲的 bpm?我已经搜索了很多网站,但它们并不是很有帮助。
我知道音频文件可以用波形表示。我将如何扫描音频文件中的每个单独的波形(我需要这个来隔离音符)?
解决方案
实际上,这是一个非常雄心勃勃的项目。原因之一是它涉及使用数字信号处理工具,如 FFT(快速傅立叶变换)来分析声音以找出音高。您也许可以找到一个可以做到这一点的库,但就编写这样的工具而言,这将涉及陡峭的学习曲线。
如果您想进一步了解这一点,有一个很好的在线资源,名为“ The Scientists and Engineers Guide to Digital Signal Processing ”。我只用高中数学(大量的三角函数)和一点微积分就能完成并理解离散傅立叶变换。不过,那是一部电梯。
尝试分析节奏也不是一件容易的事。即使使用诸如 Finale 之类的专业记谱系统中提供的高级工具,人们也很难及时演奏节奏以适应最佳转录工具。“量化”节拍的算法有助于但也限制了回放中可以包含的细节量。
我的猜测是,与这个项目一样有趣和有价值,要在学期结束前完成它需要将预先构建的部分放在一起。现在很多编程都是这样完成的。
如果您将项目缩减为仅让您的代码分析单个音符的简短样本并给出其音调,那么这将是令人印象深刻且可以通过大量工作实现的。可以使用 DFT 算法而不是 FFT 来完成,从而减少您必须首先获取的信息量。这样,您只需努力理解和实施此链接上有关计算 DFT的材料。请注意,BASIC 中有示例代码。本书中的代码示例很有帮助。
推荐阅读
- powershell - Azure DevOPS PowerShell 任务输出和输入参数
- python - 在 y 轴上应用对数正态尺度线性回归,在 x 轴上应用概率尺度
- cassandra - 启用密钥创建后禁用 Cassandra TDE
- excel - 在 Excel 中查找仅可见单元格的条件 MAX
- python - 在 Python Pipeline 中使用 FunctionTransformer 将单个函数应用于 y_train
- python - 如何从滚动网络表格中抓取特定的单词?
- django - AUTHENTICATION_BACKENDS 是 Django 3 的 settings.py 中的默认设置吗?
- xamarin.forms - Xamarin.Forms 将 TapGestureRecognizer 事件传播到父级
- linux-kernel - 内核无法在 linux android 10 内核版本 4.9 的 initramfs 中运行 /init
- html - 我可以在系统范围内阻止来自流行网站的 HTML 元素吗?