BASS库模块,支持读取ID3v2.3源码(半成品)

.版本 2 .支持库 iconv .子程序 取ID3v2标签, ID3v2, 公开, 支持ID3v2.3 .局部变量 p标签, 整数型 .局部变量 标签, 文本型 .局部变量 标签头, 字节集, , , 10 .局部变量 标签尺寸, 整数型 .局部变量 帧尺寸, 整数型 .局部变量 帧标识, 文本型 .局部变量 帧内容, 字节集 .局部变量 标签帧组, 字节集, , , 除去标签头 .局部变量 x, 整数型 .局部变量 x1 .局部变量 ID3v2, ID3v2 .局部变量 计次 p标签 = BASS_ChannelGetTags (实例句柄, #BASS_TAG_ID3) .如果真 (BASS_ErrorGetCode () = #BASS_ERROR_NOTAVAIL) p标签 = BASS_ChannelGetTags (实例句柄, #BASS_TAG_ID3V2) .如果真结束 ' ID3V2.3标签结构 ' 一个标签头 + 多个标签帧 ' 标签头[10]: 类型[3](必须是"ID3") 版本号[1] 副版本号[1] 标志[1](二进制只有3位) 标签大小[4](每个字节最高位为0,不使用 包括标签头和标签帧) 标签头 = 指针到字节集 (p标签, 10) ' 调试输出 (“标签信息”, 字符 (标签头 [1]) + 字符 (标签头 [2]) + 字符 (标签头 [3]), 字符 (标签头 [4]), 字符 (标签头 [5]), 字符 (标签头 [6])) ' 调试输出 (“标签尺寸”, 到整数 (标签头 [7]) × 2097152 + 到整数 (标签头 [8]) × 16384 + 到整数 (标签头 [9]) × 128 + 到整数 (标签头 [10])) 标签尺寸 = 到整数 (标签头 [7]) × 2097152 + 到整数 (标签头 [8]) × 16384 + 到整数 (标签头 [9]) × 128 + 到整数 (标签头 [10]) 标签帧组 = 指针到字节集 (p标签, 标签尺寸) 标签帧组 = 取字节集右边 (标签帧组, 标签尺寸 - 10) ' 标签帧:帧头【10】 内容【不定】 ' 帧头:标识【4】 内容尺寸:【4】(不包括帧头,最小为1) 标志【2】 ' 举例: ' * “帧标识” | “TSSE”(编码设置) | “帧尺寸” | 13 ' * “帧标识” | “APIC”(封面) | “帧尺寸” | 94331 ' * “帧标识” | “COMM”(备注) | “帧尺寸” | 950 ' * “帧标识” | “TALB”(专辑) | “帧尺寸” | 37 ' * “帧标识” | “TIT1”(内容分组) | “帧尺寸” | ' * “帧标识” | “TIT2”(标题) | “帧尺寸” | 37 ' * “帧标识” | “TIT3”(副标题) | “帧尺寸” | ' * “帧标识” | “TPE1”(作者) | “帧尺寸” | 59 ' * “帧标识” | “TPE2”(乐队) | “帧尺寸” | ' * “帧标识” | “TPE3”(指挥) | “帧尺寸” | ' * “帧标识” | “TPE4”(Remix) | “帧尺寸” | ' * “帧标识” | “TRCK”(音轨) | “帧尺寸” | 5 ' * “帧标识” | “TYER”(年代) | “帧尺寸” | x = 1 .循环判断首 () 帧标识 = 字符 (标签帧组 [x]) + 字符 (标签帧组 [x + 1]) + 字符 (标签帧组 [x + 2]) + 字符 (标签帧组 [x + 3]) 帧尺寸 = 到整数 (标签帧组 [x + 4]) × 16777216 + 到整数 (标签帧组 [x + 5]) × 65536 + 到整数 (标签帧组 [x + 6]) × 256 + 到整数 (标签帧组 [x + 7]) .如果真 (帧标识 ≠ “”) 帧内容 = 取字节集中间 (标签帧组, x + 10, 帧尺寸) .判断开始 (帧标识 = “TIT2”) ' 帧内容 [1] = 0 表示ISO-8859-1编码 = 1 表示Unicode编码 .判断开始 (帧内容 [1] = 0) .计次循环首 (帧尺寸 - 3, 计次) ID3v2.标题 = ID3v2.标题 + 字符 (帧内容 [计次 + 3]) .计次循环尾 () .判断 (帧内容 [1] = 1) ID3v2.标题 = 到文本 (编码转换 (取字节集右边 (帧内容, 帧尺寸 - 1), #编码_UTF_16, #编码_GB2312, )) .默认 .判断结束 .判断 (帧标识 = “TPE1”) .判断开始 (帧内容 [1] = 0) .计次循环首 (帧尺寸 - 3, 计次) ID3v2.作者 = ID3v2.作者 + 字符 (帧内容 [计次 + 3]) .计次循环尾 () .判断 (帧内容 [1] = 1) ID3v2.作者 = 到文本 (编码转换 (取字节集右边 (帧内容, 帧尺寸 - 1), #编码_UTF_16, #编码_GB2312, )) .默认 .判断结束 .判断 (帧标识 = “TALB”) .判断开始 (帧内容 [1] = 0) .计次循环首 (帧尺寸 - 3, 计次) ID3v2.专辑 = ID3v2.专辑 + 字符 (帧内容 [计次 + 3]) .计次循环尾 () .判断 (帧内容 [1] = 1) ID3v2.专辑 = 到文本 (编码转换 (取字节集右边 (帧内容, 帧尺寸 - 1), #编码_UTF_16, #编码_GB2312, )) .默认 .判断结束 .判断 (帧标识 = “APIC”) ' 音乐封面 ' 封面数据结构: 编码格式【1】 MIME类型【不定】 图片类型【1】 数据描述段【不定】 真实图片数据【剩余长度】 .判断开始 (到整数 (帧内容 [1]) = 0) x1 = 2 取字节集数据 (帧内容, #文本型, x1) ' MIME类型 C++中用strlen计算长度 取字节集数据 (帧内容, #文本型, x1) .判断 (到整数 (帧内容 [1]) = 1) ' Unicode编码 ' 未完成 .默认 .判断结束 ID3v2.封面 = 取字节集右边 (帧内容, 帧尺寸 - x1 + 1) .判断 (帧标识 = “TYER”) .判断开始 (帧内容 [1] = 0) .计次循环首 (帧尺寸 - 3, 计次) ID3v2.年代 = ID3v2.年代 + 字符 (帧内容 [计次 + 3]) .计次循环尾 () .判断 (帧内容 [1] = 1) ID3v2.年代 = 到文本 (编码转换 (取字节集右边 (帧内容, 帧尺寸 - 1), #编码_UTF_16, #编码_GB2312, )) .默认 .判断结束 .判断 (帧标识 = “TRCK”) .判断开始 (帧内容 [1] = 0) .计次循环首 (帧尺寸 - 3, 计次) ID3v2.音轨 = ID3v2.音轨 + 字符 (帧内容 [计次 + 3]) .计次循环尾 () .判断 (帧内容 [1] = 1) ID3v2.音轨 = 到文本 (编码转换 (取字节集右边 (帧内容, 帧尺寸 - 1), #编码_UTF_16, #编码_GB2312, )) .默认 .判断结束 .判断 (帧标识 = “COMM”) .判断开始 (帧内容 [1] = 0) .计次循环首 (帧尺寸 - 3, 计次) ID3v2.备注 = ID3v2.备注 + 字符 (帧内容 [计次 + 3]) .计次循环尾 () .判断 (帧内容 [1] = 1) ID3v2.备注 = 到文本 (编码转换 (取字节集右边 (帧内容, 帧尺寸 - 1), #编码_UTF_16, #编码_GB2312, )) .默认 .判断结束 .默认 .判断结束 .如果真结束 ' 位置跳到下一帧 x = x + 10 + 帧尺寸 .循环判断尾 (x + 10 ≤ 标签尺寸 - 10) 返回 (ID3v2)
相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注