洋红.js是一个新的JavaScript套件,带有一个简单的API,用于使用洋红模型生成音乐和艺术。因为它是建立在TensorFlow.js公司,它通过WebGL加速在浏览器中运行。开始于goo.gl/代理/js或者阅读下面的更多信息!

这是我们用它制作的一个简单演示,它播放了源源不断的音乐VAE样品:

介绍

在过去的2年里,Magenta项目一直致力于闭合机器学习研究人员、创意开发人员和传统艺术家之间的循环,以实现并增强所有使用机器学习的人的创意潜力。

在这段时间里,对于我们这些致力于谷歌大脑团队一直以来,关注我们与开发人员社区的联系会产生工具和经验,从而弥合我们的研究与最终用户之间的差距。有了JavaScript,我们看到了一个巨大的机会,可以为这些开发人员提供构建ML增强的创造性界面所需的工具。

近年来,由于浏览器的改进,JavaScript已经成为一种更加强大和重要的语言,WebGL加速了线性代数包,如TensorFlow.js公司,由诸如电子渐进式Web应用程序和代码共享网站,如代码笔.io.

我们之前在共享TensorFlow.js实现时探讨了模型的开放JavaScript API的潜力音乐VAE一些非常有天赋的开发人员潜在循环,旋律混音器、和搅拌搅拌机。这些应用程序让我们非常兴奋,所以我们决定专注于一个更完整的JavaScript套件,我们称之为洋红.js.

@洋红/音乐

作为该套件的一部分,我们推出的第一个软件包是@洋红色/音乐其中包括许多基于笔记的音乐模型的实现,如MusicVAE、MelodyRNN、DrumsRNN和ImprovRNN。

为了让您尽可能容易地开始,我们还将在goo.gl/magenta/js-checkpoints网站以及允许使用单行代码自动加载它们的配置文件:

常数  = 毫米.音乐VAE(检查点URL);

因为推理在本地运行,所以权重必须传输到客户端浏览器。因此,这些模型是根据检查点的大小进行训练的,有时为了达到合理的包大小,会牺牲准确性。

示例

为了测试API,我们两人尝试构建我们的第一网络应用程序。

无尽的三重奏“亚当·罗伯茨

为了演示从中随机生成三重奏是多么简单音乐VAE,我写了下面的片段,你可以把它粘贴到一个空的.html格式文件,在你的浏览器中打开,你会听到一个永无止境的三重奏流。

<html>
  <头部>
    <!-- 加载@洋红色/音乐-->
    <脚本型钢混凝土="https://cdn.jsdeliver.net/npm网址/@洋红/音乐@1.0.0"></script>

    <!-- 将代码放在下面的脚本标记中。您还可以使用外部.js文件-->
    <脚本>
      //通过加载所需的检查点来实例化模型。
      常数 模型 = 新的 毫米.音乐VAE(
          'https://storage.googleapis.com/download.magenta.tensorflow.org/' +
          'tfjs_checkpoints/music_vae/trio_4bar_lokl_small_q1');
      常数 运动员 = 新的 毫米.玩家();

      常数 开始 = () => {
        文件.按Id获取元素("开始").风格.显示 = "没有人";
        //在用户操作上恢复AudioContext以启用音频。
        毫米.玩家.语气.上下文.简历();
        模型.初始化()。然后(
          //无休止地采样并回放结果。
          功能 示例和播放() {
            返回 模型.样品(1)
                .然后((样品) => 运动员.开始(样品[0]))
                .然后(示例和播放);
          })};
    </script>
  </头>
  <body><按钮 标识=“开始” onclick(单击)=“启动()”>起点</按钮></body>
</html>

然而,我随后发现了一个(不合理地弃用)HTML元素,名为天棚我忍不住。结果是“无尽的三重奏”页面顶部的演示。对不起的!

由于完整的16巴三重奏模型的重量总计为880MB,我将该模型的一个小型版本训练为4巴序列,并将每个重量量化为8位,从而将总重量减少到不到18MB。不幸的是,这意味着三人组不会像全模型样本,但我认为它们仍然引人注目,有时真的很好!

漫不经心的即兴表演“作者:Ian Simon

我制作了一个通过和弦即兴创作的模型的小演示。它有时会出错!这里没有什么特别之处,因为这只是一个和弦调节的旋律LSTM,但界面使它很容易处理不同的进行曲。

构建基块

当然,有更多可用的模型和无限的创意互动可能性,这就是更广泛的洋红社区的用武之地。例如,洋红贡献者Tero Parviainen公司他帮助开发了Magenta.js,已经构建了一系列非常激动人心的应用程序。一个例子是潜在周期它使用ImprovRNN和MusicVAE来产生一种有趣的冥想互动:

玩更多Tero的作品,了解他在中使用Magenta.js进行建筑的经验他的博客帖子.

接下来是什么?

我们希望你能帮助我们回答这个问题!现在核心库已经可用,我们将继续添加模型,但我们需要您的帮助,使其尽可能适用于您梦想中的各种应用程序。

请为回购并使用洋红标记codepen.io并在我们的讨论列表.如果你使用某人的Magenta.js应用程序制作一些很棒的音乐,也可以与我们分享!

我们迫不及待地想知道你会怎么做。

如何引用

如果您扩展或使用此工作,请引用纸张介绍地点:

@进料{洋红色,title={Magenta.js:通过深度学习增强创造力的JavaScript API},作者={Adam Roberts和Curtis Hawthorne和Ian Simon},年份={2018年},booktitle={音乐机器学习联合研讨会(ICML)}}