Show HN: 一个小巧、简易的 C99 音乐理论库

发布: (2026年2月20日 GMT+8 06:54)
2 分钟阅读

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 构建该库。请确保将 srcinc 目录加入包含路径。

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)

或者,也可以直接在命令行中编译,只需包含源码和头文件目录即可。

0 浏览
Back to Blog

相关文章

阅读更多 »

本地集中式数据库管理器

概述 本地数据库门户,使用 Docker Compose 运行,提供一个统一界面,以在多个数据库引擎上执行常见的数据库操作。G...