# libs_cpp **Repository Path**: yzrilyzr/libs_cpp ## Basic Information - **Project Name**: libs_cpp - **Description**: 鬼知道这里面是啥?一看全在睡觉💤zZz - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-25 - **Last Updated**: 2026-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一些库 ## 全部藏起来,你们不准看(ᗜ ^ ᗜ) (没有更多数据了) 包含 ## yzrutil * 抽象语法树 AST * 一些轮子(数组集合表对象池…) * DSP * 插值函数 * sf2序列化库 * MIDI库 ## SimpleSynth ### 基于MIDI事件和相位累积的简单模块化实时合成器 * 音乐制作 * 游戏音乐和音效 * 实时键盘合成器 * 背景音乐播放器 * 音色捏捏 * AI生成无版权乐谱的无限循环背景音乐播放器 * … ![示例图](./img/img.png) #### 输入 * 读取MID并转换为专有事件 * 读取XM(extended module)并转换为专有事件和合成器程序 * 使用序列化的sf2并转换为合成器程序 * 读取MIDI原始事件字节并转换为专有事件(可用于实时合成) #### 输出 * 混音器输出float PCM * 使用PCM播放器即可播放,例如SDL2, AudioTrack, Oboe…(SDL2见测试) * 渲染并保存到文件(WAV, MP3, OGG…) #### MIDI功能 * NoteOn/Off/Pressure * Channel Pressure * PitchBend * Channel Control(详见Channel.cpp#cc()) * Program Change #### 子模块 ##### 事件和数据 * 专有事件系统(基于MIDI,稍微细化) * 音符数据存储(包括合成器程序专有数据与音符的绑定) ##### 程序组或乐器 * 合成器程序组(乐器表)接口(根据patch id获取) * 简单乐器 * SF2音源乐器 * 芯片音乐乐器 ##### 音符律制 * 律制接口,根据音符id获取音符频率以及反查 * 平均律 * 纯律 ##### 通道 * 通道Channel,不限数量,但每个通道限制最大同时处理音符数(音符数据池大小默认32) * 通道DSP链(Chorus、Phaser、Reverb、HRTF 3D等) * 通道事件队列(实时事件队列和未来事件队列) * 通道事件处理(事件的发送、处理和计数,时间为秒(不使用tick)) * 音符数据计算(Note的Velocity和Phase(相位累积合成法),来源包括id、Mod、PitchBend、Portamento等) * 音符数据池 * MIDI基本事件处理(NoteOn/Off等) * MIDI的音符存活判断(Sustain和Sostenuto) * MIDI CC控制器 * 滑音 * 单复音模式 * 调制轮 * 弯音轮 * 表情控制 * 自定义CC事件 ##### 混音器 * 混音器Mixer,包含一些通道,负责所有通道混音 * 单线程合成(同步合成,用于低负载低延迟) * 多线程通道合成(一个通道一个线程) * 限制器Limiter(防止破音爆音) ##### 合成器模块 * 独立的合成器程序或模块(NoteProcessor) * 根据音符的相位累积进行采样点生成 * 音符存活判断(来源包括NoteOff、AHDSR Release等) * 音符后处理(效果器或者物理建模音效等) * 处理CC事件 * 可为音符设置自定义绑定数据 * 模块可以套娃运算 ##### 其他模块 * 已转换的事件序列(可以一次性发送到混音器和通道的未来事件队列) * MID转换(获得一个事件序列) * XM转换(获得一个事件序列和合成器程序组) * SF2转换(获得一个合成器程序组) * MIDI原始字节转事件发送(发送到实时队列或未来队列) * 合成器模块Builder * 合成器常用源 #### 可用的合成器模块 ##### 混合模块 * 一元混合器 * DSP效果器 * 发送CC的模块(仅初始化发送一次) * 一键多音,一次触发多个音符,并根据设置的混合比进行混合,但对外表现为一个音符 * 音符ID最邻近表,只选取最邻近的一个模块,适用于间隔的采样,例如C4 F4 C5 F5的采样,中间部分选取最邻近的采样 * 音符ID邻近混合表,将两个邻近的模块进行幅度插值并混合 * 音符ID非插值表,一个ID一个程序,没有的就没有,适用于生成鼓组程序 * 音符ID移调 * 二元混合器 * 加法混合器 * 乘法混合器 #### 包络发生器模块 * AHDSR包络 * 时间包络 * 图表包络 * 包络插值器(指数、线性等) #### 滤波器模块 * 平均滤波器 * 双二阶IIR滤波器(详见yzrutil IIRUtil.h,支持LP HP BP NOTCH) #### 非线性转换器模块 * arctan函数失真器 * 电平钳位器 * 根据音符Velocity的电平钳位器 #### 源 * 模块Builder * 基础模块源(定值发生器、ID发生器、音符ID频率源、频率倍率源、定频源) * 基础发生器 * 频率源 * 振幅源(电平源) #### 发生器(或振荡器)模块 ##### 鼓 * 鼓发生器(扫频发生器) ##### 噪音 * LFSR噪音发生器(8bit风格,支持长模式和短模式(音调模式)) * 基本噪音发生器 ##### 脉冲 * 镲发生器 * 脉冲发生器(上升时间、下降时间、高电平时间、发生延迟(相位)) * 锯齿波发生器 * 方波(矩形波)发生器 * 三角波发生器 * 4bit三角波(8bit风格)发生器 * VVVF发生器 ##### 采样器 * 采样发生器 ##### 基于正弦的发生器 * 正弦波发生器 * 正弦指数谐波发生器(谐波次数为指数,例如0,1,2,4,8…) * 正弦谐波发生器(谐波次数为0,1,2,3…,加上谐波量 * 混合比) * 正弦谐波表发生器(谐波次数为0,1,2,3…,根据音符ID频率查找对应混合比,加上谐波量 * 混合比) * 正弦波表发生器(指定基础频率,加上表中所有频率的正弦波 * 混合比) ##### 物理建模发生器 * 钢琴发生器 * Karplus Strong发生器 * 提琴发生器 * 类Sakura发生器 * 西塔琴发生器