Show HN: 一个小巧、简易的 C99 音乐理论库
发布: (2026年2月20日 GMT+8 06:54)
2 分钟阅读
原文: Hacker News
Source: Hacker News
mahler.c
用于西方音乐理论的 C99 简单库。
仓库:
测试:
文档:
Clang 格式文件:
特性
- 小巧且易于使用
- 提供音程、和弦、音阶和调号函数
- 不进行内部内存分配
- 支持理论调(例如 Fb+)
- 没有变音限制(例如 G 的第 20 个升记号)
- 和声等价正确(例如 D 的小六度是 Bb,而不是 A#)
- 100 % 测试覆盖率
示例
/* Create the C4 Blues Scale, ascending */
struct mah_note notes[7];
struct mah_scale scale = mah_get_scale(
(struct mah_note){ MAH_C, MAH_NATURAL, 4 },
&MAH_BLUES_SCALE,
notes,
MAH_ASCEND,
NULL
);
/* Print the scale */
char buf[MAH_DISP_LEN];
for (int i = 0; i
谁是 Mahler?
古斯塔夫·马勒是我最喜欢的作曲家之一。如果你欣赏瓦格纳的情感和斯特拉文斯基的理念,马勒提供了完美的中间道路。可以聆听他的 C♯ 小调第 5 交响曲、《大地之歌》以及 A 小调第 6 交响曲。
文档
完整文档请见此处:
单元测试
测试套件可在此获取:
编译
可以使用 CMake 构建该库。请确保将 src 和 inc 目录加入包含路径。
cmake_minimum_required(VERSION 3.10)
project(example)
set(MAHLER_PATH "${PROJECT_SOURCE_DIR}/mahler.c")
add_executable(${PROJECT_NAME} ${PROJECT_NAME}.c)
target_include_directories(${PROJECT_NAME} PUBLIC
"${PROJECT_BINARY_DIR}"
"${MAHLER_PATH}/inc"
"${MAHLER_PATH}/src"
)
add_subdirectory(${MAHLER_PATH})
target_link_libraries(${PROJECT_NAME} PUBLIC mahler)
或者,也可以直接在命令行中编译,只需包含源码和头文件目录即可。