Программа для работы с тегами файлов .mp3

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    83,92 Кб
  • Опубликовано:
    2014-11-02
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программа для работы с тегами файлов .mp3

Северо-Кавказский горно-металлургический институт

(Государственный Технологический университет)









Курсовая работа

по дисциплине "Программирование на Delphi"

"Программа для работы с тегами файлов .mp3"












г. Владикавказ, 2015 г.

Задание на курсовую работу

Основная задача: Написать программу для работы с тегами .mp3 файлов.

Необходимые функции: a) Позволить пользователю задавать произвольную директорию, содержащую музыкальные файлы.

б) Программа в зависимости от функциональности осуществляет поиск или рекурсивный поиск файлов в этой директории и формирует csv-файл следующим образом: абсолютный путь к mp3-файлу, название, исполнитель, альбом, год. жанр.

в) Разделитель csv-файлов задается пользователем.

г) Возможно выполнение обратной задачи: пользователь задает csv-файл аналогичного формата, программа исправляет теги в музыкальных файлах в соответствии с данными, содержащимся в указанном csv-файле.

Метод решения.

Так как программа должна иметь графический и интуитивно-понятный интерфейс, то для решения очень подходит Delphi. Была выбрана и признана наиболее подходящей версия 7.0.

программа файл тег музыкальный

1. Входные и выходные данные

Входные данные:

Пользователь вводит при использовании функции "загрузка mp3-файлов" разделитель csv-файла в строке ввода и выбирает директория для поиска mp3-файлов. В данном случае mp3-файлы являются входными файлами. И далее выбирает директорию для сохранения csv-файла с загруженными Mp3-тегами. Сsv-файла является в данном случае выходными данными.

Выходные данные:

При использование функции "Загрузка csv-файла" пользователь выбирает csv-файл (который является входными данными). После этого в mp3-файлах, указанных в csv-файле, происходит корректировака mp3-тегов. Mp3-файлы в этом случае являются выходной информацией.

. Список процедуры и функций

Ядро программы:

) procedure findfiles(startfolder, mask: string; tabl: TStringGrid; scansubfolders: boolean = true) - процедура ищет файлы в указанной директории.

) procedure FormActivate(Sender: TObject) - процедура, выполняющая начальные действия.

) procedure Loadmp31Click(Sender: TObject) - процедура загрузки mp3-файлов.

) procedure Exit1Click(Sender: TObject) - процедура выхода из программы.

) procedure Loadcsv1Click(Sender: TObject) - процедура загрузки csv-файлов.

) procedure About1Click(Sender: TObject) - процедура вызова формы, описывающего программу.

) procedure delspace(var s: string) - процедура удаления пробелов их строк.

) function getmp3tag(fn: string): tmp3tag функция получения mp3-тегов.

9) function write_probel(Count: integer; rasmer : integer) : string - функция написания недостающих пробелов.

) function SetMp3Tag(MP3Tag: TMP3Tag; FileName: string): Boolean - функция записи тегов.

) procedure del_kavychki(var s: string) - процедура удаления кавычек

) procedure write_db(adress_file_local : string; tabl : TStringGrid; str : string) - процедура записи в csv-файл.

) procedure read_db (FileName: String; separator: char; tabl : TStringGrid) - процедура чтения сsv-файла.

) function find_char(str : string) : char -функция нахождения разделителя.

3. Вид окон программы

Ядро программы:


Подключаемые модули:

Модуль 1 (Заставка):


Модуль 2 (Выбор директории для сканирования):


Сохранение csv-файла:


Модуль 3 (Описание программы):


4. Описание программы

Используемые элементы.

Ядро программы:

1) MainMenu1: TMainMenu;

) File1: TMenuItem;

) Loadmp31: TMenuItem;

) Exit1: TMenuItem;

) od1: TOpenDialog;

) tabl: TStringGrid;

) Loadcsv1: TMenuItem;

) About1: TMenuItem;

) sd1: TSaveDialog;

10) StatusBar1: TStatusBar;

Подключаемые модули:

Модуль 1 (Заставка):

1) Panel1: TPanel;

) OKButton: TButton;

) Timer1: TTimer;

4) Image1: TImage;

) Label1: TLabel;

Модуль 2 (Выбор директории для сканирования):

1) DirectoryOutline1: TDirectoryOutline;

) Label1: TLabel;

) Label2: TLabel;

) Button1: TButton;

) Edit1: TEdit;

7) Label3: TLabel;

) Label4: TLabel;

Модуль 3 (Описание программы):

1) Panel1: TPanel;

) ProductName: TLabel;

) Version: TLabel;

) Copyright: TLabel;

) Comments: TLabel;

) OKButton: TButton;

7) Image1: TImage;

. Код программы

Ядро программы:

unit Unit2;, Messages, SysUtils, Classes, Graphics, Controls, Forms,, StdCtrls, Menus, Grids, Outline, DirOutln, ComCtrls, ShellCtrls, Masks,;tag = packed record, title, artist, album, year, comment : string;;= class(TForm): TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TOpenDialog;: TStringGrid;: TMenuItem;: TMenuItem;: TSaveDialog;findfiles(startfolder, mask: string; tabl: TStringGrid;: boolean = true);FormActivate(Sender: TObject);Loadmp31Click(Sender: TObject);Exit1Click(Sender: TObject);Loadcsv1Click(Sender: TObject);About1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;: integer;_db : string;Unit1, Unit4, Unit5;

{$R *.dfm}

//------------------------------------------------------------------------------

//Функция для получения тегов

function getmp3tag(fn: string): tmp3tag;: array[0..127] of char;: file;: byte;: string;delspace(var s: string);

begin // Удаляет пробелы и символы

// #0 в конце строки.

if length(s) = 0 then exit;s[length(s)] in [' ', #0] do(s,length(s),1);s = '' then break;;;.filename := fn;.title := '';.artist := '';.album := '';.year := '';.comment := '';(f,fn); // Открываем файл

{$i-} // с проверкой его существования :)(f,1);(f,filesize(f)-128); // Читаем тэг - последние 128 байт

blockread(f,tag,128);(f);

{$i+}ioresult<>0 then;;:= '';i := 0 to 127 do:= s + tag[i];.title := copy(s,4,30);(result.title);.artist := copy(s,34,30);(result.artist);.album := copy(s,64,30);(result.album);.year := copy(s,94,4);(result.year);.comment := copy(s,98,30);

delspace(result.comment);;

//конец функция для получения тегов

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

// Функция для написания пробеловwrite_probel(Count: integer; rasmer : integer) : string;: integer;:= '';(rasmer - count) = 1 then:= ' 'count < rasmer then:= ' ';i := 1 to 120 do:= result + ' ';;

end;

// Функция для написания пробелов

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//Функция для записи тегов в mp3-файл

function SetMp3Tag(MP3Tag: TMP3Tag; FileName: string): boolean;_write : file of byte;: string[30];_probel : string;_str : integer;:= false;(f_write, FileName);

{$i-}(f_write);

{$i+}(f_write,filesize(f_write)-125);

//Заносим название_str := length(MP3Tag.Title);_probel := write_probel(size_str,30);:= MP3Tag.Title + str_probel;(f_write, str, 30);

//Заносим артиста_str := length(MP3Tag.Artist);_probel := write_probel(size_str,30);:= MP3Tag.Artist + str_probel;(f_write, str, 30);

//Заносим альбом_str := length(MP3Tag.Album);_probel := write_probel(size_str,30);:= MP3Tag.Album + str_probel;(f_write, str, 30);

//Заносим год_str := length(MP3Tag.Year);_probel := write_probel(size_str,4);:= MP3Tag.Year + str_probel;(f_write, str, 4);

//Заносим комменты_str := length(MP3Tag.Comment);_probel := write_probel(size_str,30);:= MP3Tag.Comment + str_probel;(f_write, str, 30);

// str := write_probel(1,128);

// write(f, str);(f_write);:= true;:= false;

end;;

//конец функциb для записи тегов

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//Функция для удаления " из строкdel_kavychki(var s: string);: integer;.length(s) = 0 then exit;

{$I-}(s,1,1);(s,length(s),1);

{$I+}

end;

//конец функции для удаления " из строк

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//функция для записи строк в csv-файл

procedure write_db(adress_file_local : string; tabl : TStringGrid; str : string);: textfile;: integer;:= '"'+str+'"';(fw, adress_file_local);(fw);i := 1 to tabl.RowCount - 1 do // ïðîõîä ïî âñåì ñòðîêàìtabl.Cells[0,i]<> '' then begin(fw,

'"'+tabl.Cells[0, i], str,.Cells[1, i], str,.Cells[2, i], str,.Cells[3, i], str,.Cells[4, i], str,.Cells[5, i], str,.Cells[6, i]);;

end;

closefile(fw);

end; //конец функции для записи строк в csv-файл

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//функция чтения строк из csv-файл

procedure read_db (FileName: String; separator: char; tabl : TStringGrid);f: TextFile;, s2: string;, j: integer;:= 1;.RowCount := 2;.Cells[0, 1] := '';.Cells[1, 1] := '';.Cells[2, 1] := '';.Cells[3, 1] := '';.Cells[4, 1] := '';.Cells[5, 1] := '';.Cells[6, 1] := '';(f, FileName);

{$i+}not eof(f) do(f, s1);:= i + 1;:= 0;pos(separator, s1)<>0 do:= copy(s1,1,pos(separator, s1)-1);:= j + 1;(s1, 1, pos(separator, S1));_kavychki(s2);.Cells[j-1, i-1] := s2;;pos (separator, s1)=0 then:= j + 1;.Cells[j-1, i-1] := s1;;.RowCount := i+1;;(f);

end;

//функция чтения строк из csv-файл

//----------------------------------------------------------------------------

//----------------------------------------------------------------------------

//функция нахождения файлов и вложенных кодкаталогов в указанной директории

procedure TForm1.findfiles(startfolder, mask: string; tabl: TStringGrid;: boolean = true);: tsearchrec;

findresult: integer;: integer;tag : tmp3tag;

begin:=includetrailingbackslash(startfolder);:=findfirst(startfolder+'*.*', faanyfile, searchrec);findresult = 0 do with searchrec do begin(attr and fadirectory)<>0 then beginscansubfolders and (name<>'.') and (name<>'..') then(startfolder+name, mask, tabl, scansubfolders);else beginMatchesMask(name, mask) then

begintag := getmp3tag(startfolder+name);

tabl.RowCount:=tabl.RowCount+1;:= 1;

while tabl.Cells[0,nomer]<>'' do // ищем пустую строку для добавления записи

nomer :=nomer+1;.Cells[0,nomer]:= inttostr(nomer); // поле номер задания.Cells[1,nomer]:= mp3tag.filename; //поле имя файла получаем из OpenDialog

tabl.cells[2,nomer]:= mp3tag.title;.Cells[3,nomer]:= mp3tag.artist;.Cells[4,nomer]:= mp3tag.album;

tabl.Cells[5,nomer]:= mp3tag.year;.Cells[6,nomer]:= mp3tag.comment;;;:=findnext(searchrec);;(searchrec);;

nomer := 1;;;

//конец функции нахождения файлов и вложенных кодкаталогов в указанной директории

//----------------------------------------------------------------------------

//----------------------------------------------------------------------------

//при создании формы создаем начало таблицу

procedure TForm1.FormActivate(Sender: TObject);

//заполняем шапку.cells[0,0]:= 'Номер';.cells[1,0]:= 'Адрес файла';.cells[2,0]:= 'Название';.cells[3,0]:= 'Артист';.cells[4,0]:= 'Альбом';.cells[5,0]:= 'Год выпуска';.cells[6,0]:= 'Комментарии';.ShowModal;.free;;

//Конец создание начало таблицы

//------------------------------------------------------------------------------

//-------------------------------------------------------------------------------

//Процедура на загрузку тегов в csv-файл из указанного mp3-файла

procedure TForm1.Loadmp31Click(Sender: TObject);: integer;.SimpleText:= 'Загружаем mp3-файлы...';.Button1.Font.Color:=clWindowText;.ShowModal;OKRightDlg.Button1.Font.Color = clScrollBar then:= 1;tabl.Cells[0,nomer]<>'' do.cells[0,nomer]:= '';

tabl.cells[1,nomer]:= '';.cells[2,nomer]:= '';.cells[3,nomer]:= '';.cells[4,nomer]:= '';.cells[5,nomer]:= '';.cells[6,nomer]:= '';

nomer := nomer + 1;;.RowCount := 2;(OKRightDlg.DirectoryOutline1.directory, '*.mp3', tabl, true);(OKRightDlg.Edit1.Text <> '"') and (length(OKRightDlg.Edit1.Text) = 1) thensd1.execute then_db(sd1.filename , tabl, OKRightDlg.Edit1.Text);.SimpleText:= 'Были загруженны mp3-файлы из директории'+OKRightDlg.DirectoryOutline1.directory+'.';

end.SimpleText:= 'Выбран неправильный разделитель! Пожалуйста, выберите другой.';

end.SimpleText:= 'Загрузка mp3-файлов была отменена!';

end;

//Конец процедуры на загрузку тегов в csv-файл из указанного mp3-файла

//-------------------------------------------------------------------------------

//-------------------------------------------------------------------------------

//функция на поиск указанного символа в указанной строке

function find_char(str : string) : char;, number : integer;(str, number);i := 1 to number doi < 4 then;(str[i] = '"') and (str[i-2] = '"') then:= str[i-1];;

end;;;

//Конец функции на поиск указанного символа в указанной строке

//-------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//процедура на загрузку csvTForm1.Loadcsv1Click(Sender: TObject);tag : tmp3tag;

OldMp3Tag : tmp3tag;, position : integer;

rasdelitel : char;_str : string;: textfile;.SimpleText:= 'Загружаем csv-файл...';od1.Execute then // если OpenDialog - выполнен без ошибок

begin

//Узнаем какой разделитель задействован

AssignFile (f, od1.FileName);

{$i-}(f);

{$i+}(f, file_str);:= find_char(file_str);

closefile(f);

//Конец узнавания какой разделитель задействован

read_db(od1.FileName, rasdelitel, tabl);i := 1 to tabl.RowCount - 1 do // проход по всем строкам

mp3tag := getmp3tag(tabl.Cells[1, i]);

OldMp3Tag.filename := tabl.Cells[1,i];Tag.title := tabl.Cells[2,i];Tag.artist := tabl.Cells[3,i];Tag.album := tabl.Cells[4,i];Tag.year := tabl.Cells[5,i];Tag.comment := tabl.Cells[6,i];Tag(OldMp3Tag, tabl.Cells[1, i]);.SimpleText:= 'Загружен сsv-файла с адресом '+od1.FileName+'.';.SimpleText:= 'Загрузка csv-файла отменена!';

end;

//конец процедура на завершения программы

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//процедура на завершения программыTForm1.Exit1Click(Sender: TObject);.Terminate; //закрыть приложение;

//конец процедура на завершения программы

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//Процедура, показывающая о программеTForm1.About1Click(Sender: TObject);.showmodal;

end;

end.

//конец процедуры, показывающую о программе

//------------------------------------------------------------------------------

Подключаемые модули:

a) Aboutbox (описание программы):

unit Unit4;Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,, ExtCtrls, jpeg;= class(TForm): TPanel;: TLabel;: TLabel;: TLabel;: TLabel;: TButton;: TImage;

{ Public declarations };: TAboutBox;

{$R *.dfm}.

б) TOKRightDlg (модуль для задания директории с mp3-файлами):Unit1;Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,, ExtCtrls, ComCtrls, ShellCtrls, Grids, Outline, DirOutln;= class(TForm): TDirectoryOutline;: TMemo;: TLabel;: TLabel;: TButton;Memo1KeyPress(Sender: TObject; var Key: Char);Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TOKRightDlg;

{$R *.dfm}TOKRightDlg.Memo1KeyPress(Sender: TObject; var Key: Char);.drive := Key;;TOKRightDlg.Button1Click(Sender: TObject);.close;;.

в) AboutBox1 (заставка):Unit5;Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,, ExtCtrls, jpeg;= class(TForm): TPanel;: TButton;: TTimer;: TImage;: TLabel;Timer1Timer(Sender: TObject);

{ Private declarations }

{ Public declarations };: TAboutBox1;Unit4;

{$R *.dfm}TAboutBox1.Timer1Timer(Sender: TObject);;;.

. Блок-схемы

1)      Загрузка mp3:

.SimpleText:= 'Загружаем mp3-файлы...';.Button1.Font.Color:=clWindowText;.ShowModal;:= 1;tabl.Cells

[0,nomer]<>'' do.cells[0,nomer]:= '';

tabl.cells[1,nomer]:= '';.cells[2,nomer]:= '';.cells[3,nomer]:= '';.cells[4,nomer]:= '';.cells[5,nomer]:= '';

tabl.cells[6,nomer]:= '';:= nomer + 1;.RowCount := 2;.Button1.Font.= clScrollBar(OKRightDlg.DirectoryOutline1. statusbar1.SimpleText:= 'Загрузка directory, mp3-файлов была отменена!';

'*.mp3', tabl, true);

(OKRightDlg.Edit1.Text <> '"')(length(OKRightDlg..Text) = 1)1.SimpleText:=’Выбран неправильный

разделитель! Пожалуйста, выберите другой.';

sd1.execute

write_db(sd1.filename , tabl, OKRightDlg.Edit1.Text);.SimpleText:= 'Были загруженны mp3-файлы из директории'+OKRightDlg.DirectoryOutline1.directory+'.';.

2)      Загрузка csv:

Begin.

statusbar1.SimpleText:=

'Загружаем csv-файл...';.Execute(f, od1.FileName); statusbar1.SimpleText:= {$i-} Reset(f); 'Загрузка csv-файла отменена!';

{$i+} readln (f, file_str);:= find_char(file_str);(f);_db(od1.FileName,, tabl);:= 1 to.RowCount - 1 doTag.filename := tabl.Cells[1,i];

OldMp3Tag.title := tabl.Cells[2,i];

OldMp3Tag.artist := tabl.Cells[3,i];Tag.album := tabl.Cells[4,i];Tag.year := tabl.Cells[5,i;]Tag.comment := tabl.Cells[6,i];Tag(OldMp3Tag, tabl.Cells[1, i]).

Похожие работы на - Программа для работы с тегами файлов .mp3

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!