Link
作品
- Magenta 制作的第一段音乐 在线试听 @SoundCloud
缘起
- Google Magenta 让我发现,原来计算机还可以作曲。这让我惊喜的发现,音乐和编程,居然可以以这种形式结合。写出来的音乐,也居然挺好听。
- 对这个领域很感兴趣,但是总觉得太复杂。一看到算法、数学公式就胃疼。而且似乎还有经历数据分析再到机器学习再到深度学习,感觉是一条慢慢长路,太耗时间精力。
- 大妈 @zoomquiet 上次周会分享的一段话触动了我。你可以放弃理解细节,不代表不用它。他还提到,Google I/O大会发行了一大堆人工智能应用,但给我们使用的界面,必定是异常简洁的。
- 这给了我很多勇气,也决心把本月的目标定在了探索使用计算机自动作曲。我想试试,大妈说的是真的吗?即使我不了解,我也可以一样使用好它吗?
初识
- 这个领域比较小众,不得不直接读英文资料。但是很多相关的资料写得很抽象,还涉及到一些数学什么的,看不懂,怎么办?
- 我决定先从 Youtube 的视频开始入手。
- 视频比文字更有趣,也更直观,更容易理解。
- 通过搜索一些相关视频,可以了解这个领域大概包括一些什么内容。
- 配合 Google 搜索一些关键词,可以顺藤摸瓜发现更多东西。
- 对这个领域有初步了解后,再读文字资料就没有那么难懂了。
- 通过 Youtube 发掘到了这个领域里,一些好玩的人,一些有趣的应用,也对 Magenta 这个项目越发感兴趣啦。
上手
- Youtube 的文字说明里,就附上了相关的 Magenta 官方 blog,对音乐如何生成的原理,有很详细的介绍。
- Generating Long-Term Structure in Songs and Stories
- 经过之前的背景熟悉,让我对阅读这篇文章,包括文章中说的一些算法,不再觉得害怕了,甚至我还觉得挺有意思的。
相关的代码,也已经在 GitHub 上开源。还附上了非常详尽的介绍。
- magenta/magenta/models/melody_rnn at master · tensorflow/magenta
- 文档中,手把手教你如何安装和使用 Magenta 环境。居然还有已经训练好的 Model 可以直接使用。
根据文档说明做好前面的所有准备工作后,生成音乐只需要这样一段代码,居然就搞定了,居然这么简单!
melody_rnn_generate \ --config=attention_rnn \ --run_dir=/tmp/melody_rnn/logdir/run1 \ --output_dir=/tmp/melody_rnn/generated \ --num_outputs=10 \ --num_steps=128 \ --hparams="{'batch_size':64,'rnn_layer_sizes':[64,64]}" \ --primer_melody="[60]"
如果想要自己进行模型的训练,Magenta 项目也细致的为你提供了免费的音乐数据库,教你如何进行对 MIDI 文件数据处理,并且给出了清晰的步骤。
- magenta/magenta/models/melody_rnn at master · tensorflow/magenta
Magenta 的第一段音乐
Magenta 生成的音乐是什么样的呢?我使用了以下方式:
- 使用 Magenta 提供的已经训练好的 Model,运行程序自动生成了 20 段小的音乐片段。
- 保留其中 5 段比较有意思的,放进 Mac 系统自带的音乐软件 GarageBand。
- 从中选出 3 段组合起来比较协调的,给每段选择不同的乐器,组合在一起。
- 大功告成 -> Magenta01.mp3 在线试听 @SoundCloud
- 我本来以为要一个月才能完成的事情,原来第二天就做完了。大妈说得对,不懂,也并不妨碍你去用它啊。
GPU 助力数据处理
- 在自己进行数据处理的时候,发现自己的小笔记本处理数据还是挺费劲的,跑了一段时间后,滚烫烫的。而且整个过程非常耗时间。几万条数据根本处理不完,我只能先选择几十条数据练手。
- 就是在这个时候,我突然想起了 @sunoonlee 上次的分享 (20170513 DU5wd6 周会 纪要 )。虽然当时觉得他说的东西太高深了,但是对两段话有印象。
- GPU 可以让处理数据的速度大大加快。原来要跑一周的数据,现在一天就能跑完。
- Google Cloud Platform 提供 300 美元的免费试用额度。
- 这不就是解决方案了吗!当时听得时候觉得根本不可能用上的东西,没想到半个月后居然就真的给用上了。
- 正好 Youtube 上也有好心人录了视频给与指导。于是一步步慢慢的跟着做。
- 虽然不太懂,但是得益于视频的详细指导,经历了来来回回的折腾和部署后,几万条数据就在 Google Cloud Platfom 上欢快的跑了起来。不得不说,这处理速度真是太帅了。
最后的感悟
- 本来觉得特别复杂的,觉得一个月都不知道搞不搞得定的事情,居然几天就搞定了,这的太出乎我的预料了。
- 谢谢@zoomquiet 大妈的启发,让我亲身体验到了,原来不懂,真的一点也不妨碍我去使用它。很多事情,真的要去先走走看。
- 谢谢 @sunoonlee 的分享。真的是没想到,半个月后,你这段我当时觉得太高深的分享,居然解决了我的难题。让我真的感受到什么叫意外的惊喜。
- 谢谢 @DebugUself/du4all 每周的陪伴和分享。没有和你们一起的每一天,我也不会想到要探索用编程来探索音乐,也不会想到去这样玩耍。
- 谢谢 Google Magenta 项目组,提供这么多高质量的开源代码,提供详尽的官方文档指导,还提供了如此易用的相关基础环境,让这件我原来以为很难的事情,变得如此简单。