python - 关于歌曲背景音乐生成方法的问题

标签 python audio audio-player background-music

<分区>

我有一个项目建议,适合没有音频处理知识的音乐爱好者。我认为这个项目很有趣,但我不清楚如何实现它。

项目建议:有些人喜欢唱歌,但是找不到合适的伴奏(背景音乐)。会弹吉他的人,可以边弹吉他边唱歌(吉他提供的节奏就是背景音乐)。该项目旨在实现类似为人们唱歌弹吉他的结果。

我认为要实现这个项目,需要以下组件:

  1. 音乐知识(吉他如何作为背景音乐演奏(也许简单的模式就可以))
  2. 信号/音频处理

    • 按键检测
    • 节拍检测
    • 和弦匹配

为了实现我的目的,我是否还遗漏了任何其他组件?任何图书馆都可以帮助我吗?该项目预计在 1.5 个月内完成。是否可以? (我只是希望它能像吉他初学者演奏背景音乐一样工作)。对于开发语言,我不会使用c/c++。目前我最喜欢的是python,但也可以使用其他编程语言,只要它有助于简化实现过程。

我没有音乐背景,只学习非常基础的音频处理。欢迎提出任何建议或意见。


编辑信息: 我试着搜索自动伴奏,有一些软件。我没有找到它的任何开源项目,我想知道它如何处理音频信息的细节。如果您知道任何关于它的开源项目,请分享您的知识,谢谢。

最佳答案

您可能首先考虑吉他手在事先不了解歌曲的音调、和弦进行或节奏(更不用说其结构、风格等)

在伴奏者(人或计算机)之前没有听过这首歌的情况下实时执行此操作将很困难,因为需要一些时间来分析正在演唱的内容以便针对歌曲做出适当的音乐选择伴奏。在现实世界中具有这种能力的吉他手或其他音乐家将被视为高技能。

如果你没有音乐背景,1.5 个月的时间听起来是一个非常具有挑战性的项目。 “也许简单的模式会起作用”——也许吧,但是有大量的简单模式是可能的!

不太雄心勃勃的项目可能是:

  • 录制整首歌曲并对其进行分析,然后渲染伴奏(仍然是 很多工作!)
  • 创建一个单一的和谐线或部分,在同一个 人声协调器效果的方式
  • 根据 用户输入的和弦进行

编辑回复您的第一条评论:

如果您想生成完整的伴奏,您将需要(如您所说)处理调和弦进行以及时间(包括拍号和检测小节的哪个节拍是“节拍 1”)

获得这种级别的计时信息可能很困难,因为使用用于从歌曲中获取节拍的标准技术(寻找特定频率范围内的振幅峰值)不可能仅从语音中检测节拍。

您可能仍然会通过根本不计算时间而获得好的结果,而只是在演唱音符(或其中的一个子集)的开始时及时演奏您的和弦。

接下来你需要做的就是

  • 检测笔记。这篇文章是关于在 python 中检测音高的:Python frequency detection .振幅检测更直接。
  • 想出一个算法来计算乐曲的根音(以及 - 更雄心勃勃 - 变化的地方)。在某些情况下,可能很难仅从旋律中辨别出来。您可以首先假设第一个音符或最常见的音符是根音。
  • 想出一个生成和弦进行的算法(在网络上搜索“和声旋律”)。显然,没有客观上正确或错误的方法来做到这一点,您可能只能针对有限范围的样式令人信服地做到这一点。您可能希望首先假设一个有限的和弦子集,例如I、IV、V。这些应该适用于最简单的“童谣”风格的曲调。

当然,如果您将自己限制在从第一拍开始的简单曲调,您可能会更轻松地计算出拍号。总的来说,我认为您成功的途径是首先尝试处理简单的案例,然后在此基础上进行构建。

关于python - 关于歌曲背景音乐生成方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151170/

相关文章:

python - CSV 文件和字典

audio - 在 ffmpeg 中将 m4a 转换为 WAV 文件(包含签名的 16 位 PCM 样本)

Android:尝试使用输入播放列表从我的应用启动音乐播放器

flutter - 多次播放相同的音频文件-Audioplayers Flutter

java - 在ListView中显示外部SD卡中的音乐文件列表

python - 将 Pandas 日期列转换为经过的秒数

python - 从字典中读取字典

scala - Scala-播放声音-蜂鸣

android - 注册为音乐播放器

python - 谷歌appengine python 调试器