C#实现获取mp3 Tag信息的方法
发布时间 - 2026-01-11 02:11:04 点击率:次本文实例讲述了C#实现获取mp3 Tag信息的方法。分享给大家供大家参考,具体如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace Foxer_Player_1._1
{
public struct Mp3Info
{
public string identify; //TAG,三个字节
public string Title; //歌曲名,30个字节
public string Artist; //歌手名,30个字节
public string Album; //所属唱片,30个字节
public string Year; //年,4个字符
public string Comment; //注释,28个字节
public char reserved1; //保留位,一个字节
public char reserved2; //保留位,一个字节
public char reserved3; //保留位,一个字节
}
/// <summary>
/// Mp3文件信息类
/// </summary>
public class Mp3FileInfo
{
Mp3Info info;
/// <summary>
/// 构造函数,输入文件名即得到信息
/// </summary>
/// <param name="mp3FilePos"></param>
public Mp3FileInfo(String mp3FilePos)
{
info = getMp3Info(getLast128(mp3FilePos));
}
/// <summary>
/// 获取整理后的Mp3文件名,这里以标题和艺术家名定文件名
/// </summary>
/// <returns></returns>
public String GetOriginalName()
{
return formatString(info.Title.Trim()) + "-" + formatString(info.Artist.Trim());
}
/// <summary>
/// 去除\0字符
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private static String formatString(String str)
{
return str.Replace("\0", "");
}
/// <summary>
/// 获取MP3文件最后128个字节
/// </summary>
/// <param name="FileName">文件名</param>
/// <returns>返回字节数组</returns>
public static byte[] getLast128(string FileName)
{
FileStream fs = new FileStream(FileName, FileMode.Open, Fileaccess.Read);
Stream stream = fs;
stream.Seek(-128, SeekOrigin.End);
const int seekPos = 128;
int rl = 0;
byte[] Info = new byte[seekPos];
rl = stream.Read(Info, 0, seekPos);
fs.Close();
stream.Close();
return Info;
}
/// <summary>
/// 获取MP3歌曲的相关信息
/// </summary>
/// <param name = "Info">从MP3文件中截取的二进制信息</param>
/// <returns>返回一个Mp3Info结构</returns>
public static Mp3Info getMp3Info(byte[] Info)
{
Mp3Info mp3Info = new Mp3Info();
string str = null;
int i;
int position = 0;//循环的起始值
int currentIndex = 0;//Info的当前索引值
//获取TAG标识
for (i = currentIndex; i < currentIndex + 3; i++)
{
str = str + (char)Info[i];
position++;
}
currentIndex = position;
mp3Info.identify = str;
//获取歌名
str = null;
byte[] bytTitle = new byte[30];//将歌名部分读到一个单独的数组中
int j = 0;
for (i = currentIndex; i < currentIndex + 30; i++)
{
bytTitle[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Title = Foxer_Player_1._1.Mp3FileInfo.byteToString(bytTitle);
//获取歌手名
str = null;
j = 0;
byte[] bytArtist = new byte[30];//将歌手名部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 30; i++)
{
bytArtist[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Artist = Foxer_Player_1._1.Mp3FileInfo.byteToString(bytArtist);
//获取唱片名
str = null;
j = 0;
byte[] bytAlbum = new byte[30];//将唱片名部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 30; i++)
{
bytAlbum[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Album = Foxer_Player_1._1.Mp3FileInfo.byteToString(bytAlbum);
//获取年
str = null;
j = 0;
byte[] bytYear = new byte[4];//将年部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 4; i++)
{
bytYear[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Year = Foxer_Player_1._1.Mp3FileInfo.byteToString(bytYear);
//获取注释
str = null;
j = 0;
byte[] bytComment = new byte[28];//将注释部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 25; i++)
{
bytComment[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Comment = Foxer_Player_1._1.Mp3FileInfo.byteToString(bytComment);
//以下获取保留位
mp3Info.reserved1 = (char)Info[++position];
mp3Info.reserved2 = (char)Info[++position];
mp3Info.reserved3 = (char)Info[++position];
return mp3Info;
}
/// <summary>
/// 将字节数组转换成字符串
/// </summary>
/// <param name = "b">字节数组</param>
/// <returns>返回转换后的字符串</returns>
public static string byteToString(byte[] b)
{
Encoding enc = Encoding.GetEncoding("GB2312");
string str = enc.GetString(b);
str = str.Substring(0, str.IndexOf("#CONTENT#") >= 0 ? str.IndexOf("#CONTENT#") : str.Length);//去掉无用字符
return str;
}
}
}
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#文件操作常用技巧汇总》、《C#遍历算法与技巧总结》、《C#程序设计之线程使用技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》
希望本文所述对大家C#程序设计有所帮助。
# C#
# 获取
# mp3
# Tag信息
# C#定义的MP3播放类实例
# C#实现简单播放mp3的方法
# C#基于OLEDB获取Excel文件表结构信息的方法
# C#编程实现动态改变配置文件信息的方法
# C#获取文件相关信息的方法
# C#获取指定文件著作权信息的方法
# C#获取程序文件相关信息的方法
# C#获得文件属性信息的实现方法
# 通过C#动态生成图书信息XML文件
# C#使用shell32获取文件属性的方法
# 读到
# 组中
# 程序设计
# 唱片名
# 相关内容
# 遍历
# 感兴趣
# 数据结构
# 给大家
# 相关信息
# 转换成
# 更多关于
# 所述
# 使用技巧
# 面向对象
# 讲述了
# char
# lt
# Artist
# Album
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel如何与Inertia.js和Vue/React构建现代单页应用
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何快速登录WAP自助建站平台?
如何在IIS中新建站点并配置端口与IP地址?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel如何配置任务调度?(Cron Job示例)
个人网站制作流程图片大全,个人网站如何注销?
如何在阿里云虚拟主机上快速搭建个人网站?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何快速搭建安全的FTP站点?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
Laravel怎么连接多个数据库_Laravel多数据库连接配置
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何用PHP快速搭建CMS系统?
如何自定义建站之星模板颜色并下载新样式?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何用AWS免费套餐快速搭建高效网站?
Laravel如何实现多对多模型关联?(Eloquent教程)
Laravel如何实现事件和监听器?(Event & Listener实战)
如何续费美橙建站之星域名及服务?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
利用JavaScript实现拖拽改变元素大小
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Laravel如何使用查询构建器?(Query Builder高级用法)
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
网站制作报价单模板图片,小松挖机官方网站报价?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
怎么用AI帮你设计一套个性化的手机App图标?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
nginx修改上传文件大小限制的方法
创业网站制作流程,创业网站可靠吗?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
nodejs redis 发布订阅机制封装实现方法及实例代码
Linux网络带宽限制_tc配置实践解析【教程】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel如何实现用户注册和登录?(Auth脚手架指南)
下一篇:QQ音乐年度报告电脑版怎么看
下一篇:QQ音乐年度报告电脑版怎么看

