Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2009, 05:35   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Вопрос Bass.dll Теги

!Здравствуйте!

Работа с BASS.DLL

Подскажите мне пожалуйста как можно вытянуть с файла теги,
а точнее:
1 - Исполнитель.
2 - Название.
!Заранее очень благодарен!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 10.11.2009, 09:54   #2
Arxangelname
Пользователь
 
Аватар для Arxangelname
 
Регистрация: 12.03.2009
Сообщений: 30
По умолчанию

Для этого есть id3v1.pas или id3v2.pas там посмотри а басс можно вообще не трогать
Arxangelname вне форума Ответить с цитированием
Старый 10.11.2009, 10:08   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

mutabor выкладывал
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.11.2009, 12:10   #4
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Цитата:
Сообщение от raxp Посмотреть сообщение
Там все о бит-рейде есть! А вот о том что мне нужно там не говориться!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 25.11.2009, 12:37   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
SoftKoc
Там все о бит-рейде есть! А вот о том что мне нужно там не говориться!
тему посмотреть видимо не судьба... ось держи, даю свой модуль:
Код:
type TID3Rec = packed record
  Tag  :array[0..2] of Char;
  Title,Artist,Comment,Album:array[0..29] of Char;
  Year :array[0..3] of Char;
  Genre:Byte;
end;

function readmp3(name: string):string;

const MaxID3Genre=16;
      ID3Genre:array[0..15] of string =('Blues','Classic',Rock','Country','Dance','Hall',
'Darkwave','Metal','Disco',
'Dream','Bass','Solo','Duet','Eurodance',
'Russian','Eminem','Folk');

var   oTitle,oArtist,oAlbum,oYear,oGenre,oComment,oSize:string;

implementation
 uses mpinf;

//----- mp3
procedure FillID3TagInformation(mp3File:string);
var ID3 : TID3Rec;
    fmp3: TFileStream;
begin
 oSize:= formatfloat('#.##',GetFileSize(mp3File)/1024/1024);
 //
 try fmp3:=TFileStream.Create(mp3File, fmOpenRead);except end;
 try
  fmp3.position:=fmp3.size-128;
  fmp3.Read(ID3,SizeOf(ID3));
 finally fmp3.free;end;
 //
 if ID3.Tag <> 'TAG' then begin
  oTitle:='-';
  oArtist:='-';
  oAlbum:='-';
  oYear:='-';
  oGenre:='-';
  oComment:='-';
 end else begin
  oTitle:=ID3.Title;
  oArtist:=ID3.Artist;
  oAlbum:=ID3.Album;
  oYear:=ID3.Year;
 try if ID3.Genre in [0..MaxID3Genre] then
  oGenre:=ID3Genre[ID3.Genre] else oGenre:=IntToStr(ID3.Genre);
 except end;
  oComment:=ID3.Comment
 end  
end;

//length- mp3
function getlen(name: shortstring):shortstring;
begin
 result:=' clear';
 if fileexists(Name) then
  result:=mpinf.LoadFromFile(name)
end;


function readmp3(name: string):string;
begin
 result:='';oSize:='0';
 FillID3TagInformation(Name)
 //
 result:='Имя файла: ' + extractfilename(Name)+chr(13)+
  'Размер: '+oSize+' MB'+chr(13)+
  'Длительность: '+getlen(name)+' мин'+chr(13)+chr(13)+
  '= Параметры TAG ='#13#13+
  'Название: ' + oTitle+chr(13)+
  'Исполнитель: ' + oArtist+chr(13)+
  'Альбом: ' + oAlbum+chr(13)+
  'Год: ' + oYear+chr(13)+
  'Жанр: ' + oGenre+chr(13)+
  'Комментарий: ' + oComment
end;
Вложения
Тип файла: zip mpinf.zip (1.5 Кб, 118 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 25.11.2009 в 12:41.
raxp вне форума Ответить с цитированием
Старый 25.11.2009, 17:38   #6
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
Радость

Вот тоже примерчик:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, bass, tags;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure BASS_PlayFile(FileName: PChar);
  end;

var
  Form1: TForm1;
  Channel: DWORD;

function ChannelGetTagTrackNum(Channel: DWORD): PAnsiChar;
function ChannelGetTagTitle(Channel: DWORD): PAnsiChar;
function ChannelGetTagArtist(Channel: DWORD): PAnsiChar;
function ChannelGetTagAlbum(Channel: DWORD): PAnsiChar;
function ChannelGetTagGenre(Channel: DWORD): PAnsiChar;
function ChannelGetTagYear(Channel: DWORD): PAnsiChar;
function ChannelGetTagComments(Channel: DWORD): PAnsiChar;

implementation

{$R *.dfm}

function ChannelGetTagTrackNum(Channel: DWORD): PAnsiChar;
begin
  Result := TAGS_Read(Channel, '%TRCK');
end;

function ChannelGetTagTitle(Channel: DWORD): PAnsiChar;
begin
  Result := TAGS_Read(Channel, '%TITL');
end;

function ChannelGetTagArtist(Channel: DWORD): PAnsiChar;
begin
  Result := TAGS_Read(Channel, '%ARTI');
end;

function ChannelGetTagAlbum(Channel: DWORD): PAnsiChar;
begin
  Result := TAGS_Read(Channel, '%ALBM');
end;

function ChannelGetTagGenre(Channel: DWORD): PAnsiChar;
begin
  Result := TAGS_Read(Channel, '%GNRE');
end;

function ChannelGetTagYear(Channel: DWORD): PAnsiChar;
begin
  Result := TAGS_Read(Channel, '%YEAR');
end;

function ChannelGetTagComments(Channel: DWORD): PAnsiChar;
begin
  Result := TAGS_Read(Channel, '%CMNT');
end;

procedure TForm1.BASS_PlayFile(FileName: PChar);
begin
  if Channel <> 0 then
  begin
    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);
    BASS_ChannelPlay(Channel, False);
  end else
  begin
    BASS_ChannelStop(Channel);
    BASS_StreamFree(Channel);

    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);
    BASS_ChannelPlay(Channel, False);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  BASS_PlayFile(PChar(OpenDialog1.FileName));

  Label1.Caption := 'Номер трека: ' + ChannelGetTagTrackNum(Channel);
  Label2.Caption := 'Заголовок: ' + ChannelGetTagTitle(Channel);
  Label3.Caption := 'Исполнитель: ' + ChannelGetTagArtist(Channel);
  Label4.Caption := 'Альбом: ' + ChannelGetTagAlbum(Channel);
  Label5.Caption := 'Жанр: ' + ChannelGetTagGenre(Channel);
  Label6.Caption := 'Год: ' + ChannelGetTagYear(Channel);
  Label7.Caption := 'Коментарии: ' + ChannelGetTagComments(Channel);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Channel := 0;
  BASS_Init(-1, 44100, 0, 0, nil);
  BASS_Start;
end;

end.
Вложения
Тип файла: rar Tags.rar (294.3 Кб, 260 просмотров)
SalasAndriy вне форума Ответить с цитированием
Старый 29.11.2009, 00:11   #7
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

А если без помощи сторонних компонентов и библиотек?
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 29.11.2009, 00:35   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
А если без помощи сторонних компонентов и библиотек?
>>> пост #5
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.04.2010, 16:19   #9
mishanama
Пользователь
 
Регистрация: 04.06.2009
Сообщений: 22
По умолчанию теги

тема конечно старенькая, но я просто только что парился над этой проблемой. Может кому сгодиться.

Решил просто - в файле bass.pas переписать тип возвращаемого значения функции BASS_ChannelGetTags с PAnsiChar на Pointer. Тогда -

var tag:^TAG_ID3;
...
tag:=BASS_ChannelGetTags (Stream,BASS_TAG_ID3);
и дальше вытягивайте способом описаным в хелпе.
Например
...
Edit1.Text:=tag.artist;
...
И не надо никаких лишних компонентов и библиотек.
Правда пробовал это только на ID3v1 тегах.
mishanama вне форума Ответить с цитированием
Старый 24.04.2010, 21:52   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Удалено автором
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 24.04.2010 в 21:58.
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bass.dll larry Общие вопросы C/C++ 1 09.11.2009 13:23
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
BASS DLL ygy Мультимедиа в Delphi 4 29.09.2009 04:39
BASS.DLL VintProg Мультимедиа в Delphi 2 21.09.2009 16:36
Теги и BASS Gr@nd Мультимедиа в Delphi 2 02.09.2009 09:49