Implements Module Player working in Form
* Implements Embedding .xm music in Final Application
This commit is contained in:
172
UOS/examples/testfpguistream.pas
Normal file
172
UOS/examples/testfpguistream.pas
Normal file
@@ -0,0 +1,172 @@
|
||||
program testfpgui;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
{$DEFINE UseCThreads}
|
||||
uses
|
||||
{$IFDEF UNIX}
|
||||
cthreads,
|
||||
{$ENDIF}
|
||||
SysUtils, Classes, fpg_base, fpg_main, math, uos_flat,
|
||||
{%units 'Auto-generated GUI code'}
|
||||
fpg_form, fpg_button
|
||||
{%endunits}
|
||||
;
|
||||
|
||||
type
|
||||
|
||||
Ttest = class(TfpgForm)
|
||||
private
|
||||
{@VFD_HEAD_BEGIN: test}
|
||||
Button1: TfpgButton;
|
||||
{@VFD_HEAD_END: test}
|
||||
public
|
||||
procedure AfterCreate; override;
|
||||
procedure btnStartClick(Sender: TObject);
|
||||
|
||||
procedure btnCloseClick(Sender: TObject);
|
||||
procedure ConsolePlay;
|
||||
end;
|
||||
|
||||
{@VFD_NEWFORM_DECL}
|
||||
|
||||
{@VFD_NEWFORM_IMPL}
|
||||
var
|
||||
res: integer;
|
||||
ordir, opath, PA_FileName, MP_FileName, theurl : string;
|
||||
PlayerIndex1: cardinal = 0;
|
||||
|
||||
procedure Ttest.AfterCreate;
|
||||
begin
|
||||
{%region 'Auto-generated GUI code' -fold}
|
||||
|
||||
{@VFD_BODY_BEGIN: test}
|
||||
Name := 'test';
|
||||
SetPosition(427, 240, 300, 100);
|
||||
WindowTitle := 'Internet Radio test';
|
||||
IconName := '';
|
||||
Hint := '';
|
||||
WindowPosition := wpScreenCenter;
|
||||
Ondestroy := @btnCloseClick;
|
||||
|
||||
Button1 := TfpgButton.Create(self);
|
||||
with Button1 do
|
||||
begin
|
||||
Name := 'Button1';
|
||||
SetPosition(100, 35, 100, 30);
|
||||
FontDesc := '#Label1';
|
||||
Hint := '';
|
||||
ImageName := '';
|
||||
TabOrder := 1;
|
||||
Text := 'Start';
|
||||
onClick := @btnStartClick;
|
||||
end;
|
||||
|
||||
{@VFD_BODY_END: test}
|
||||
{%endregion}
|
||||
end;
|
||||
|
||||
procedure Ttest.btnStartClick(Sender: TObject);
|
||||
begin
|
||||
ConsolePlay;
|
||||
end;
|
||||
|
||||
procedure Ttest.btnCloseClick(Sender: TObject);
|
||||
begin
|
||||
uos_stop(PlayerIndex1);
|
||||
sleep(100);
|
||||
uos_UnloadLib();
|
||||
end;
|
||||
|
||||
procedure Ttest.ConsolePlay;
|
||||
begin
|
||||
|
||||
ordir := (ExtractFilePath(ParamStr(0)));
|
||||
|
||||
{$IFDEF Windows}
|
||||
{$if defined(cpu64)}
|
||||
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||
MP_FileName := ordir + 'lib\Windows\64bit\LibMpg123-64.dll';
|
||||
{$else}
|
||||
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||
MP_FileName := ordir + 'lib\Windows\32bit\LibMpg123-32.dll';
|
||||
{$endif}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF linux}
|
||||
{$if defined(cpu64)}
|
||||
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||
MP_FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||
{$else}
|
||||
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||
MP_FileName := ordir + 'lib/Linux/32bit/LibMpg123-32.so';
|
||||
{$endif}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF freebsd}
|
||||
{$if defined(cpu64)}
|
||||
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||
MP_FileName := ordir + 'lib/FreeBSD/64bit/libmpg123-64.so';
|
||||
{$else}
|
||||
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||
MP_FileName := ordir + 'lib/FreeBSD/32bit/libmpg123-32.so';
|
||||
{$endif}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF Darwin}
|
||||
opath := ordir;
|
||||
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||
MP_FileName := opath + '/lib/Mac/32bit/LibMpg123-32.dylib';
|
||||
{$ENDIF}
|
||||
|
||||
PlayerIndex1 := 0;
|
||||
|
||||
{$if defined(CPUAMD64) and defined(linux) }
|
||||
// For Linux amd64, check libsndfile.so
|
||||
if (SF_FileName <> 'system') and (SF_FileName <> '') then
|
||||
if uos_TestLoadLibrary(PChar(SF_FileName)) = false then
|
||||
SF_FileName := SF_FileName + '.2';
|
||||
{$endif}
|
||||
|
||||
// Load the libraries
|
||||
res := uos_LoadLib(Pchar(PA_FileName), nil, Pchar(MP_FileName), nil , nil, nil, nil) ;
|
||||
// if res = 0 then writeln('===> Libraries are loaded.') else writeln('===> Libraries are NOT loaded.') ;
|
||||
|
||||
|
||||
uos_CreatePlayer(PlayerIndex1); //// Create the player
|
||||
// writeln('===> uos_CreatePlayer => ok');
|
||||
|
||||
theurl := 'http://broadcast.infomaniak.net:80/alouette-high.mp3';
|
||||
// theurl := 'http://broadcast.infomaniak.net/start-latina-high.mp3' ;
|
||||
// theurl := 'http://www.hubharp.com/web_sound/BachGavotteShort.mp3' ;
|
||||
// theurl := 'http://www.jerryradio.com/downloads/BMB-64-03-06-MP3/jg1964-03-06t01.mp3' ;
|
||||
|
||||
uos_AddFromURL(PlayerIndex1,pchar(theurl)) ;
|
||||
// writeln('===> uos_AddFromURL => ok');
|
||||
|
||||
//// add a Output => change framecount => 1024
|
||||
uos_AddIntoDevOut(PlayerIndex1, -1, -1, -1, -1, -1, 1024, -1);
|
||||
// writeln('===> uos_AddIntoDevOut => ok');
|
||||
|
||||
uos_Play(PlayerIndex1);
|
||||
end;
|
||||
|
||||
procedure MainProc;
|
||||
var
|
||||
frm: Ttest;
|
||||
begin
|
||||
fpgApplication.Initialize;
|
||||
try
|
||||
frm := Ttest.Create(nil);
|
||||
fpgApplication.MainForm := frm;
|
||||
frm.Show;
|
||||
fpgApplication.Run;
|
||||
finally
|
||||
uos_free;
|
||||
frm.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
MainProc;
|
||||
end.
|
||||
Reference in New Issue
Block a user