Link

作品

缘起

  • Google Magenta 让我发现,原来计算机还可以作曲。这让我惊喜的发现,音乐和编程,居然可以以这种形式结合。写出来的音乐,也居然挺好听。
  • 对这个领域很感兴趣,但是总觉得太复杂。一看到算法、数学公式就胃疼。而且似乎还有经历数据分析再到机器学习再到深度学习,感觉是一条慢慢长路,太耗时间精力。
  • 大妈 @zoomquiet 上次周会分享的一段话触动了我。你可以放弃理解细节,不代表不用它。他还提到,Google I/O大会发行了一大堆人工智能应用,但给我们使用的界面,必定是异常简洁的。
  • 这给了我很多勇气,也决心把本月的目标定在了探索使用计算机自动作曲。我想试试,大妈说的是真的吗?即使我不了解,我也可以一样使用好它吗?

初识

上手

  • Youtube 的文字说明里,就附上了相关的 Magenta 官方 blog,对音乐如何生成的原理,有很详细的介绍。
  • 相关的代码,也已经在 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 生成的音乐是什么样的呢?我使用了以下方式:

  • 使用 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 项目组,提供这么多高质量的开源代码,提供详尽的官方文档指导,还提供了如此易用的相关基础环境,让这件我原来以为很难的事情,变得如此简单。