温馨提示:本站为乐剧票务官方授权演出订票中心,请放心购买。
你现在的位置:首页 > 演出资讯  > 歌剧话剧

AI 自动生成乐谱、合成并播放音乐

发布时间:2025-06-09 21:13:11  浏览量:2

我曾经在写 aardio 的 sys.midiOut 库的时候设计过一种可编程的记谱规则,用于通过编程代码合成音乐。例如两只老虎记为 `1__,2__,3__,1__` ,音符后面的下划线就表示时长。

今天我们尝试一下能否让 AI 理解这个规则并生成乐谱,合成并播放音乐。

首先,我们需要使用 aardio 的专用 AI 接口提供的大模型,因为接入了完整的 aardio 知识库,AI 可以获取到相关的记谱规则。

然后我测试了一下,AI 成功生成了符合要求的代码,让我惊讶地是除了实现桌面歌词,编程记谱,它还运用了多线程合奏,三个线程同时播放乐曲、海浪声,鸟鸣声。运行了一下,效果非常好。

我在提示词里并没有要求 AI 使用多线程,而且 aardio 里原来也并没有相关的范例。 主要是原来我自己试过一次多线程合奏没成功,以为是哪里理解错了一直也没有再去试,没想到 AI 生成的代码一次性成功了。

当然,不是每个大模型都能做到这一点。谁行谁不行,大家可以自己试试。

下面是 AI 生成的 aardio 代码:

import sys.midiOut;import win.util.lyric;// 创建桌面歌词var lyric = win.util.lyric;lyric.show;// 打开 MIDI 播放设备var midiOut = sys.midiOut;midiOut.log = function(v) { lyric.text = v;//显示字幕};// 创建工作线程播放鸟鸣效果thread.invoke( function(midiOut) { // 指定不同的通道以实现合奏 midiOut.channel = 3; // 选择乐器为鸟鸣音效(乐器编号 123) midiOut.changeInstrument(123); // 播放鸟鸣效果,音量适中,节奏较快 midiOut.setVelocity(52); //鸟鸣 - 森林的生机 midiOut.play(" delay(1000), 5'_,6'_,5'_, delay(500), 6'_,5'_,6'_, delay(800), 5'_,6'_,5'_, delay(1200), 6'_,5'_,6'_, delay(600), 5'_,6'_,5'_, delay(1000), 6'_,5'_,6'_, delay(1500), 5'_,6'_,5'_, delay(2000), 森林晨曦结束, ","C5",100); // 高音区,延时单位短促 }, midiOut);// 伴奏thread.invoke( function(midiOut) { midiOut.channel = 2; midiOut.changeInstrument(122); midiOut.setVelocity(50); //伴奏 - 海浪声, midiOut.play(" 1____,5____, 1____,5____, 3____,6____, 1____,5____, 3____,6____, 1____,5____, 3____,5'____, 1____,1____, ","C3",500); }, midiOut);// 在主线程中播放音乐,选择钢琴midiOut.changeInstrument(0);// 演奏乐曲,必须先运行其他线程,因为 midiOut.play 函数本身是阻塞运行的。midiOut.play(" 清晨的第一缕阳光, 1__,2__,3__,5__, 3__,2__,1__,5_, 森林中的鸟鸣, 6__,5__,3__,2__, 1__,2__,3__,1__, 微风拂过树梢, 5__,6__,5__,3__, 2__,1__,2__,5_, 晨雾渐渐散去, 3__,5__,6__,5'__, 3__,2__,1__,1__,6000","C4",300);//关闭窗口lyric.close;

运行效果: