Press "Enter" to skip to content

用GPT-4创作歌曲:第三部分,旋律

如何使用OpenAI的最新语言模型帮助创作新歌曲的旋律

“a woman standing, wearing headphones, looking at a computer screen, while singing into a professional microphone,” Midjourney Image by Author

这是我关于使用GPT-4[1]创作音乐的系列文章的第三篇也是最后一篇。我的第一篇文章介绍了为歌曲写歌词的方法,第二篇文章探讨了为歌词编写和弦的方法。在这篇文章中,我会简要介绍GPT-4,然后向你展示如何诱导模型为具有和弦和歌词的歌曲创建旋律。最后,我会进行一般性的讨论,并提供一些使用AI创作音乐的下一步。

GPT-4简介

GPT-4是OpenAI的最新大型语言模型。它可以在他们的ChatGPT服务的付费版本中使用,每月费用为20美元。该模型是他们之前版本GPT-3.5的改进。以下是OpenAI在他们的GPT4网站上对新模型的介绍。

GPT-4比以往更具创造力和协作性。它可以在创意和技术写作任务(如创作歌曲、编写剧本或学习用户的写作风格)上与用户一起生成、编辑和迭代……我们花了6个月的时间使GPT-4更加安全和对齐。在我们的内部评估中,GPT-4比GPT-3.5更不可能回应不允许的内容请求,并且更可能产生事实性的回应-OpenAI

好吧,他们将“创作歌曲”列为创造性任务的例子之一。他们还提到了模型更“对齐”,这是OpenAI让AI模型遵循人类价值和意图的时髦词汇。你可以在他们的技术报告中阅读更多相关信息。

正如我在之前的GPT-4文章中提到的,OpenAI默认收集用户的提示和回复,并可能用它们来改善未来的模型。但是,您可以通过提交此表单来选择退出这种数据收集。

使用GPT-4创作旋律

目前,大型语言模型只处理文本输入和文本输出。然而,OpenAI正在努力扩展GPT-4以使用图像提示。这个模型目前还没有对公众开放,但它在一个名为Be My Eyes的应用程序的测试版中可用。该应用程序通过分析图片并阅读场景的文本描述来帮助盲人或视力受损的人进行日常任务。

对于本文,我探索了使用文本格式让模型创作旋律的各种方法。我发现,这个任务的最佳格式是使用吉他谱记谱法(或tab谱法)。

吉他谱

音乐家使用吉他谱将有弦乐器的音符和和弦转录为纯文本。吉他谱不使用一般的乐谱符号,而是显示在一段时间内使用哪些品位演奏乐器的哪些弦。例如,这是《生日快乐》的第一行作为六弦吉他谱。

Guitar Tab of the Melody for “Happy Birthday” Image by Author

时间在水平轴上,弦在垂直轴上,最低的在底部,最高的在顶部。数字代表在不同时刻演奏哪个品位。更大的数字对应更高的音符。在实验了几次之后,我发现网络训练数据中有足够多带有相应评论的吉他谱,可以让语言模型以这种格式创作。

与GPT-4互动

使用我前两篇文章中的示例歌曲,我要求GPT-4逐部分编写旋律。以下是第一次交互的过程。

RobG:用吉他谱格式为Dogs and Cats这首歌写一段旋律。每个音节弹奏一次。

[G] Dogs and cats, they [C] roam the streets [Em] Furry friends with [D] hearts that beat [G] Claws and paws, they [C] rule the land [Em] Tails a-waggin’, [D] they understand

GPT-4:我是一个基于文本的AI模型,所以我不能创建或播放声音。但我可以给你一个使用吉他谱格式将这些和弦制作成简单旋律的例子,每个音节一个音符。

提供的基本和弦是G、C、Em和D。我将使用G大调音阶作为旋律基础。

请记住,在吉他谱格式中,线代表吉他的弦(从低音E到高音E),数字表示在该弦上弹奏的品格。下面是一个简单的例子:

e|----------------0------------------|-----------------3------------------|B|---------1---3-----3-1---------1--|-------0---1-3-------3-1------------|G|-------0---0-----------2-0--------|-----0---0---------------2-0--------|D|-----2----------------------2------|---2-------------------------------|A|----------------------------------|-----------------------------------|E|----------------------------------|-----------------------------------|     G          C                   Em             De|----------------0------------------|-----------------3------------------|B|---------1---3-----3-1---------1--|-------0---1-3-------3-1------------|G|-------0---0-----------2-0--------|-----0---0---------------2-0--------|D|-----2----------------------2------|---2-------------------------------|A|----------------------------------|-----------------------------------|E|----------------------------------|-----------------------------------|     G          C                   Em             D

这只是一个非常简单的例子,旋律可能无法完全捕捉你歌词的精神,但我希望它能作为一个起点。你可能想要调整节奏和旋律,以适应你的歌曲。

这很有趣。这是一个重复两次的两部分音乐短语。但仔细观察,你会发现短语中的音节太多了;应该是12+11,而不是7+7。而且,竖线并没有对齐。我为第二节重复了这个过程,并在文本编辑器中稍微整理了一下短语,结果是这样的。

e|-------------0-----|-------------------|B|-------1---3---3---|-------0---1-3-----|G|-----0---0---------|-----0---0-----0---|D|---2---------------|---2---------------|A|-------------------|-------------------|E|-------------------|-------------------|     G       C             Em      De|-------------------|-------------------|B|-------0-3-1-0-----|-------0---3-1-----|G|-----1---------2---|-----0---0-----2---|D|---2---------------|---2---------------|A|-------------------|-------------------|E|-------------------|-------------------|     Am      C           G       D

我在这里写了一些Python代码,将吉他谱转换为MIDI文件,以便我可以播放它们以听到它们的声音。该代码基于Brian Caffey的类似项目[2]。以下是完整的乐谱。

Dogs和Cats的乐谱,由作者提供的图像

以下是这首歌的声音。我使用PG Music的Band-in-a-Box来安排这首歌,用钢琴、吉他、贝斯和鼓。请随意跟唱。😀

Dogs和Cats,作者的歌曲

它很简单但很容易上口,有点像儿歌。第一个音符有点奇怪,因为它是一个E,这会使G和弦有效地成为G6。每次出现G和弦时都是如此。我认为这首曲子最好的地方是第三次用Am和G的变化。接下来,我将向您展示如何为一首ska歌曲创作旋律。

“一支ska乐队的黑白专辑封面”,Midjourney Image,由作者编辑

为整首歌曲创作一个主唱旋律

为了进一步测试这种方法,我为在本系列的前两篇文章中开发的歌曲《Dance with the Fear》创作了主旋律。歌词和和弦基于ska乐队The Agents的歌曲《Grow》,我已经得到了他们的允许。我让GPT-4为新歌曲创作了一个旋律,一次一个小节。

创作歌词

像上面使用的方法一样,我让GPT-4为歌词创作了一个旋律,并为其提供了和弦和歌词。我点击了多次重新生成按钮,并在最终确定前仔细检查了结果。

RobG:为这支ska歌曲的旋律写一个吉他谱,每次只弹奏一个音符。

[Em] Waking up to a [G] brand new day, [D] Feeling the fear but [A] not turning away, [Em] Facing the unknown, [G] that’s where we’ll start, [D] With an open mind and [A] a fearless heart.

GPT-4:这是歌曲的一个简单吉他旋律谱,每次只弹奏一个音符。

e|-----------------|-----------------|-----------------|-----------------|B|-----7-8-------8-|-8-8-7-7---------|-5-5-7-7-------8-|-8-8-7-7-5--5-5--|G|---7-------7-7---|---------7--7-7--|-----------7-7---|-----------------|D|-5---------------|-----------------|-----------------|-----------------|A|-----------------|-----------------|-----------------|-----------------|E|-----------------|-----------------|-----------------|-----------------|e|-----------------|-----------------|-----------------|-----------------|B|-----7-8-------8-|-8-8-7-7---------|-5-5-7-7-------8-|-8-8-7-7-5--5-5--|G|---7-------7-7---|---------7--7-7--|-----------7-7---|-----------------|D|-5---------------|-----------------|-----------------|-----------------|A|-----------------|-----------------|-----------------|-----------------|E|-----------------|-----------------|-----------------|-----------------|

请注意,这个谱是旋律的简化版本,您可以根据需要进一步修改和装饰它以适合您的演出或编曲。

这就是旋律的样子。

Dance with the FearVerse,由作者作曲

总的来说,它做得还不错。它为第一个乐段建立了主题,并为第二个乐段提供了一个不错的解决方案。但是,再一次,它为歌词创造了太多的音符。

创作前副歌

前副歌是引导歌曲副歌的旋律。请注意,ChatGPT用户界面包括会话中以前交互的上下文,因此我在提示生成前副歌的旋律时可以更简洁。

为前副歌创作旋律。

[Am] No more hiding, [C] no more doubts, [G] It’s time to let our [D] courage out.

GPT-4:当然,我可以使用提供的和弦进行前副歌的简单旋律。这是谱表:

e|------0-0-0-0----|-0---------------|-----------------|-0---------------|B|----1----------|----3-1-1-1-1---|----1-3-3-1-3-3-|-------3-3-1-3-3-|G|--0--------------|---------------|----------------|----------------|D|-----------------|----------------|----------------|----------------|A|-----------------|----------------|----------------|----------------|E|-----------------|----------------|----------------|----------------|

这个旋律分别使用了A小调、C大调、G大调和D大调的音阶。和往常一样,随时可以根据表演需要进行修改。

我确定它在回应中想用“和弦”这个词而不是“音阶”,因为它生成的旋律是在G大调中。为了确认,我询问了一下。

RobG: 你是想用“和弦”这个词吗?

GPT-4: 对于造成的任何困惑,我道歉。我的意思是旋律音符基于各自的和弦而非音阶。

好的,这就解决了。至于旋律,我感觉它写的许多音符可以被解释为持续音符。换句话说,四个八分音符的一串可以被演奏为一个半音符。这反映出吉他谱格式的限制,即音符长度未表示。从这个角度来看,这个旋律不错。这是副歌的旋律,原来的写法以及我将一些重复的音符转换为单一的长音符后的写法。

与恐惧共舞,副歌,作者创作的歌曲

好的,第二次演奏听起来带有持续音符,效果更好。以下是歌词和和弦,供参考。

[Am] 不再躲藏,[C] 不再怀疑,[G] 是时候让我们的[D]勇气释放。

全部四个部分

我为副歌和桥段重复了这个过程,并将它们组装成了一个用钢琴演奏的单一乐谱。这是歌曲的四个部分。

与恐惧共舞,全部部分,作者创作的歌曲

对于这个版本的歌曲,我清理了所有重复的音符,使它们与歌词的节奏和韵律相匹配。总体而言,旋律的质量很好。没有不悦耳的音符,短语与基础和弦相协调。

接下来,你可以听到一位真正的人类歌手演唱这首歌。

Kate Li演唱《与恐惧共舞》,作者图片

我非常感谢我的朋友和同事Kate Li为本文演唱了这首歌曲。她将歌曲转调六个半音,从G调变为D-flat调,以适应她的音乐范围。我使用Band-in-a-box用钢琴、吉他、号角、低音和鼓填充了器乐。这是完成的歌曲。

与恐惧共舞,作者创作的歌曲

Kate非常出色地演唱了主唱和和声部分。她为副歌带来了很多情感冲击力,在桥段中提供了上升的旋律和一些不错的即兴演唱。请在这里或SoundCloud上告诉我你的想法。

讨论

虽然有点费力,但我成功让GPT-4为新歌曲生成了旋律。吉他谱格式很难处理,但目前它是最好的方式。当OpenAI发布具有视觉功能的GPT-4版本时,我希望它已经看到了大量的乐谱,以帮助进行旋律创作。

在本系列中我设定的三个音乐创作任务中,第二篇文章中的和弦分析和生成工作效果最好。虽然不完美,但语言模型具有深入的音乐理论知识,可以轻松创建新的和创新的和弦进行。

GPT-4分析和创建歌词,第一篇文章中讨论的内容,也很容易使用,但生成的歌词常常很简单和陈词滥调。虽然系统知道如何押韵,但需要一些工作来引导系统创作独特、令人兴奋和有意义的歌词。

源代码

此项目的源代码可在GitHub上获取。

知识共享署名相同

致谢

我要感谢Kate Li为本文演唱的歌曲。我还要感谢来自Agents的Pete Fayan参与此项目。最后,我要感谢Jennifer Lim审查本文并提供反馈。

更多关于使用GPT-4创作歌曲

这是本系列文章的前两篇。

使用GPT-4创作歌曲:第1部分,歌词

如何使用OpenAI的最新语言模型帮助创作原创歌曲的歌词

towardsdatascience.com

使用GPT-4创作歌曲:第2部分,和弦

如何使用OpenAI的最新大型语言模型帮助创作原创歌曲的和弦

towardsdatascience.com

参考文献

[1] OpenAI,GPT-4技术报告(2023)

[2] B. Caffey,使用Python和正则表达式从吉他谱生成MIDI文件(2018)

要获取小猪AI上所有文章的无限访问权限,请成为每月5美元的会员。非会员每月只能阅读三篇锁定的故事。

Leave a Reply

Your email address will not be published. Required fields are marked *