Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > MP3


Автор: Devostator 2.2.2005, 16:53
Как в Дельфи проиграть МР3 файл??? Тока не через МедиаПлауер.
И еще плиз помогите!!!!! Мне ну очень нужно, чтобы FileListBox брал файлы из определенной папки, ну я хочу сделать что-то типа плей листа (как в винампе, тока чтобы он проигровал из FileListBox и фсе). Плиз!!! Кто знает???

Автор: Snowy 2.2.2005, 17:19
Набери в поиске по форуму MP3. Обсуждались разные варианты.
Рекомендую Bass. Там есть примеры и плейера, и грабера, и конвертера, и тагера, и вообще всего, что может потребоваться.

Автор: Satana 2.2.2005, 18:36
вот нашел на торри за 20 сек попробуй должно помочь http://www.torry.net/vcl/sound/other/cmxmp310.zip

Автор: Devostator 2.2.2005, 23:09
Спасибо!!! Посмотрю щаЗ smile . Вот я слышал про Bass, тока незнаю, как в нем работать. Надо попробовать.
Добавлено @ 23:11
А где взять етот Bass?? Дайте линк smile
Добавлено @ 23:15
Нету по форуму ничего толкового по етой теме...... Жаль....... smile

Автор: Stalker Ghost 2.2.2005, 23:35
Лови линк http://www.un4seen.com. Там можно скачать все вместе: саму bass и примеры работы с ней на Delphi, Visual Basic и С++ (не помню был ли это Builder o Visual)

Автор: Devostator 2.2.2005, 23:37
Как можно сделать так, чтобы при открывании через OpenDialog открывались сразу несколько mp3 файлов (как в Winamp'e). smile
Добавлено @ 23:40
А что именно качать?? У меня с англицким тугоsmile Там есть BassWMA, BASSCD, но нету BassMP3). Или я что-то попутал smile

Автор: Stalker Ghost 3.2.2005, 00:57
А BassMP3 не существует просто smile . Тебе надо Bass скачивать smile .

Цитата(Devostator @ 2.2.2005, 23:37)
Как можно сделать так, чтобы при открывании через OpenDialog открывались сразу несколько mp3 файлов (как в Winamp'e).


Ну я работал с Bass и загружал файлы в ListBox запоминая путь к ним.
Вот код, укороченный:
Код

unit unitMain;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 ComCtrls, StdCtrls, ExtCtrls, jpeg, Buttons,
 LittleButton, Menus, Bass, Dialogs;

type
  TfrmMain = class(TForm)
   lbList: TListBox;
   pmListAddItem: TPopupMenu;
   AddFile: TMenuItem;
   AddFolder: TMenuItem;
   pmListDeleteItem: TPopupMenu;
   DeleteSelected: TMenuItem;
   DeleteUnselected: TMenuItem;
   DeleteList: TMenuItem;
   odAddFile: TOpenDialog;
   pListControls: TPanel;
   lbAddToList: TButton;
   lbDeleteOfList: TButton;
   procedure DeleteListClick(Sender: TObject);
   procedure DeleteSelectedClick(Sender: TObject);
   procedure DeleteUnselectedClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure AddFileClick(Sender: TObject);
   procedure lbListDblClick(Sender: TObject);
   procedure lbAddToListClick(Sender: TObject);
   procedure lbDeleteOfListClick(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
   frmMain : TfrmMain;
    stream : HSTREAM;
   

implementation
{$R *.dfm}

type

  TFilePath=record
   FileName : string;
   FilePath : TStringList;
  end;

var    FI                   : TFilePath;
   Playing              : Boolean=False;
   Repeating            : Boolean=False;



{***Creacion & destrucion de la forma principal - inicio****}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
 // Chequear si BASS 2.0 se ha cargado
{версия} if (BASS_GetVersion <> DWORD(MAKELONG(2,0)))  then
 begin
   MessageBox(0, 'BASS versión 2.0 no ha sido cargada', 'Incorrecta BASS.DLL', 0);
   Halt;
 end;

 // Inicializar BASS; - dispositivo por defecto
 if (not BASS_Init(1, 44100, 0, Handle, nil)) then
 begin
   MessageBox(0, 'Imposible inicializar el dispositivo', 'Error', 0);
   Halt;
 end;
 
 FI.FilePath:= TStringList.Create;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
 BASS_Free;
 FI.FilePath.Destroy;
end;
{***Creacion & destrucion de la forma principal - final****}

procedure TfrmMain.DeleteListClick(Sender: TObject);
begin
//Limpiar la lista
if lbList.Items.Count<>0 then
   begin
    lbList.Clear;
    FI.FilePath.Clear;
   end;
end;

procedure TfrmMain.DeleteSelectedClick(Sender: TObject);
begin
//Eliminar lo selecionado
if lbList.Items.Count<>0 then lbList.DeleteSelected;
end;

procedure TfrmMain.DeleteUnselectedClick(Sender: TObject);
var i : integer;
begin
//Eliminar no seleccionado
if lbList.Items.Count<>0 then
  begin
   i:=0;
   while i<=lbList.Items.Count-1 do
    begin
     if not lbList.Selected[i] then
       begin
        lbList.Items.Delete(i);
        dec(i);
       end;
     inc(i);
    end;
  end;
end;

procedure TfrmMain.AddFileClick(Sender: TObject);
var i : integer;
begin
//Añadir archivos a la lista
 if odAddFile.Execute then
   for i:=0 to odAddFile.Files.Count-1 do
    begin
     FI.FilePath.Add(odAddFile.Files.strings[i]);
     FI.FileName:=ExtractFileName(odAddFile.Files.strings[i]);
     Delete(FI.FileName,length(FI.FileName)-3,4);
     lbList.Items.Add(FI.FileName);
    end;
 odAddFile.FileName:='';
end;

procedure TfrmMain.lbAddToListClick(Sender: TObject);
var x,y : integer;
begin
 //Sacar el menu Añadir en sitio adecuado
 x:=frmMain.Left+pListControls.Left+lbAddToList.Left;
 y:=frmMain.Top+pListControls.Top+lbAddToList.Top+lbAddToList.Height;
pmListAddItem.Popup(x,y);
end;

procedure TfrmMain.lbDeleteOfListClick(Sender: TObject);
var x,y : integer;
begin
//Sacar el menu Eliminar en sitio adecuado
x:=frmMain.Left+pListControls.Left+lbDeleteOfList.Left;
y:=frmMain.Top+pListControls.Top+lbDeleteOfList.Top+lbDeleteOfList.Height;
pmListDeleteItem.Popup(x,y);
end;

procedure TfrmMain.lbListDblClick(Sender: TObject);
var f: PChar;
begin
Playing:=False;
BASS_StreamFree(stream);
f := PChar(FI.FilePath.strings[lbList.ItemIndex]);
stream := BASS_StreamCreateFile(FALSE, f, 0, 0, 0);
gbPosition.Max := Trunc(BASS_ChannelBytes2Seconds(stream,
         BASS_StreamGetLength(stream)));
BASS_StreamPlay(stream, FALSE, 0);
Playing:=True;
end;

end.


OpenDialog options: [ofHideReadOnly,ofAllowMultiSelect,ofEnableSizing]
ListBox multiselect: true

Ну и Popupы сотвестенно. Думаю что создашь сам

Пользуйся smile

Зы: может удалил чего-то лишнего - сообщай. Да и коментарии на испанском smile
И будь осторожен с версией Bass. Я использовал 2.0 а на станице уже 2.1

Автор: Devostator 4.2.2005, 00:31
ЛЮди!! У меня такая фигня, я скачал Bass 2.1 но не могу установить, может потому что у меня 6 версия Дельфи??

Автор: Snowy 4.2.2005, 09:00
Не можешь установить чего?
BASS это не компонент, а библиотека.
Бери примеры и смотри, как там делается работа с BASS.
BASS можно использовать из любой Delphi и вообще любого 32-бит компилятора/интерпретатора.

Автор: Devostator 4.2.2005, 23:24
Я один из примеров загрузил, а он не может найти библиотеку Bass, куда ету библиотеку пихать?
Объясните пжЛуста smile . Я в Delphi пол года, но еще не разу не загружал библиотеки......

Автор: Snowy 7.2.2005, 15:13
Ее нужно пихать в каталог с твоей программой.
Если юзаешь bass, то нужно таскать ее с собой в том же каталоге.
P.S. Как вариант в System32, но этот номер не всегда проходит - другие проги могут его юзать.
Добавлено @ 15:18
точнее юзать ту версию, которую кто-то положил туда до тебя.

Автор: Devostator 7.2.2005, 23:57
Спасибо! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)