Implements Module Player working in Form
* Implements Embedding .xm music in Final Application
This commit is contained in:
276
UOS/examples/main_di.pas
Normal file
276
UOS/examples/main_di.pas
Normal file
@@ -0,0 +1,276 @@
|
||||
|
||||
/////////////////// Demo how to use United Openlib of Sound ////////////////////
|
||||
|
||||
|
||||
unit main_di;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
uos_flat,
|
||||
Forms,
|
||||
Dialogs,
|
||||
SysUtils,
|
||||
Graphics,
|
||||
StdCtrls,
|
||||
ExtCtrls,
|
||||
Grids,
|
||||
Classes;
|
||||
|
||||
type
|
||||
{ TForm1 }
|
||||
TForm1 = class(TForm)
|
||||
Button1: TButton;
|
||||
Button2: TButton;
|
||||
Edit1: TEdit;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
Label4: TLabel;
|
||||
PaintBox1: TPaintBox;
|
||||
StringGrid1: TStringGrid;
|
||||
procedure Button1Click(Sender: TObject);
|
||||
procedure Button2Click(Sender: TObject);
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure PaintBox1Paint(Sender: TObject);
|
||||
procedure CheckInfos();
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
|
||||
procedure uos_logo();
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
BufferBMP: TBitmap;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
|
||||
procedure TForm1.FormActivate(Sender: TObject);
|
||||
{$IFDEF Darwin}
|
||||
var
|
||||
opath: string;
|
||||
{$ENDIF}
|
||||
begin
|
||||
uos_logo();
|
||||
{$IFDEF Windows}
|
||||
{$if defined(cpu64)}
|
||||
edit1.Text := application.Location + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||
{$else}
|
||||
edit1.Text := application.Location + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||
{$endif}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF Darwin}
|
||||
{$IFDEF CPU32}
|
||||
opath := application.Location;
|
||||
opath := copy(opath, 1, Pos('/uos', opath) - 1);
|
||||
edit1.Text := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||
{$ENDIF}
|
||||
{$IFDEF CPU64}
|
||||
opath := application.Location;
|
||||
opath := copy(opath, 1, Pos('/uos', opath) - 1);
|
||||
Edit1.Text := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
|
||||
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||
edit1.Text := application.Location + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||
{$ENDIF}
|
||||
|
||||
{$if defined(CPUAMD64) and defined(linux) }
|
||||
edit1.Text := application.Location + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||
{$endif}
|
||||
|
||||
{$if defined(cpu86) and defined(linux)}
|
||||
edit1.Text := application.Location + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||
{$endif}
|
||||
|
||||
{$if defined(linux) and defined(cpuarm)}
|
||||
edit1.Text := application.Location + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||
{$endif}
|
||||
|
||||
{$if defined(linux) and defined(cpuaarch64)}
|
||||
edit1.Text := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF freebsd}
|
||||
{$if defined(cpu64)}
|
||||
edit1.Text := application.Location + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||
{$else}
|
||||
edit1.Text := application.Location + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||
{$endif}
|
||||
|
||||
{$ENDIF}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
end;
|
||||
|
||||
procedure TForm1.PaintBox1Paint(Sender: TObject);
|
||||
begin
|
||||
PaintBox1.Canvas.Draw(0, 0, BufferBMP);
|
||||
end;
|
||||
|
||||
procedure TForm1.CheckInfos();
|
||||
var
|
||||
x: integer;
|
||||
begin
|
||||
|
||||
uos_GetInfoDevice();
|
||||
|
||||
label2.Caption := 'Devices Count = ' + IntToStr(uosDeviceCount);
|
||||
|
||||
label3.Caption := 'Default Device IN = ' + IntToStr(uosDefaultDeviceIN);
|
||||
|
||||
label4.Caption := 'Default Device OUT = ' + IntToStr(uosDefaultDeviceOUT);
|
||||
|
||||
stringgrid1.rowcount := uosDeviceCount + 1;
|
||||
|
||||
|
||||
x := 1;
|
||||
|
||||
while x < uosDeviceCount + 1 do
|
||||
begin
|
||||
|
||||
stringgrid1.Cells[0, x] := IntToStr(uosDeviceInfos[x - 1].DeviceNum);
|
||||
stringgrid1.Cells[1, x] := uosDeviceInfos[x - 1].DeviceName;
|
||||
if uosDeviceInfos[x - 1].DefaultDevIn = True then
|
||||
stringgrid1.Cells[2, x] := 'Yes'
|
||||
else
|
||||
stringgrid1.Cells[2, x] := 'No';
|
||||
|
||||
if uosDeviceInfos[x - 1].DefaultDevOut = True then
|
||||
stringgrid1.Cells[3, x] := 'Yes'
|
||||
else
|
||||
stringgrid1.Cells[3, x] := 'No';
|
||||
|
||||
stringgrid1.Cells[4, x] := IntToStr(uosDeviceInfos[x - 1].ChannelsIn);
|
||||
stringgrid1.Cells[5, x] := IntToStr(uosDeviceInfos[x - 1].ChannelsOut);
|
||||
stringgrid1.Cells[6, x] := floattostrf(uosDeviceInfos[x - 1].SampleRate, ffFixed, 15, 0);
|
||||
stringgrid1.Cells[7, x] := floattostrf(uosDeviceInfos[x - 1].LatencyHighIn, ffFixed, 15, 8);
|
||||
stringgrid1.Cells[8, x] := floattostrf(uosDeviceInfos[x - 1].LatencyHighOut,
|
||||
ffFixed, 15, 8);
|
||||
stringgrid1.Cells[9, x] := floattostrf(uosDeviceInfos[x - 1].LatencyLowIn, ffFixed, 15, 8);
|
||||
stringgrid1.Cells[10, x] :=
|
||||
floattostrf(uosDeviceInfos[x - 1].LatencyLowOut, ffFixed, 15, 8);
|
||||
stringgrid1.Cells[11, x] := uosDeviceInfos[x - 1].HostAPIName;
|
||||
stringgrid1.Cells[12, x] := uosDeviceInfos[x - 1].DeviceType;
|
||||
|
||||
Inc(x);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
procedure TForm1.Button1Click(Sender: TObject);
|
||||
begin
|
||||
// Load the library
|
||||
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||
|
||||
if uos_LoadLib(PChar(edit1.Text), nil, nil, nil, nil, nil, nil) = 0 then
|
||||
begin
|
||||
form1.hide;
|
||||
button1.Caption := 'PortAudio is loaded...';
|
||||
button1.Enabled := False;
|
||||
edit1.ReadOnly := True;
|
||||
|
||||
CheckInfos();
|
||||
form1.Height := 688;
|
||||
form1.Position := poScreenCenter;
|
||||
form1.Show;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if uosLoadResult.PAloaderror = 1 then
|
||||
MessageDlg(edit1.Text + ' do not exist...', mtWarning, [mbYes], 0);
|
||||
if uosLoadResult.PAloaderror = 2 then
|
||||
MessageDlg(edit1.Text + ' do not load...', mtWarning, [mbYes], 0);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.Button2Click(Sender: TObject);
|
||||
begin
|
||||
CheckInfos();
|
||||
end;
|
||||
|
||||
|
||||
procedure uos_logo();
|
||||
var
|
||||
xpos, ypos: integer;
|
||||
ratio: double;
|
||||
begin
|
||||
xpos := 0;
|
||||
ypos := 0;
|
||||
ratio := 1;
|
||||
BufferBMP := TBitmap.Create;
|
||||
with form1 do
|
||||
begin
|
||||
form1.PaintBox1.Parent.DoubleBuffered := True;
|
||||
PaintBox1.Height := round(ratio * 116);
|
||||
PaintBox1.Width := round(ratio * 100);
|
||||
BufferBMP.Height := PaintBox1.Height;
|
||||
BufferBMP.Width := PaintBox1.Width;
|
||||
BufferBMP.Canvas.AntialiasingMode := amOn;
|
||||
BufferBMP.Canvas.Pen.Width := round(ratio * 6);
|
||||
BufferBMP.Canvas.brush.Color := clmoneygreen;
|
||||
BufferBMP.Canvas.FillRect(0, 0, PaintBox1.Width, PaintBox1.Height);
|
||||
BufferBMP.Canvas.Pen.Color := clblack;
|
||||
BufferBMP.Canvas.brush.Color := $70FF70;
|
||||
BufferBMP.Canvas.Ellipse(round(ratio * (22) + xpos),
|
||||
round(ratio * (30) + ypos), round(ratio * (72) + xpos),
|
||||
round(ratio * (80) + ypos));
|
||||
BufferBMP.Canvas.brush.Color := clmoneygreen;
|
||||
BufferBMP.Canvas.Arc(round(ratio * (34) + xpos), round(ratio * (8) + ypos),
|
||||
round(ratio * (58) + xpos), round(ratio * (32) + ypos), round(ratio * (58) + xpos),
|
||||
round(ratio * (20) + ypos), round(ratio * (46) + xpos),
|
||||
round(ratio * (32) + xpos));
|
||||
BufferBMP.Canvas.Arc(round(ratio * (34) + xpos), round(ratio * (32) + ypos),
|
||||
round(ratio * (58) + xpos), round(ratio * (60) + ypos), round(ratio * (34) + xpos),
|
||||
round(ratio * (48) + ypos), round(ratio * (46) + xpos),
|
||||
round(ratio * (32) + ypos));
|
||||
BufferBMP.Canvas.Arc(round(ratio * (-28) + xpos), round(ratio * (18) + ypos),
|
||||
round(ratio * (23) + xpos), round(ratio * (80) + ypos), round(ratio * (20) + xpos),
|
||||
round(ratio * (50) + ypos), round(ratio * (3) + xpos), round(ratio * (38) + ypos));
|
||||
BufferBMP.Canvas.Arc(round(ratio * (70) + xpos), round(ratio * (18) + ypos),
|
||||
round(ratio * (122) + xpos), round(ratio * (80) + ypos),
|
||||
round(ratio * (90 - xpos)),
|
||||
round(ratio * (38) + ypos), round(ratio * (72) + xpos),
|
||||
round(ratio * (50) + ypos));
|
||||
BufferBMP.Canvas.Font.Name := 'Arial';
|
||||
BufferBMP.Canvas.Font.Size := round(ratio * 10);
|
||||
BufferBMP.Canvas.TextOut(round(ratio * (4) + xpos),
|
||||
round(ratio * (83) + ypos), 'United Openlib');
|
||||
BufferBMP.Canvas.Font.Size := round(ratio * 7);
|
||||
BufferBMP.Canvas.TextOut(round(ratio * (20) + xpos),
|
||||
round(ratio * (101) + ypos), 'of');
|
||||
BufferBMP.Canvas.Font.Size := round(ratio * 10);
|
||||
BufferBMP.Canvas.TextOut(round(ratio * (32) + xpos),
|
||||
round(ratio * (98) + ypos), 'Sound');
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
Form1.Height := 126;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
if button1.Enabled = False then
|
||||
uos_free;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user