# every2coe **Repository Path**: AnNight/every2coe ## Basic Information - **Project Name**: every2coe - **Description**: py脚本,目前支持coe/mif/mid文件的读写、解析、编辑及互相转换 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-10 - **Last Updated**: 2024-03-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # 使用示例 ## coe 模块 (Read & Write) ```python import coe # Lemon.coe 是一个 coe 文件,其中的数据,使用二进制保存,宽度任意 # 解析 Lemon.coe 文件,返回十六进制字符串(纯数据) data = coe.read("Lemon.coe") # 将数据写入 Lemon_out.coe 文件,使用十六进制保存,宽度指定 128 coe.write("Lemon_out.coe", data, "HEX", 128) ``` ## mif 模块 (Read & Write) ```python import mif # Lemon.mif 是一个 mif 文件,其中的数据,使用二进制保存,无符号地址基数,宽度任意 # 解析 Lemon.mif 文件,返回十六进制字符串(纯数据) data = mif.read("Lemon.mif") # 将数据写入 Lemon_out.mif 文件,使用二进制保存,无符号地址基数,宽度指定 32 mif.write("Lemon_out.mif", data, data_radix="BIN", address_radix="UNS", width=32) ``` ## midi 模块 (Read & Write) ```python import midi.sequence import unaltered import coe # Lemon.mid 是一个双音轨的 mid 文件,其中第 0 个音轨没有音符数据,但有节拍数据等 # 解析 Lemon.mid 文件 seq = midi.sequence.read("Lemon.mid") # 将第 0 个音轨合并入第 1 个音轨 seq.mergeTrack(1, seq.getTracks()[0]) # 删除第 0 个音轨 seq.deleteTrack(0) # 文件格式设为单音轨格式 seq.setFileFormat(0) # 将修改后的数据写入新的 mid 文件 unaltered.write("Lemon_out.mid", seq.hex()) # 将修改后的数据写入 Lemon_out.coe 文件 coe.write("Lemon_out.coe", seq.hex(), "HEX", 32) ``` ## bmp 模块 (Only Read) bmp 模块将 bmp 文件读取后,以从左到右、从上到下的顺序遍历所有像素并转换,最终返回像素矩阵对应的十六进制字符串。 ![](imgs/bmp1.png) 像素转换:将每个像素的 RGB 值以 4 位红色、4 位绿色、4 位蓝色的顺序转换,若颜色宽度大于 4 位,则取高 4 位,即每个像素点转换为 12 bit。最后将所有值按顺序拼接后,转为十六进制字符串。 ```python import bmp import coe # Car.bmp 是一个 RGB 模式的 bmp 文件 # 解析 Car.bmp 文件 data = bmp.read("Car.bmp") # 将数据写入 Car_out.coe 文件,使用十六进制保存,宽度指定 128 coe.write("Car_out.coe", data, "HEX", 128) ``` ## unaltered 模块 (Only Read) unaltered 模块仅提供两个方法:read和write。 - read方法:将指定的文件以原始的、未修改的形式读取,返回其对应的十六进制字符串。 - write方法:将给定的十六进制字符串数据,不做任何修改的写入指定的文件。 下方的示例代码以一个 mp3 文件为例。但原则上,此模块不限制文件类型。 ```python import unaltered import coe # music.mp3 是一个 mp3 文件 # 读取数据 data = unaltered.read("music.mp3") # 将数据写入 music_out.mp3 文件(与原文件一模一样,可以当做复制了一份) unaltered.write("music_out.mp3", data) # 也可以将数据写入 music_out.coe 文件,使用十六进制保存,宽度指定 32 coe.write("music_out.coe", data, "HEX", 32) ``` # 更新 ## v1.0 - 2024.1.10 新增 * coe 模块 * read 方法 * write 方法 * midi 模块 * sequence.read 方法 * sequence.write 方法 * Sequence 类(一个标准 midi 格式的文件) * Track 类(一个音轨) * MidiEvent 类(一个 Midi 事件) * MidiMessage 类、MetaMessage 类、ShortMessage 类、SysexMessage 类(一个 Midi 消息) * Serializable 类 * UnsupportedException 类 ## v1.1 - 2024.1.14 新增 * coe 模块 * read 现在可以解析二进制和八进制 * write 现在可以以二进制输出 * midi 模块 * Sequence 类新增 mergeTrack 方法(音轨合并方法) 更改 * midi 模块 * MidiEvent 类中的 tick 属性更改为 int 类型,保存该事件所在的时间点(从音轨开始时计时,以 midi 节拍为单位) * Track 类中删除 insertEvent 方法 * Track 类中新增 sortEvents 方法 修复 * midi 模块不能正确解析所有的 delta_time。 ## v1.2 - 2024.1.29 新增 * mif 模块 * read 方法 * write 方法 * bmp 模块 * read 方法 ## v1.3 - 2024.2.18 新增 * unaltered 模块 * read 方法 ## v1.3.1 - 2024.3.3 新增 * unaltered 模块 * write 方法 更改 * midi 模块、unaltered 模块 * 将 midi 模块中的 sequence.write 方法移动到 unaltered 模块(该方法具有更强的通用性,而不限于 midi 格式) * coe 模块、mif 模块、midi 模块、bmp 模块、unaltered 模块 * 从 numpy 模块的注释中,学到了一种新的注释方法。使用该方法,重新编写了方法注释。 # 关于 作者:廖浩龙(Liao Haolong) 邮箱:aliaohaolong@qq.com *** Copyright (C) 2021 Liao Haolong.