模拟鼓点乐器,支持声卡通道选择做个借鉴

易语言 2020-07-27 15:31:33

模拟鼓点乐器,支持声卡通道选择做个借鉴

将有效的标签帧读入字节集数组
偏移 = 1
.循环判断首 ()
' 解析标签帧
.如果真 (偏移 + 7 ≥ 取字节集长度 (标签帧组) 或 偏移 < 0)
跳出循环 ()
.如果真结束
帧标识 = 到文本 (取字节集中间 (标签帧组, 偏移, 4))
帧尺寸 = 到整数 (标签帧组 [偏移 + 4]) × 16777216 + 到整数 (标签帧组 [偏移 + 5]) × 65536 + 到整数 (标签帧组 [偏移 + 6]) × 256 + 到整数 (标签帧组 [偏移 + 7])
.如果真 (帧标识 = “”)
跳出循环 ()
.如果真结束
标签帧 = 取字节集中间 (标签帧组, 偏移, 10 + 帧尺寸)

' 处理每个标签帧的内容,此处为了方便处理,所有新写入标签内容统一使用Unicode编码
.判断开始 (帧标识 = “TIT2”) ' 标题
查询标记 [1] = 1
' 帧内容 [1] = 0 表示ISO-8859-1编码 = 1 表示Unicode编码
.如果真 (是否为空 (参标题) = 假)
' 构建新标签帧
标签帧 = 到字节集 (帧标识) + 取空白字节集 (7) + A2W (参标题)
' 记录编码方式:Unicode编码
标签帧 [11] = 1
' 记录标签内容
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
.如果真结束

.判断 (帧标识 = “TPE1”) ' 作者
查询标记 [2] = 1
.如果真 (是否为空 (参作者) = 假)
标签帧 = 到字节集 (帧标识) + 取空白字节集 (7) + A2W (参作者)
标签帧 [11] = 1
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
.如果真结束

.判断 (帧标识 = “TALB”) ' 专辑
查询标记 [3] = 1
.如果真 (是否为空 (参专辑) = 假)
标签帧 = 到字节集 (帧标识) + 取空白字节集 (7) + A2W (参专辑)
标签帧 [11] = 1
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
.如果真结束

.判断 (帧标识 = “APIC”) ' 音乐封面
查询标记 [4] = 1
' 封面数据结构: 编码格式【1】 MIME类型【不定、一般使用00作为字符串结尾,具体取决于编码格式】 图片类型【1】 数据描述段【不定】 真实图片数据【剩余长度】
.如果真 (是否为空 (参封面) = 假)
标签帧 = 到字节集 (帧标识) + 取空白字节集 (7) + 到字节集 (“image/jpeg”) + 取空白字节集 (2) + 参封面
标签帧 [11] = 0
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
.如果真结束

.默认

.判断结束
加入成员 (帧数组, 标签帧)
' 跳到下一标签帧起始位置
偏移 = 偏移 + 10 + 帧尺寸
.循环判断尾 (偏移 + 10 ≤ 标签尺寸 - 10)
.如果真 (是否为空 (参标题) = 假 且 查询标记 [1] = 0)
标签帧 = 到字节集 (“TIT2”) + 取空白字节集 (7) + A2W (参标题)
标签帧 [11] = 1
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
加入成员 (帧数组, 标签帧)
.如果真结束
.如果真 (是否为空 (参作者) = 假 且 查询标记 [2] = 0)
标签帧 = 到字节集 (“TPE1”) + 取空白字节集 (7) + A2W (参作者)
标签帧 [11] = 1
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
加入成员 (帧数组, 标签帧)
.如果真结束
.如果真 (是否为空 (参专辑) = 假 且 查询标记 [3] = 0)
标签帧 = 到字节集 (“TALB”) + 取空白字节集 (7) + A2W (参专辑)
标签帧 [11] = 1
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
加入成员 (帧数组, 标签帧)
.如果真结束
.如果真 (是否为空 (参封面) = 假 且 查询标记 [4] = 0)
标签帧 = 到字节集 (“APIC”) + 取空白字节集 (7) + 到字节集 (“image/jpeg”) + 取空白字节集 (2) + 参封面
标签帧 [11] = 0
标签帧 = 字节集替换 (标签帧, 5, 4, 整数转高位存储 (取字节集长度 (标签帧) - 10))
加入成员 (帧数组, 标签帧)
.如果真结束
' 重新计算新的标签尺寸,并将此数据保存到标签头
偏移 = 0
标签帧组 = { }
.计次循环首 (取数组成员数 (帧数组), 计次)
标签帧组 = 标签帧组 + 帧数组 [计次]
偏移 = 偏移 + 取字节集长度 (帧数组 [计次])
.计次循环尾 ()
标签头 = 字节集替换 (标签头, 7, 4, 标签尺寸_到字节集 (偏移 + 20))
歌曲数据 = 字节集替换 (歌曲数据, 1, 标签尺寸, 标签头 + 标签帧组 + 取空白字节集 (20))
' 取空白字节集 (20) 目的是为标签结构末尾保留一些空余空间,方便软件修改标签时,不需要每次都重新计算标签头大小
' 生成新的歌曲文件
返回 (写到文件 (参路径, 歌曲数据))