Рубрики

C программа для тегов ID3

Вступление:

Цифровые аудиофайлы могут содержать, помимо звуковой дорожки, связанный текст и / или графическую информацию. Информация, с которой вы, вероятно, знакомы, принимает форму названия песни, имени исполнителя, названия альбома, года и жанра. Это информация, отображаемая при воспроизведении цифрового аудиофайла на компьютере или портативном устройстве.

Процесс включения информации, отличной от звука, в эти цифровые аудиофайлы обычно называют «пометкой», при которой вы «помечаете» аудиофайл дополнительной информацией, которая описывает аудиофайл. Оригинальный стандарт для маркировки цифровых файлов был разработан в 1996 году Эриком Кемпом, и он придумал термин ID3. В то время ID3 просто означало «IDentify MP3».

Версии ID3:

Существуют в основном 2 версии ID3, ID3v1 и ID3v2, как описано ниже:

1. ID3v1: стандарт MP3 не включал метод хранения метаданных файла. В 1996 году у Эрика Кемпа возникла идея добавить небольшой фрагмент данных в аудиофайл, что позволило решить проблему. Метод, теперь известный как ID3v1, быстро стал стандартом для хранения метаданных в MP3.

Тег ID3v1 занимает 128 байтов, начиная со строки TAG 128 байтов с конца файла. Тег был помещен в конец файла для обеспечения совместимости со старыми медиаплеерами. Некоторые игроки проигрывали небольшой всплеск статики, когда читали тег, но большинство игнорировали его, и почти все современные игроки правильно его пропустили. Этот тег позволяет 30 байтов каждый для заголовка, исполнителя, альбома и «комментария», четырех байтов для года и байта для идентификации жанра песни из предопределенного списка из 80 значений (позже Winamp расширил этот список до 148 значений).

Одно из улучшений ID3v1 было сделано Майклом Мучлером в 1997 году. Поскольку поле комментария было слишком маленьким, чтобы написать что-нибудь полезное, он решил урезать его на два байта и использовать эти два байта для хранения номера дорожки. Такие теги называются ID3v1.1

2. ID3v2: в 1998 году несколькими участниками были созданы новые спецификации под названием ID3v2. [13] Хотя он носит имя ID3, его структура сильно отличается от ID3v1.

Теги ID3v2 имеют переменный размер и, как правило, появляются в начале файла, что помогает потоковому мультимедиа, поскольку метаданные по существу доступны, как только файл начинает потоковую передачу, вместо того, чтобы сначала считывать весь файл, как в случае с ID3v1. , Теги ID3v2 состоят из нескольких кадров, каждый из которых содержит часть метаданных. Например, фрейм TIT2 содержит заголовок, а фрейм WOAR содержит URL-адрес веб-сайта исполнителя. Кадры могут иметь длину до 16 МБ, а общий размер тега ограничен 256 МБ. Проблема интернационализации была решена путем разрешения кодирования строк не только в ISO-8859-1, но и в Unicode. У ID3v2 есть дополнительные подклассификации к 3 версиям как ID3v2.2, ID3v2.3 и ID3v2.4 с незначительными изменениями в кадрах среди них.

ID3 Taggers:

Теги ID3 могут быть отредактированы различными способами. На некоторых платформах свойства файла могут быть отредактированы путем просмотра расширенной информации в файловом менеджере. Кроме того, большинство аудиоплееров позволяют редактировать отдельные или группы файлов. Редактирование групп файлов часто называют «пакетной маркировкой». Существуют также специализированные приложения, называемые тегерами, которые специально предназначены для редактирования тегов и связанных задач. Некоторые, такие как puddletag, предлагают расширенные функции, такие как расширенное пакетное тегирование или редактирование на основе регулярных выражений.

Ниже приведен код для реализации собственного тегера.

Примеры:

Input: Input MP3 file name which needs to tagged like input.mp3 and output MP3 
file name which would be created as a tagged MP3 file like output.mp3.

Output: MP3 file with tagging information as entered by the user.

Ниже приведен код C для реализации собственного тегера:

// C программа для пометки ID3 музыкальных файлов
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

  

struct tags // Структура для хранения информации о тегах.

{

    char title[100], artist[100], album[100], 

         track_num[100], year[100], genre[100];

};

  

void merge_file(char* file1, char* file2, char* file3)

{

    FILE *f1, *f2, *f3;

    int ch;

    f1 = fopen(file1, "rb"); // Открытие в режиме записи.

    f2 = fopen(file2, "rb");

    f3 = fopen(file3, "wb");

  

    if (f1 == NULL || f2 == NULL) {

        exit(EXIT_FAILURE);

    }

  

    while ((ch = fgetc(f1)) != EOF) // Добавление информации о тегах.

        fputc(ch, f3);

  

    while ((ch = fgetc(f2)) != EOF) // Добавление информации о медиафайле.

        fputc(ch, f3);

  

    // Закрытие файлов.

    fclose(f1);

    fclose(f2);

    fclose(f3);

}

  

void tagging(char* file1, char* file2, char* file3)

{

    int size = 0;

    char clean[100];

    struct tags t;

    unsigned char pad1[7] = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76 };

    unsigned char pad2[3] = { 0x00, 0x00, 0x00 };

  

    FILE* f1;

    f1 = fopen(file1, "wb");

  

    fprintf(f1, "ID3");

    fwrite(pad1, sizeof(pad1), 1, f1); / * Необходимый тег для идентификации

                                        как медиа-файл с тегом ID3. * /

  

    gets(clean); // Очистка входного потока.

  

    // Принимаем данные от пользователя.

    printf("\nEnter the title of the mp3:");

    scanf("%[^\n]%*c", t.title);

  

    printf("\nEnter the artist of the mp3:");

    scanf("%[^\n]%*c", t.artist);

  

    printf("\nEnter the album of the mp3.\n");

    scanf("%[^\n]%*c", t.album);

  

    printf("\nEnter the year of the mp3.\n");

    scanf("%[^\n]%*c", t.year);

  

    printf("\nEnter the track number of the mp3.\n");

    scanf("%[^\n]%*c", t.track_num);

  

    // Номер дорожки

    // Тег для идентификации номера дорожки.

    fprintf(f1, "TRCK"); 

  

    // Существенные 3 NULL-бита, необходимые для разделения.

    fwrite(pad2, sizeof(pad2), 1, f1); 

  

    size = strlen(t.track_num);

    size++; // Расчет размера.

  

     // Добавляем размер номера дорожки к тегу.

    fprintf(f1, "%c", size);

  

    // Существенные 3 NULL-бита, необходимые для разделения.

    fwrite(pad2, sizeof(pad2), 1, f1);

  

    // Добавляем номер тега, введенный пользователем.

    fprintf(f1, "%s", t.track_num); 

  

    // Печать года

    fprintf(f1, "TYER"); 

    fwrite(pad2, sizeof(pad2), 1, f1); 

    size = strlen(t.year);

    size++; // Расчет размера.

    fprintf(f1, "%c", size);

    fwrite(pad2, sizeof(pad2), 1, f1); 

    fprintf(f1, "%s", t.year); 

  

    // Печать заголовка

    fprintf(f1, "TIT2"); 

    fwrite(pad2, sizeof(pad2), 1, f1); 

    size = strlen(t.title);

    size++; // Расчет размера.

    fprintf(f1, "%c", size);

    fwrite(pad2, sizeof(pad2), 1, f1); 

    fprintf(f1, "%s", t.title);

  

    // Печать художника

    fprintf(f1, "TPE1"); 

    fwrite(pad2, sizeof(pad2), 1, f1); 

    size = strlen(t.artist);

    size++; // Расчет размера.

    fprintf(f1, "%c", size);

    fwrite(pad2, sizeof(pad2), 1, f1); 

    fprintf(f1, "%s", t.artist); 

  

    // Распечатать альбом

    fprintf(f1, "TALB"); 

    fwrite(pad2, sizeof(pad2), 1, f1); 

    size = strlen(t.album);

    size++; // Расчет размера.

    fprintf(f1, "%c", size);

    fwrite(pad2, sizeof(pad2), 1, f1); 

    fprintf(f1, "%s", t.album); 

  

    // Жанр печати

    fprintf(f1, "TCON"); // Тег для определения жанра.

    fwrite(pad2, sizeof(pad2), 1, f1);

    size = strlen(t.genre);

    size++; // Расчет размера.

    fprintf(f1, "%c", size); 

    fwrite(pad2, sizeof(pad2), 1, f1); 

    fprintf(f1, "%s", t.genre); 

  

    fclose(f1); // Закрытие файла.

}

  

int main()

{

    char file1[100] = "media_info.txt", file2[100], file3[100];

  

    printf("\nEnter the input mp3 file name\n");

    scanf("%s", file2);

    printf("\nEnter the output mp3 file name\n");

    scanf("%s", file3);

  

    // Функция для добавления медиа информации во входной файл.

    tagging(file1, file2, file3); 

  

    // Функция для объединения медиа-информации и медиа

    // входной файл.

    merge_file(file1, file2, file3); 

    return 0;

}

Примечание . Папка, в которой вы запускаете код, должна содержать ваш файл input.mp3.

Ссылки:
http://id3.org/id3v2.3.0
https://en.wikipedia.org/wiki/ID3#ID3v2

Рекомендуемые посты:

C программа для тегов ID3

0.00 (0%) 0 votes