不知道你有没有这种感觉,最近打开音乐软件,或者刷社交媒体,总能看到一些关于“AI歌曲”的讨论。一会儿说某首AI生成的歌登上了国外权威榜单,一会儿又说哪个AI虚拟歌手一夜爆红。你是不是也一头雾水,心里直犯嘀咕:AI做的歌真的能听吗?它怎么就上了排行榜,和我们平时听的歌有什么不一样?今天,咱们就抛开那些难懂的术语,像聊天一样,把这“AI排行榜歌曲”的事儿,给捋个明白。
说起来,AI搞音乐也不是一天两天了,但以前可能更像是个玩具,做出来的东西机械感十足。可就在最近这一两年,情况有点不一样了。你发现没,好像一夜之间,它就闯进了主流视野。
最直接的证据,就是它开始出现在我们熟悉的排行榜单上了。比如在Billboard(你可以理解为美国的“音乐风云榜”)的某个细分榜单上,一首叫《Walk My Walk》的歌登顶了冠军。而这首歌的演唱者,压根不是真人,是一个叫Breaking Rust的AI虚拟牛仔。这事儿在当时引起了不小的震动,很多人第一次意识到:哦,原来AI做的音乐,已经能达到被大众广泛收听、甚至喜爱的水准了。
不光是国外,国内也一样热闹。在B站上,有创作者用AI生成了一系列西游记主题的原创歌曲,播放量轻松破千万。QQ音乐也玩起了新花样,推出了用AI语音深度解读歌曲榜单的功能,让你边听歌边了解背后的故事。更别提各种AI音乐创作大赛了,涌现出不少让普通听众都觉得“挺好听”的作品。
所以你看,AI音乐的火,不是凭空烧起来的。它背后是技术的突飞猛进。现在的AI音乐模型,比如一些国际知名的,还有咱们国内自己研发的,已经能做到生成的人声非常逼真,旋律编排也像模像样。简单说就是,它听起来,越来越像“一首歌”了,而不是电子合成的怪声音。
我猜你下一个问题就是:这种歌,真的有人听吗?是谁在听呢?
这其实是个特别有意思的点。咱们分两头看。一方面,确实有很多像你我一样的普通听众,在完全不知道这是AI创作的情况下,就被歌曲本身打动了。可能是在开车时无意间听到电台播放,或者是在歌单里随机推荐到了,觉得旋律不错,歌词也有共鸣,就收藏了。对于这部分听众来说,“好听”是唯一的评判标准,他们不太关心背后的创作者是人是机器。
但另一方面,一旦“这是AI做的”这个标签被公开,情况就变得复杂了。有人会觉得特别酷,科技感十足;但也有人会立刻产生排斥,觉得缺乏“灵魂”,甚至有种上当受骗的感觉。这就好比你知道一幅画是打印机打的,哪怕它再精美,心里的价值感也会打折扣。
那么,AI歌曲靠什么吸引听众呢?我琢磨了一下,大概有这么几个“法宝”:
*极致的声音表现:AI歌手可以轻松驾驭人类难以持续稳定的高音、转音,声音也可以根据歌曲风格随意切换,今天是深情烟嗓,明天是空灵女声,堪称“全能声库”。
*不知疲倦的创作:它不需要灵感,输入指令就能快速生成大量作品,风格多变,从流行、摇滚到民谣、古风,几乎无所不包。
*精准的“情绪”拿捏:现在的AI很擅长分析海量的人类音乐数据,能摸清什么样的和弦走向让人感到悲伤,什么样的节奏让人想跳舞,从而批量生产出符合大众口味的“悦耳”作品。
所以,它的听众群体正在慢慢形成。有的是科技爱好者,有的是追求新鲜感的年轻人,还有的,就是单纯被某首歌击中了情绪的路人。
聊到这儿,那个最扎心、谁也绕不开的问题肯定冒出来了:AI这么能干,以后还需要人类音乐人吗?是不是作曲家、歌手都要失业了?
别急,咱们先别下结论。我的看法是,短期内,取代谈不上,但冲击和改变是实实在在的。
我们可以用一个简单的对比来想想:
| 思考维度 | AI音乐 | 人类音乐 |
|---|---|---|
| :--- | :--- | :--- |
| 创作速度 | 极快,几分钟甚至几秒就能生成一首 | 慢,需要灵感、打磨和反复修改 |
| 技术上限 | 音准、技巧完美,能实现超人类演唱 | 受生理条件限制,但独特嗓音和瑕疵可能成为魅力 |
| 情感来源 | 基于数据分析和模式模仿,是“计算”出的情感 | 源于真实的个人经历、生命体验和即时的情感迸发 |
| 核心价值 | “怎么做”——高效生产符合规律的音乐产品 | “为什么做”——通过音乐传递独一无二的思想、故事和灵魂 |
看出来了吧?AI的优势在于效率和技术的完美复现,它是个超级强大的工具和生产力的延伸。但它目前最大的短板,恰恰是人类最珍贵的东西:那种不可复制的、源自真实生命体验的“灵魂”和“原创性”。
一首打# gatsby-remark-prismjs-copy-button
[](https://badge.fury.io/js/gatsby-remark-prismjs-copy-button)
[](https://github.com/hupe1980/gatsby-remark-prismjs-copy-button/blob/master/LICENSE)
A Gatsby plugin to add a copy button to code blocks.
This plugin is based on [gatsby-remark-prismjs](https://www.gatsbyjs.org/packages/gatsby-remark-prismjs/).
Make sure you have installed and configured the plugin in your project before you install this plugin.
```bash
npm install gatsby-remark-prismjs-copy-button
```
```javascript
// In your gatsby-config.js
plugins: [
{
resolve: `gatsby-transformer-remark`,
options: {
plugins: [
{
resolve: `gatsby-remark-prismjs`,
options: {
// Class prefix for
tags containing syntax highlighting;// defaults to 'language-' (e.g.
// (e.g. for use with libraries like react-live),
// you may use this to prevent Prism from re-processing syntax.
// This is an uncommon use-case though;
// If you're unsure, it's best to use the default value.
classPrefix: "e-" // This is used to allow setting a language for inline code
// (i.e. single backticks) by creating a separator.
// This separator is a string and will do no white-space
// stripping.
// A suggested value for English speakers is the non-ascii
// character '?'.
inlineCodeMarker: null,
// This lets you set up language aliases. For example,
// setting this to '{ sh: ""' will let you use
// the language "" will highlight using the
// bash highlighter.
aliases: {},
// This toggles the display of line numbers globally alongside the code.
// To use it, add the following line in gatsby-browser.js
// right after importing the prism color scheme:
// require("prismjs/plugins/line-numbers/prism-line-numbers.css" // Defaults to false.
// If you wish to only show line numbers on certain code blocks,
// leave false and use the {numberLines: true} syntax below
showLineNumbers: false,
// If setting this to true, the parser won't handle and highlight inline
// code used in markdown i.e. single backtick code like `this`.
noInlineHighlight: false,
// This adds a new language definition to Prism or extend an already
// existing language definition. More details on this option can be
// found under the header "dd new language definition or extend an
// existing language" below.
languageExtensions: [
{
language: "" extend: "" definition: {
superscript_types: /(SuperType)/,
},
insertBefore: {
function: {
superscript_keywords: /(superif|superelse)/,
},
},
},
],
// Customize the prompt used in shell output
// Values below are default
prompt: {
user: "root" host: "localhost" global: false,
},
// By default the HTML entities <>&'"e escaped.
// Add additional HTML escapes by providing a mapping
// of HTML entities and their escape value IE: { '}': '{' }
escapeEntities: {},
},
},
`gatsby-remark-prismjs-copy-button`,
],
},
},
];
```
Options
You can customize the plugin by passing an options object.
```javascript
{
resolve: `gatsby-remark-prismjs-copy-button`,
options: {
buttonText: 'Copy',
buttonClassName: 'copy-button',
buttonSuccessText: 'Copied!',
buttonSuccessClassName: 'copy-button-success'
}
}
```
| Name | Type | Default | Description |
|---|---|---|---|
| `buttonText` | string | `'Copy'` | Textdisplayedinthecopybutton |
| `buttonClassName` | string | `'copy-button'` | Classnameforthecopybutton |
| `buttonSuccessText` | string | `'Copied!'` | Textdisplayedaftercopying |
| `buttonSuccessClassName` | string | `'copy-button-success'` | Classnameforthesuccessstate |
The plugin adds a button element to each code block with the specified class names. You can style them using CSS.
Example CSS:
```css
.copy-button {
position: absolute;
top: 0.5em;
right: 0.5em;
padding: 0.25em 0.5em;
background: #007acc;
color: white;
border: none;
border-radius: 0.25em;
cursor: pointer;
font-size: 0.75em;
opacity: 0;
transition: opacity 0.3s;
}
pre:hover .copy-button {
opacity: 1;
}
.copy-button-success {
background: #28a745;
}
```
The plugin works by adding a copy button to each code block generated by `gatsby-remark-prismjs`. When clicked, the button copies the code content to the clipboard and changes its text and class to indicate success.
MIT
