coopiano:一个用 C++17 编写的物理建模钢琴合成器
摘要
coopiano 是一个用 C++17 编写的物理建模钢琴合成器开源项目,通过琴槌、琴弦、音板与共鸣模型合成声音,支持 MIDI 文件渲染与 macOS 实时 MIDI 输入,无需任何采样或第三方库。
查看缓存全文
缓存时间: 2026/10/16 10:43
peterc/coopiano
来源:https://github.com/peterc/coopiano
coopiano - 物理建模钢琴合成器
https://github.com/user-attachments/assets/aa7c3835-e664-40b2-91cd-c30ee46f2247
一个用 C++17 编写的物理建模钢琴合成器。它能将音符和 MIDI 文件渲染为立体声 WAV 文件,并在 macOS 上支持实时 MIDI 输入。声音由击弦槌、琴弦、音板和共鸣模型合成,并带有房间混响效果。无需钢琴采样、下载或第三方库。
发布此代码还处于非常早期的阶段。钢琴本身运行良好,但还有原型 AU 和 VST 插件等尚未包含在此开源版本中。
构建
你需要一个 C++17 编译器和 Make。在 macOS 上,如果尚未安装 Xcode 命令行工具,请先运行 xcode-select --install,然后执行:
make
./coopiano --help
macOS 构建会链接系统自带的 CoreMIDI、AudioToolbox、CoreFoundation 和 CoreAudio 框架。该源码也支持在其他平台上使用 C++17 编译器和多线程进行离线渲染;实时 MIDI/音频仅限 macOS。本次代码提取是在 macOS 上构建和测试的;其他平台未经验证。
编译器设置可以被覆盖,例如 make CXX=clang++ CXXFLAGS=-O3。更改编译器设置前请先运行 make clean。make clean 仅删除可执行文件,不会删除已渲染的音频和预设文件。
运行
# 音符、力度、时长、可选按键保持时间(秒)
./coopiano A4 0.5 8
# 输出 A4_gp.wav;升号音名需加引号,例如 'G#3'。
# 内置音乐演示;输出 demo_piano.wav
./coopiano demo
# 渲染你自己的 MIDI 文件;未附带任何 MIDI 文件
./coopiano performance.mid 1.0 performance.wav
# 从已连接的 MIDI 源或虚拟 coopiano MIDI 目标播放
./coopiano live
# 仅限 macOS;Ctrl-C 停止
不带参数运行 ./coopiano 会以力度 0.5 渲染 A4 音符,时长八秒。离线命令会输出 44.1 kHz、16 位立体声 WAV 文件,不会自动播放。在 macOS 上,可以使用 afplay A4_gp.wav 来收听。每次离线渲染会独立进行峰值归一化。
预设
内置默认设置无需任何配置文件即可使用。default.ini 文档记录了可用的音色和混响控制参数及其取值范围。复制它,编辑副本,然后通过参数明确指定:
cp default.ini my-piano.ini
./coopiano --preset my-piano.ini live
./coopiano --preset my-piano.ini audition --output audition.wav
audition 命令会以递增的力度演奏一个和弦。使用 --help 查看其和弦、力度和时序选项。仅修改 default.ini 不会改变内置音色;需要通过 --preset 参数传入并重启播放来加载更改。
GP_NO_REVERB=1 ./coopiano A4 0.5 8
GP_SAVE_SETTINGS=1 ./coopiano --preset my-piano.ini A4 0.5 8
GP_SAVE_SETTINGS=1 会在 WAV 文件旁写出解析后的预设文件,如 A4_gp.wav.ini。环境变量覆盖优先于预设文件设置。
源码结构
coopiano.cpp:CLI、MIDI 文件解析器、WAV 写入器和 macOS 实时宿主。piano.hpp:位于piano命名空间的头文件式合成库。instrument.hpp:语音池、音符/踏板调度和乐器效果。streaming_soundboard.hpp:流式音板卷积。preset.hpp和reverb.hpp:INI 配置和立体声房间效果。piano_host.hpp和piano_resampler.hpp:宿主采样率适配和重采样。live_diagnostics.hpp和live_bench.hpp:编译进 macOS 宿主的辅助模块。
C++ 源文件/头文件来源于开发项目。历史注释可能引用了该更大项目中的文档。原始的测试和基准测试集合未包含在此处。
许可证
MIT 许可证。详见 LICENSE。
相似文章
PianoCoRe:整合与优化的大规模钢琴MIDI数据集
PianoCoRe是一个大规模钢琴MIDI数据集,对开源音乐语料库进行统一和优化,包含5,625首作品、483位作曲家的250,046个演奏版本,提供音符级乐谱对齐,适用于音乐信息检索任务,并包含一个MIDI质量分类器和对齐优化流程。
Coffee Piano
Coffee Piano 是一个基于浏览器的钢琴工作室,提供用于音乐创作的视觉和声工具。
Tonefold
Tonefold 是一款免费开源的 AI 音乐作曲工具,支持 macOS 和 Windows:向 Claude 描述一首歌,即可在钢琴卷帘中获得可逐音符编辑的和弦、旋律、贝斯和鼓,并导出 MIDI、WAV 和分轨文件。
Show HN:一个支持 MCP 的实验性 pattern-first DAW
Blokkily 是一个实验性的 pattern-first 数字音频工作站(DAW),用单一事件模型驱动 tracker、piano roll 和 step grid 三个同步编辑器,原生支持 CLAP/VST3 插件与 FluidSynth,并集成了 MCP 及 LLM 作曲助手。
一种用于多音符转录与复音估计的轻量级乐器无关模型
本文提出一个轻量级、乐器无关的神经网络,用于多音符转录和复音估计,联合预测帧级起音、复音和音符激活,在保持接近最先进系统精度的同时大幅降低资源占用(对应 Spotify 的 Basic Pitch 模型)。