Maison base de données tutoriel mysql [MP3学习]MP3标签信息之ID3v1,IDv2

[MP3学习]MP3标签信息之ID3v1,IDv2

Jun 07, 2016 pm 03:00 PM
mp3 信息 学习 标签

近来本着踏实努力一点一滴的原则,研究了下MP3,准备做一个了类于AIRPLAY的播放器,这是学习的第一篇,读取信息,做一个笔记。 参考资料:http://www.id3.org/ID3v1 http://en.wikipedia.org/wiki/ID3 ====================================================

       近来本着踏实努力一点一滴的原则,研究了下MP3,准备做一个了类似于AIRPLAY的播放器,这是学习的第一篇,读取信息,做一个笔记。

参考资料:http://www.id3.org/ID3v1       http://en.wikipedia.org/wiki/ID3

========================================================================

MP3歌曲信息(ID3v1)结构如下:

[MP3学习]MP3标签信息之ID3v1,IDv2

所以需要一个结构体存储MP3的歌曲信息,一般声明如下:

struct MP3INFO	//MP3的信息结构,固定的,存放在歌曲最后128个字节中
{   
    char     identify[3];          // TAG
    char     Title[30];            // 歌曲名,30个字节   
    char     Artist[30];           // 歌手名,30个字节   
    char     Album[30];         // 所属唱片,30个字节   
    char     Year[4];             // 年份,4个字符   
    char     Comment[30];   // 注释,28个字节,有些说是30个,但都没啥关系,只是保留位的大小要改改  
    char     reserved[1];	//保留,暂无用
};
Copier après la connexion

知道了这些就很容易了,不敢用什么办法,只要读取到最后的128个字节,所有的相关信息就可以得到了,用VC6.0控制台程序测试如下(主代码):

#include "stdafx.h"


struct MP3INFO	//MP3的信息结构,固定的,存放在歌曲最后128个字节中
{   
    char     identify[3];          // TAG
    char     Title[30];            // 歌曲名,30个字节   
    char     Artist[30];           // 歌手名,30个字节   
    char     Album[30];         // 所属唱片,30个字节   
    char     Year[4];             // 年份,4个字符   
    char     Comment[30];   // 注释,28个字节,有些说是30个,但都没啥关系,只是保留位的大小要改改  
    char     reserved[1];	//保留,暂无用
};


int main(int argc, char* argv[])
{
	printf("读取一个MP3的信息,每个MP3的最后128个字节存储的,它有固定的结构,下面试读取之!\n");
	MP3INFO mp3;

	FILE *pf = fopen("H:/1.mp3","r");
	printf("打开文件:%d\n",pf);

	fseek(pf,-128,SEEK_END);
	fread(&mp3,sizeof(mp3),1,pf);

	printf("TAG标志:%s\n",mp3.identify);
	printf("曲名:%s\n",mp3.Title);
	printf("歌手:%s\n",mp3.Artist);
	printf("唱片:%s\n",mp3.Album);
	printf("年份:%s\n",mp3.Year);
	printf("注释:%s\n",mp3.Comment);

	fclose(pf);

	return 0;
}
Copier après la connexion

效果如下:

[MP3学习]MP3标签信息之ID3v1,IDv2


读取的任务完成了。对于修改,知道了这些再做完善也很容易:(如下)

memset(&mp3,0,sizeof(mp3));
	printf("修改信息:\n");
	mp3.Identify[0]='T';
	mp3.Identify[1]='A';
	mp3.Identify[2]='G';
	
	mp3.Flag='0';
	mp3.Track='5';
	mp3.Style='3';
	
	lstrcpy(mp3.Title,(LPCTSTR)"修改的名字");
	lstrcpy(mp3.Artist,(LPCTSTR)"修改的作者");
	lstrcpy(mp3.Album,(LPCTSTR)"修改的唱片");
	lstrcpy(mp3.Year,(LPCTSTR)"1989");
	lstrcpy(mp3.Comment,(LPCTSTR)"修改的注释");
	
	fseek(pf,-128,SEEK_END);
	fwrite(&mp3,sizeof(mp3),1,pf);
Copier après la connexion

修改完成后,在UltraEdit中查看(16进制),信息格式完全正确。但是,用Windows自带的属性查看发现,其上面的内容不全是我们修改的,这是为什么呢?

经多方查找 http://en.wikipedia.org/wiki/ID3,http://baike.baidu.com/view/66078.html

/*
 * ID3v1是固定的128个字节,这个你不用担心。其实ID3v1是这样安排的:如果MP3的注释是大于28个字节的,那么就要借用126-127两个字节。
 * 所以ID3v1的注释部分可能是28个字节也可能是30个字节。那么,怎么区分到底是28个字节还是30个字节呢?很简单,126处就是管这个的,
 * 我们只要看看126处是不是0x00,如果是0x00那么注释就有28个字节。如果不等于0x00,那么就是说注释是30个字节。同时别忘了,
 * 由于第127字节存储了Track信息,那么如果注释是30个字节的时候,这首歌的ID3v1里的那个127处的信息自然就不是Track信息了。
 * Track自然就是没有地方存了,所以127处变的没有Track意义了,它只是Comment的一部分了。
 */
struct ID3v1	//MP3的信息结构,固定的,存放在歌曲最后128个字节中
{   
    char     Identify[3];   // ID3v1为TAG
    char     Title[30];     // 歌曲名,30个字节   
    char     Artist[30];    // 歌手名,30个字节   
    char     Album[30];     // 所属唱片,30个字节   
    char     Year[4];       // 年份,4个字符   
    char     Comment[28];   // 注释,28个字节,有时是30个,  
    char     Flag;			// 标志,为0说明有音轨(下一位),不一定有
	char	 Track;			// 音轨,#,歌曲号,不一定有
char	 Style;			// 风格流派,需要查询,不一定有
};
Copier après la connexion

所以对读写取程序做些修改:
void ReadID3v1(char* pfile)
{
	printf("读取一个MP3的信息,每个MP3的最后128个字节存储的,它有固定的结构,下面试读取之!\n");
	ID3v1 mp3;
	
	FILE *pf = fopen(pfile,"r+");
	printf("打开文件:%d\n",pf);
	
	fseek(pf,-128,SEEK_END);
	fread(&mp3,sizeof(mp3),1,pf);
	if (mp3.Identify[0]!='T' || mp3.Identify[1]!='A' || mp3.Identify[2]!='G' )
	{
		printf("此歌曲不支持ID3v2标准!\n");
		fclose(pf);
		
		return;
	}
	printf("TAG标志:%.3s\n",mp3.Identify);
	printf("曲名:%.30s\n",mp3.Title);
	printf("歌手:%.30s\n",mp3.Artist);
	printf("唱片:%.30s\n",mp3.Album);
	printf("年份:%.4s\n",mp3.Year);
	printf("注释:%.30s\n",mp3.Comment);
	if (mp3.Flag==0)
	{
		printf("歌曲序号:%d,流派标志:%d\n",mp3.Track,mp3.Style);
	}
	
	getchar();

	//下面试着修改信息
	memset(&mp3,0,sizeof(mp3));
	printf("修改信息:\n");
	mp3.Identify[0]='T';
	mp3.Identify[1]='A';
	mp3.Identify[2]='G';
	
	mp3.Flag='0';
	mp3.Track='5';
	mp3.Style='3';
	
	lstrcpy(mp3.Title,(LPCTSTR)"修改的名字");
	lstrcpy(mp3.Artist,(LPCTSTR)"修改的作者");
	lstrcpy(mp3.Album,(LPCTSTR)"修改的唱片");
	lstrcpy(mp3.Year,(LPCTSTR)"1989");
	lstrcpy(mp3.Comment,(LPCTSTR)"修改的注释");
	
	fseek(pf,-128,SEEK_END);
	fwrite(&mp3,sizeof(mp3),1,pf);
	printf("over,%s\n",mp3.Title);
	
	fclose(pf);
}
Copier après la connexion

http://blog.csdn.net/bbdxf/article/details/7438006











Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment convertir de la musique qq au format mp3 Convertir de la musique qq au format mp3 sur téléphone mobile Comment convertir de la musique qq au format mp3 Convertir de la musique qq au format mp3 sur téléphone mobile Mar 21, 2024 pm 01:21 PM

QQ Music permet à tout le monde de regarder des films et de soulager l'ennui. Vous pouvez utiliser ce logiciel tous les jours pour satisfaire facilement vos besoins. Un grand nombre de chansons de haute qualité sont disponibles pour que tout le monde puisse les écouter. la prochaine fois que vous les écouterez, vous n'aurez pas besoin d'une connexion Internet. Les chansons téléchargées ici ne sont pas au format MP3 et ne peuvent pas être utilisées sur d'autres plateformes. Une fois l'abonnement expiré, il n'y a aucun moyen de les réécouter. , de nombreux amis souhaitent convertir les chansons au format MP3 Ici, l'éditeur explique Vous proposez des méthodes pour que tout le monde puisse les utiliser ! 1. Ouvrez QQ Music sur votre ordinateur, cliquez sur le bouton [Menu principal] dans le coin supérieur droit, cliquez sur [Transcodage audio], sélectionnez l'option [Ajouter une chanson] et ajoutez les chansons qui doivent être converties ; les chansons, cliquez pour sélectionner Convertir en [mp3]

Comment rechercher du texte dans tous les onglets de Chrome et Edge Comment rechercher du texte dans tous les onglets de Chrome et Edge Feb 19, 2024 am 11:30 AM

Ce didacticiel vous montre comment rechercher du texte ou des phrases spécifiques sur tous les onglets ouverts dans Chrome ou Edge sous Windows. Existe-t-il un moyen d'effectuer une recherche de texte sur tous les onglets ouverts dans Chrome ? Oui, vous pouvez utiliser une extension Web externe gratuite dans Chrome pour effectuer des recherches de texte sur tous les onglets ouverts sans avoir à changer d'onglet manuellement. Certaines extensions comme TabSearch et Ctrl-FPlus peuvent vous aider à y parvenir facilement. Comment rechercher du texte dans tous les onglets de Google Chrome ? Ctrl-FPlus est une extension gratuite qui permet aux utilisateurs de rechercher facilement un mot, une expression ou un texte spécifique dans tous les onglets de la fenêtre de leur navigateur. Cette extension

Révéler l'attrait du langage C : découvrir le potentiel des programmeurs Révéler l'attrait du langage C : découvrir le potentiel des programmeurs Feb 24, 2024 pm 11:21 PM

Le charme de l'apprentissage du langage C : libérer le potentiel des programmeurs Avec le développement continu de la technologie, la programmation informatique est devenue un domaine qui a beaucoup attiré l'attention. Parmi les nombreux langages de programmation, le langage C a toujours été apprécié des programmeurs. Sa simplicité, son efficacité et sa large application font de l’apprentissage du langage C la première étape pour de nombreuses personnes souhaitant entrer dans le domaine de la programmation. Cet article discutera du charme de l’apprentissage du langage C et de la manière de libérer le potentiel des programmeurs en apprenant le langage C. Tout d’abord, le charme de l’apprentissage du langage C réside dans sa simplicité. Comparé à d'autres langages de programmation, le langage C

Premiers pas avec Pygame : didacticiel complet d'installation et de configuration Premiers pas avec Pygame : didacticiel complet d'installation et de configuration Feb 19, 2024 pm 10:10 PM

Apprenez Pygame à partir de zéro : didacticiel complet d'installation et de configuration, exemples de code spécifiques requis Introduction : Pygame est une bibliothèque de développement de jeux open source développée à l'aide du langage de programmation Python. Elle fournit une multitude de fonctions et d'outils, permettant aux développeurs de créer facilement une variété de types. de jeu. Cet article vous aidera à apprendre Pygame à partir de zéro et fournira un didacticiel complet d'installation et de configuration, ainsi que des exemples de code spécifiques pour vous permettre de démarrer rapidement. Première partie : Installer Python et Pygame Tout d'abord, assurez-vous d'avoir

Apprenons ensemble à saisir le numéro racine dans Word Apprenons ensemble à saisir le numéro racine dans Word Mar 19, 2024 pm 08:52 PM

Lors de la modification du contenu du texte dans Word, vous devez parfois saisir des symboles de formule. Certains gars ne savent pas comment saisir le numéro racine dans Word, alors Xiaomian m'a demandé de partager avec mes amis un tutoriel sur la façon de saisir le numéro racine dans Word. J'espère que cela aidera mes amis. Tout d'abord, ouvrez le logiciel Word sur votre ordinateur, puis ouvrez le fichier que vous souhaitez modifier et déplacez le curseur vers l'emplacement où vous devez insérer le signe racine, reportez-vous à l'exemple d'image ci-dessous. 2. Sélectionnez [Insérer], puis sélectionnez [Formule] dans le symbole. Comme indiqué dans le cercle rouge dans l'image ci-dessous : 3. Sélectionnez ensuite [Insérer une nouvelle formule] ci-dessous. Comme indiqué dans le cercle rouge dans l'image ci-dessous : 4. Sélectionnez [Formule radicale], puis sélectionnez le signe racine approprié. Comme le montre le cercle rouge sur l'image ci-dessous :

Comment ajouter des tags sur Douyin pour attirer du trafic ? Quelles balises de la plateforme sont les plus faciles à attirer du trafic ? Comment ajouter des tags sur Douyin pour attirer du trafic ? Quelles balises de la plateforme sont les plus faciles à attirer du trafic ? Mar 22, 2024 am 10:28 AM

En tant que plateforme sociale de courtes vidéos populaire, Douyin dispose d’une énorme base d’utilisateurs. Pour les créateurs Douyin, utiliser des balises pour attirer du trafic est un moyen efficace d'augmenter l'exposition du contenu et d'attirer l'attention. Alors, comment Douyin utilise-t-il les balises pour attirer du trafic ? Cet article répondra à cette question en détail pour vous et présentera les techniques associées. 1. Comment ajouter des tags sur Douyin pour attirer du trafic ? Lorsque vous publiez une vidéo, assurez-vous de choisir des balises pertinentes par rapport au contenu. Ces balises doivent couvrir le sujet et les mots-clés de votre vidéo pour permettre aux utilisateurs de trouver plus facilement votre vidéo grâce aux balises. Tirer parti des hashtags populaires est un moyen efficace d’augmenter la visibilité de votre vidéo. Recherchez les balises et les tendances populaires actuelles et intégrez-les dans vos descriptions et balises vidéo. Ces balises populaires ont généralement une plus grande visibilité et peuvent attirer l’attention d’un plus grand nombre de téléspectateurs. 3. Étiquette

Quelle est l'horloge derrière le label TikTok ? Comment taguer le compte Douyin ? Quelle est l'horloge derrière le label TikTok ? Comment taguer le compte Douyin ? Mar 24, 2024 pm 03:46 PM

Lorsque nous parcourons les œuvres de Douyin, nous voyons souvent une icône d'horloge derrière la balise. Alors, quelle est exactement cette horloge ? Cet article se concentrera sur la discussion sur « Quelle est l'horloge derrière le label Douyin », dans l'espoir de fournir une référence utile pour votre utilisation de Douyin. 1. Quelle est l'horloge derrière le label Douyin ? Douyin lancera des défis thématiques d'actualité. Lorsque les utilisateurs participeront, ils verront une icône d'horloge après la balise, ce qui signifie que l'œuvre participe au défi thématique et affichera le temps restant du défi. Pour certains contenus urgents, tels que les vacances, les événements spéciaux, etc., Douyin apposera une icône d'horloge après l'étiquette pour rappeler aux utilisateurs la période de validité du contenu. 3. Balises populaires : lorsqu'une balise devient populaire, Douyin ajoutera une icône d'horloge derrière la balise pour indiquer que la balise est

Apprenez la fonction principale du langage Go à partir de zéro Apprenez la fonction principale du langage Go à partir de zéro Mar 27, 2024 pm 05:03 PM

Titre : Apprenez la fonction principale du langage Go à partir de zéro. En tant que langage de programmation simple et efficace, le langage Go est privilégié par les développeurs. Dans le langage Go, la fonction principale est une fonction d'entrée, et chaque programme Go doit contenir la fonction principale comme point d'entrée du programme. Cet article explique comment apprendre la fonction principale du langage Go à partir de zéro et fournit des exemples de code spécifiques. 1. Tout d’abord, nous devons installer l’environnement de développement du langage Go. Vous pouvez aller sur le site officiel (https://golang.org

See all articles