强得离谱,AI音乐的 Stable Diffusion: MusicGen

news2024/10/5 18:25:12

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。

针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。

合集:

《大模型面试宝典》(2024版) 正式发布!
《AIGC 面试宝典》已圈粉无数!


Meta 推出了一个基于深度学习的AI音频处理库 AudioCraft,其中包含了音乐生成模型MusicGen。相对于不久前Google也推出了MusicML,Meta 这个音频库真的是强得离谱!

Audiocraft 采用了最先进的EnCodec音频压缩器/标记器技术,用于音频数据的处理和压缩。同时引入了MusicGen,这是一个简单可控的音乐生成大模型。MusicGen使用了Transformer架构,能够从文本输入中生成新的音乐作品。

图片

项目地址

github.com/facebookresearch/audiocraft

在线体验

huggingface.co/spaces/facebook/MusicGen

MusicGen 提供了4种音乐生成方式:

  • 无条件生成

  • 旋律+文本:输入音频文件的旋律,配以prompt,生成新的音乐,能够将现有的旋律转化成新的歌曲

  • 节奏+文本:可以用程序生成一段周期音,配以prompt,生成节奏相同的全新音乐

  • 文本生成音乐:提供一段prompt指定不同的风格,转化为全新的音乐作品

这次开源了四个级别的模型,其中中等模型(medium, melody)可以在16GB显存的显卡里运行:

  • small: 300M model, text to music only (huggingface.co/facebook/musicgen-small)

  • medium: 1.5B model, text to music only (huggingface.co/facebook/musicgen-medium)

  • melody: 1.5B model, text to music and text+melody to music (huggingface.co/facebook/musicgen-melody)

  • large: 3.3B model, text to music only (huggingface.co/facebook/musicgen-large)

目前用户还不能自己训练模型,但官方已预告,很快会开源训练代码。

接下来安装体验。

安装环境

AudioCraft安装起来非常简单: 这里选用了 Python 3.9 + torch 2.0.0 + torchaudio 2.0.0

conda create -n audiocraft python=3.9
activate audiocraft

pip install d:\pylib\torch-2.0.0+cu117-cp39-cp39-win_amd64.whl
pip install d:\pylib\torchaudio-2.0.0+cu117-cp39-cp39-win_amd64.whl
pip install ffmpeg

cd d:\aiworkflow
git clone https://github.com/facebookresearch/audiocraft.git
cd audiocraft

pip install -e .

下载模型

添加windows环境变量,如果不添加,则模型默认会下载到位于C盘的用户的.cache目录下,:

MUSICGEN_ROOT = D:\AIWorkFlow\audiocraft\models

编辑并运行以下代码

import torchaudio
from audiocraft.models import MusicGen

# 选择模型,四选一 small/medium/melody/large
# 如果没有则会从 huggingface 自动下载
# 请先设置系统环境变量 MUSICGEN_ROOT
model = MusicGen.get_pretrained('melody')

当上述模型为melody时,需下载的模型文件为:

  • compression_state_dict.bin [225MB]

  • state_dict.bin [2.58GB]

  • 955717e8-8726e21a.th [80MB]

  • pytorch_model.bin [850MB]

无条件生成

import torchaudio
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write

# 选择模型,四选一 small/medium/melody/large
# 如果没有则会从 huggingface 自动下载
# 请先设置系统环境变量 MUSICGEN_ROOT
model = MusicGen.get_pretrained('melody')

# 音乐时长设为12秒
model.set_generation_params(duration=12)

wav = model.generate_unconditional(num_samples=3, progress=True)

for idx, one_wav in enumerate(wav):
    # Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
    audio_write(f'uncond_{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True)

音乐续写

import math
import torch
import torchaudio
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
from audiocraft.utils.notebook import display_audio

# 选择模型,四选一 small/medium/melody/large
# 如果没有则会从 huggingface 自动下载
# 请先设置系统环境变量 MUSICGEN_ROOT
model = MusicGen.get_pretrained('melody')

# 产生一段间歇的bip bip旋律
def get_bip_bip(bip_duration=0.125, frequency=440,
                duration=0.5, sample_rate=32000, device="cuda"):
    """Generates a series of bip bip at the given frequency."""
    t = torch.arange(
        int(duration * sample_rate), device="cuda", dtype=torch.float) / sample_rate
    wav = torch.cos(2 * math.pi * 440 * t)[None]
    tp = (t % (2 * bip_duration)) / (2 * bip_duration)
    envelope = (tp >= 0.5).float()
    return wav * envelope

# 音乐时长设为12秒
model.set_generation_params(duration=12)

# 根据bipbip声的旋律,及两段prompt,生成新的音乐
wav = model.generate_continuation(
    get_bip_bip(0.125).expand(2, -1, -1), 
    32000, ['Jazz jazz and only jazz', 
            'Heartful EDM with beautiful synths and chords'], 
    progress=True)

for idx, one_wav in enumerate(wav):
    # Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
    audio_write(f'test3_{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True)

音乐+文本

import torchaudio
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write

# 选择模型,四选一 small/medium/melody/large
# 如果没有则会从 huggingface 自动下载
# 请先设置系统环境变量 MUSICGEN_ROOT
model = MusicGen.get_pretrained('melody')

# 音乐时长设为12秒
model.set_generation_params(duration=12)

# 三段prompt
descriptions = [
    "a piano playing a sad chambers music, canon style",
    "a light and cheerly EDM track, with syncopated drums, aery pads, and strong emotions",
    "A grand orchestral arrangement with thunderous percussion, epic brass fanfares, and soaring strings, creating a cinematic atmosphere fit for a heroic battle.",
  ]

# 参考旋律
melody, sr = torchaudio.load('./assets/bach.mp3')

wav = model.generate_with_chroma(descriptions, melody[None].expand(3, -1, -1), sr)

for idx, one_wav in enumerate(wav):
    # Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
    audio_write(f'Melody_{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True)

文本生成音乐

import torchaudio
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write

# 选择模型,四选一 small/medium/melody/large
# 如果没有则会从 huggingface 自动下载
# 请先设置系统环境变量 MUSICGEN_ROOT
model = MusicGen.get_pretrained('melody')

# 音乐时长设为12秒
model.set_generation_params(duration=12)

# 根据三段prompt生成音乐
descriptions = [
    "a piano playing a sad chambers music, canon style",
    "a light and cheerly EDM track, with syncopated drums, aery pads, and strong emotions",
    "A grand orchestral arrangement with thunderous percussion, epic brass fanfares, and soaring strings, creating a cinematic atmosphere fit for a heroic battle.",
  ]
wav = model.generate(
    descriptions,
    progress=True
)

for idx, one_wav in enumerate(wav):
    # Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
    audio_write(f'text_{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True)

通过上面的体验,可以感受到音乐的生成质量非常高。其中利用旋律+Prompt的方式非常实用,完全可以从现有歌曲中分离音乐,然后喂给 AudioCraft,再配以文本,生成新的音乐。

深度学习研究,这完全可以成为一个高生产力的AI工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt做群控系统

群控系统顾名思义,一台设备控制多台机器。首先我们来创造下界面。我们通过QT UI设计界面。设计界面如下: 登录界面: 登录界面分为两种角色,一种是管理员,另一种是超级管理员。两种用户的主界面是不同的。通过选中记住…

2024加密软件排行榜|最新企业常用加密软件推荐

安秉网盾加密软件: 专注于企业级的透明加密解决方案,确保公司内部文件在公司环境外无法被访问。 审批机制灵活,支持多种审批方式,方便管理。 广泛应用于多个行业,拥有丰富的企业环境适配经验。 适合对内部数据安全有严…

RockChip Android12 System之Datetime

一:概述 本文将针对Android12 Settings二级菜单System中Date&time的UI修改进行说明。 二:Date&Time 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name="Settings$DateTimeSettingsActivity"android:label="@stri…

无线领夹麦克风哪个牌子好?什么牌子的麦克风好?本期文章告诉你

​在音频设备日益多样化的今天&#xff0c;无线领夹麦克风以其独特的优势脱颖而出。它设计精巧&#xff0c;佩戴舒适&#xff0c;能够在各种环境下保持稳定的音质和传输效果。无论是户外拍摄、室内直播还是大型演出&#xff0c;无线领夹麦克风都能为你提供卓越的音频体验&#…

Altair 人工智能技术助力MABE预测消费者行为,实现设备性能优化

主要看点 行业&#xff1a; 家电行业 挑战&#xff1a; 企业面临的挑战是如何利用已收集的大量数据&#xff0c;深入了解消费者在产品使用过程中对某些保鲜程序的影响。 Altair 解决方案&#xff1a; Altair采用了Altair RapidMiner人工智能平台来解决问题&#xff0c;特别是…

全额返现消费新模式,会员裂变模式,积分返利模式

在拆解了近千个商业案例&#xff0c;总结了上百种模式&#xff0c;今天这篇文章我们一起来看一下市面上常用的消费全返模式三种方式&#xff0c;每种方式都有其应用场景和优缺点。 第一种&#xff0c;消费返积分 这是一种社交电商的经典玩法&#xff0c;通常的形式呢是拼团产品…

yolov10--C#接口

一、前言 本章主要讲解yolov10的C#接口&#xff0c;主要是使用微软开发的openvinocsharp工具加载yolov10模型&#xff0c;并做推理。 二、yolov10模型转换 这里为了演示&#xff0c;使用官方yolov10m模型&#xff08;其他大小的模型同理&#xff09;做演示&#xff0c;可从下方…

构建LangChain应用程序的示例代码:37、基于LangGraph的文档检索与答案生成系统教程

这示例它实现了一个基于LangGraph的系统&#xff0c;用于处理文档检索和生成答案的过程。 好的&#xff0c;我会按照Markdown格式完整翻译并保留文件结构和格式&#xff1a; ! pip install langchain_community tiktoken langchain-openai langchainhub chromadb langchain lan…

聚类分析 #数据挖掘 #Python

聚类分析&#xff08;Cluster Analysis&#xff09;是一种无监督机器学习方法&#xff0c;主要用于数据挖掘和数据分析中&#xff0c;它的目标是将一组对象或观测值根据它们之间的相似性或相关性自动分组&#xff0c;形成不同的簇或类别。聚类分析并不预先知道每个观测值的具体…

cloudflare worker访问自己的网站显示521问题解决

写在前面&#xff1a;如果你的网站不是在80端口上运行的&#xff0c;开一下80端口可能就行了… 1.在cloudlare上添加域名 前文搭建了自己的DNS服务器&#xff08;DNS服务器搭建&#xff09;&#xff0c;现在想通过自己的DNS服务器解析域名&#xff0c;需要四步&#xff1a; 添…

2Y0A21 GP2Y0A21YK0F 红外测距传感器 arduino使用教程

三根线 正极负极信号线 确认自己的三根线分别代表什么&#xff0c;我们的颜色可能不一样 附一张我买的传感器他们的说明图 正极 接 开发板5V 负极 接开发板GND 信号线 接A0 代码arduino ide上面写 // Infračerven senzor vzdlenosti Sharp 2Y0A21// připojen potře…

vscode-关闭ts与js语义校验

1.ts与js语义校验 TypeScript&#xff08;TS&#xff09;和JavaScript&#xff08;JS&#xff09;在语义校验方面有很大的不同。TypeScript是一种静态类型检查的编程语言&#xff0c;它是JavaScript的一个超集&#xff0c;为JavaScript添加了类型系统和其他一些特性。而JavaScr…

软件测试技术(一):软件测试流程

软件测试流程 软件测试流程如下&#xff1a; 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写&#xff0c;用于确定各个测试阶段的目标和策略。这个过程将输出测试计划&#xff0c;明确要完成的测…

有个网友问Webview2如何另存为mhtml

有个网友问Webview2如何另存为mhtml 。俺查了一下&#xff0c;Webview2没有直接的saveas函数。然后我查到 之后我就使用 webview2 capture 这2个关键字去查询&#xff0c;果然搜到了 一段代码 然后我把这段代码 改成成C#的&#xff0c; string data await webView21.CoreWebV…

这四个有意思的工具,很香

提醒英雄 提醒英雄应用是一款能够帮助用户彻底解决健忘症的应用程序。该应用创建的事项会完全同步到通知中心&#xff0c;并且持续保持在锁屏界面上&#xff0c;只要打开手机&#xff0c;用户就会看到之前设置的提醒事项。这种设计确保了用户在任何时候都能及时收到提醒&#…

[C#] opencvsharp对Mat数据进行序列化或者反序列化以及格式化输出

【简要介绍】 在OpenCVSharp中&#xff0c;FileStorage类用于将数据&#xff08;包括OpenCV的Mat类型数据&#xff09;序列化为XML或YAML格式的文件&#xff0c;以及从这些文件中反序列化数据。以下是关于FileStorage类用法的详细说明&#xff1a; 写入数据&#xff08;序列化…

铠侠全面复产:NAND价格还会涨吗?

近期&#xff0c;日本经济新闻&#xff08;Nikkei&#xff09;报道指出&#xff0c;经历长达20个月的产能削减后&#xff0c;全球第四大三维NAND闪存制造商铠侠已全面恢复生产。这一转变不仅标志着铠侠再次全力投入到市场份额的争夺中&#xff0c;也可能预示着闪存市场价格即将…

深入探究RTOS的任务调度

阅读引言&#xff1a; 此文将会从一个工程文件&#xff0c; 一步一步的分析RTOS的任务调度实现&#xff0c; 这里选用FreeRTOS分析&#xff0c; 别的也差不多的&#xff0c; 可能在细节上有少许不一样。 目录 1&#xff0c; 常见嵌入式实时操作系统 2&#xff0c; 任务调度的…

数据库系统概述选择简答概念复习

目录 一、组成数据库的三要素 二、关系数据库特点 三、三级模式、二级映像 四、视图和审计提供的安全性 审计(Auditing) 视图(Views) 五、grant、revoke GRANT REVOKE 六、三种完整性 实体完整性 参照完整性 自定义完整性 七、事务的特性ACDI 原子性(Atomicity)…

基于卷积变分自编码器的心电信号异常检测

代码较为简单&#xff0c;运行代码如下&#xff1a; # Built-in libraries # import os import time import random import pandas as pd import numpy as np from tqdm import tqdm # ------------------------------- # Visualization libraries # import matplotlib.p…