Implements Module Player working in Form
* Implements Embedding .xm music in Final Application
This commit is contained in:
BIN
LibPortaudio-64.dll
Normal file
BIN
LibPortaudio-64.dll
Normal file
Binary file not shown.
33
UOS/contributors.txt
Normal file
33
UOS/contributors.txt
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
Here are the great contributors of uos:
|
||||||
|
|
||||||
|
Andrew Haines : All audio web streaming of uos => he did it.
|
||||||
|
|
||||||
|
BigChimp : He is the one who converts me to oop. He never stops to help people.
|
||||||
|
|
||||||
|
Blaazen : He knows digital audio and explains how it works. He is the Professor Audio, the uos-synthesizer is him.
|
||||||
|
|
||||||
|
Dibo : Shows the best way to calculate time.
|
||||||
|
|
||||||
|
DomingoGP: introduced roundmath() vs round().
|
||||||
|
|
||||||
|
Franklyn A. Harlow : AAC and CD audio -> he did it.
|
||||||
|
|
||||||
|
KpjComp : He gives the way to link PortAudio with SndFile and shows the best way to pause a thread.
|
||||||
|
|
||||||
|
Leledumbo : Helps me with threads managing and gives courage to continue uos.
|
||||||
|
|
||||||
|
Martin Schreiber : He converts me to change thread-uos_player into class-uos_player.
|
||||||
|
|
||||||
|
Sandro Cumerlato : He gives the DSPLevel procedure and lot of others, did SounTouch wrapper and other perfect codes and ideas.
|
||||||
|
|
||||||
|
José Mejuto : He gives the right way to record and save the data to file.
|
||||||
|
|
||||||
|
Phoenix : He decrypts sf_open_virtual to enable TMemoryStream as input.
|
||||||
|
|
||||||
|
Andrei Borovsky : FFT code of uos_filters is from him.
|
||||||
|
|
||||||
|
Winni: The synthesizer waves type (sine, square, triangle, sawtooth).
|
||||||
|
|
||||||
|
And many others from fpc, fpGUI, MSE, Lazarus, CodeTyphon forum.
|
||||||
|
|
||||||
|
Fred van Stappen : fiens@hotmail.com
|
||||||
35
UOS/credits.txt
Normal file
35
UOS/credits.txt
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
Here are the open source libraries used by uos:
|
||||||
|
|
||||||
|
=> SoundTouch audio processing library.
|
||||||
|
Copyright (c) Olli Parviainen.
|
||||||
|
http://www.surina.net/soundtouch/
|
||||||
|
|
||||||
|
=> PortAudio Cross-Platform Audio API.
|
||||||
|
Copyright (c) Ross Bencina and Phil Burk
|
||||||
|
http://www.portaudio.com/
|
||||||
|
|
||||||
|
=> SndFile audio processing library.
|
||||||
|
Copyright (c) Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||||
|
http://www.mega-nerd.com/libsndfile/
|
||||||
|
|
||||||
|
=> Mpg123 audio processing library.
|
||||||
|
Copyright (c) Thomas Orgis <thomas@orgis.org>
|
||||||
|
http://www.mpg123.de/
|
||||||
|
|
||||||
|
=> Bs2b stereo to binaural library.
|
||||||
|
Copyright (c) Boris Mikhaylov
|
||||||
|
http://bs2b.sourceforge.net/
|
||||||
|
|
||||||
|
=> FAAD2 (AAC) audio processing library.
|
||||||
|
Copyright (C) M. Bakker, Nero AG.
|
||||||
|
http://www.nero.com/
|
||||||
|
|
||||||
|
=> Opus audio processing library.
|
||||||
|
http://opus-codec.org
|
||||||
|
|
||||||
|
=> Libxmp audio processing library.
|
||||||
|
https://xmp.sourceforge.net/
|
||||||
|
|
||||||
|
=> Libfdk-aac audio processing library.
|
||||||
|
https://github.com/mstorsjo/fdk-aac
|
||||||
|
|
||||||
150
UOS/examples/SimplePlayer_MSE.pas
Normal file
150
UOS/examples/SimplePlayer_MSE.pas
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
program SimplePlayer_MSE;
|
||||||
|
|
||||||
|
{$ifdef FPC}{$mode objfpc}{$h+}{$endif}
|
||||||
|
{$ifdef FPC}
|
||||||
|
{$ifdef mswindows}{$apptype gui}{$endif}
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$ifdef FPC} {$ifdef unix} cthreads, {$endif} {$endif}
|
||||||
|
msegui,
|
||||||
|
mainmse_sp,
|
||||||
|
SysUtils;
|
||||||
|
|
||||||
|
var
|
||||||
|
ordir: string;
|
||||||
|
begin
|
||||||
|
application.createform(tmainfo, mainfo);
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
mainfo.padir.value := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib\Windows\64bit\LibMpg123-64.dll';
|
||||||
|
mainfo.xmdir.value := ordir + 'lib\Windows\64bit\libxmp-64.dll';
|
||||||
|
mainfo.stdir.value := ordir + 'lib\Windows\64bit\plugin\LibSoundTouch-64.dll';
|
||||||
|
{$else}
|
||||||
|
mainfo.padir.value := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib\Windows\32bit\LibMpg123-32.dll';
|
||||||
|
mainfo.m4dir.value := ordir + 'lib\Windows\32bit\LibMp4ff-32.dll';
|
||||||
|
mainfo.fadir.value := ordir + 'lib\Windows\32bit\LibFaad2-32.dll';
|
||||||
|
mainfo.ofdir.value := ordir + 'lib\Windows\32bit\LibOpusFile-32.dll';
|
||||||
|
mainfo.xmdir.value := ordir + 'lib\Windows\32bit\libxmp-32.dll';
|
||||||
|
mainfo.stdir.value := ordir + 'lib\Windows\32bit\plugin\libSoundTouch-32.dll';
|
||||||
|
mainfo.bsdir.value := ordir + 'lib\Windows\32bit\plugin\LibBs2b-32.dll';
|
||||||
|
{$endif}
|
||||||
|
mainfo.songdir.value := ordir + 'sound\test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
mainfo.padir.value := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
mainfo.m4dir.value := ordir + 'lib/Linux/64bit/LibMp4ff-64.so';
|
||||||
|
mainfo.fadir.value := ordir + 'lib/Linux/64bit/LibFaad2-64.so';
|
||||||
|
mainfo.ofdir.value := ordir + 'lib/Linux/64bit/LibOpusFile-64.so';
|
||||||
|
mainfo.xmdir.value := ordir + 'lib/Linux/64bit/libxmp-64.so';
|
||||||
|
mainfo.stdir.value := ordir + 'lib/Linux/64bit/plugin/LibSoundTouch-64.so';
|
||||||
|
mainfo.bsdir.value := ordir + 'lib/Linux/64bit/plugin/libbs2b-64.so';
|
||||||
|
mainfo.songdir.value := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
mainfo.padir.value := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib/OpenBSD/64bit/LibMpg123-64.so';
|
||||||
|
mainfo.m4dir.value := '' ;
|
||||||
|
mainfo.fadir.value := '' ;
|
||||||
|
mainfo.ofdir.value := '' ;
|
||||||
|
mainfo.stdir.value := ordir + 'lib/OpenBSD/64bit/plugin/LibSoundTouch-64.so';
|
||||||
|
mainfo.bsdir.value := '' ;
|
||||||
|
mainfo.songdir.value := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
mainfo.padir.value := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib/Linux/32bit/LibMpg123-32.so';
|
||||||
|
mainfo.m4dir.value := ordir + 'lib/Linux/32bit/LibMp4ff-32.so';
|
||||||
|
mainfo.fadir.value := ordir + 'lib/Linux/32bit/LibFaad2-32.so';
|
||||||
|
mainfo.xmdir.value := ordir + 'lib/Linux/32bit/libxmp-32.so';
|
||||||
|
mainfo.stdir.value := ordir + 'lib/Linux/32bit/plugin/LibSoundTouch-32.so';
|
||||||
|
mainfo.bsdir.value := ordir + 'lib/Linux/32bit/plugin/libbs2b-32.so';
|
||||||
|
mainfo.songdir.value := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
mainfo.padir.value := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib/Linux/arm_raspberrypi/libmpg123-arm.so';
|
||||||
|
mainfo.xmdir.value := ordir + 'lib/Linux/arm_raspberrypi/libxmp-arm.so';
|
||||||
|
mainfo.stdir.value := ordir + 'lib/Linux/arm_raspberrypi/plugin/soundtouch-arm.so';
|
||||||
|
mainfo.songdir.value := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
mainfo.padir.value := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib/Linux/aarch64_raspberrypi/libmpg123_aarch64.so';
|
||||||
|
mainfo.xmdir.value := ordir + 'lib/Linux/aarch64_raspberrypi/libxmp_aarch64.so';
|
||||||
|
mainfo.stdir.value := ordir + 'lib/Linux/aarch64_raspberrypi/plugin/libsoundtouch_aarch64.so';
|
||||||
|
mainfo.songdir.value := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
mainfo.padir.value := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib/FreeBSD/64bit/libmpg123-64.so';
|
||||||
|
mainfo.m4dir.value := ordir + 'lib/FreeBSD/64bit/libmp4ff-64.so';
|
||||||
|
mainfo.fadir.value := ordir + 'lib/FreeBSD/64bit/libfaad2-64.so';
|
||||||
|
mainfo.bsdir.value := ordir + 'lib/FreeBSD/64bit/plugin/libbs2b-64.so';
|
||||||
|
mainfo.stdir.value := ordir + 'lib/FreeBSD/64bit/plugin/libsoundtouch-64.so';
|
||||||
|
|
||||||
|
mainfo.opdir.value := ordir + 'lib/FreeBSD/64bit/libopus-64.so';
|
||||||
|
|
||||||
|
{$else}
|
||||||
|
mainfo.padir.value := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
mainfo.sfdir.value := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
mainfo.mpdir.value := ordir + 'lib/FreeBSD/32bit/libmpg123-32.so';
|
||||||
|
{$endif}
|
||||||
|
mainfo.songdir.value := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/uos', opath) - 1);
|
||||||
|
mainfo.padir.value := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
mainfo.sfdir.value := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
mainfo.mpdir.value := opath + '/lib/Mac/32bit/LibMpg123-32.dylib';
|
||||||
|
mainfo.stdir.value := opath + '/lib/Mac/32bit/plugin/LibSoundTouch-32.dylib';
|
||||||
|
mainfo.songdir.value := ordir + '/sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/uos', opath) - 1);
|
||||||
|
mainfo.padir.value := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
mainfo.sfdir.value := opath + '/lib/Mac/64bit/LibSndFile-64.dylib';
|
||||||
|
mainfo.mpdir.value := opath + '/lib/Mac/64bit/LibMpg123-64.dylib';
|
||||||
|
mainfo.xmdir.value := opath + '/lib/Mac/64bit/libxmp-64.dylib';
|
||||||
|
mainfo.stdir.value := opath + '/lib/Mac/64bit/plugin/libSoundTouchDLL-64.dylib';
|
||||||
|
mainfo.songdir.value := ordir + '/sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
mainfo.songdir.controller.lastdir := ordir + 'sound';
|
||||||
|
mainfo.Height := 400;
|
||||||
|
|
||||||
|
mainfo.vuLeft.Visible := False;
|
||||||
|
|
||||||
|
mainfo.vuRight.Visible := False;
|
||||||
|
|
||||||
|
mainfo.vuright.Height := 0;
|
||||||
|
|
||||||
|
mainfo.vuleft.Height := 0;
|
||||||
|
|
||||||
|
application.run;
|
||||||
|
end.
|
||||||
|
|
||||||
2211
UOS/examples/SimplePlayer_MSE.prj
Normal file
2211
UOS/examples/SimplePlayer_MSE.prj
Normal file
File diff suppressed because it is too large
Load Diff
77
UOS/examples/consolebpmdetect.lpi
Normal file
77
UOS/examples/consolebpmdetect.lpi
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="consolebpmdetect"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="consolebpmdetect.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="consolebpmdetect"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
193
UOS/examples/consolebpmdetect.pas
Normal file
193
UOS/examples/consolebpmdetect.pas
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
program consolebpmdetect;
|
||||||
|
|
||||||
|
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in uos_define.inc !
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF}
|
||||||
|
Classes,
|
||||||
|
ctypes,
|
||||||
|
SysUtils,
|
||||||
|
CustApp,
|
||||||
|
uos_soundtouch,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TUOSConsole }
|
||||||
|
|
||||||
|
TuosConsole = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
procedure ConsolePlay;
|
||||||
|
protected
|
||||||
|
procedure doRun; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
res, res2, i: integer;
|
||||||
|
ordir, opath, st, SoundFilename, PA_FileName, SF_FileName, MP_FileName, ST_FileName: string;
|
||||||
|
PlayerIndex1, input1 : integer;
|
||||||
|
// BPMhandle, SThandle : THandle;
|
||||||
|
thebuffer : array of cfloat;
|
||||||
|
thebufferinfos : TuosF_BufferInfos;
|
||||||
|
|
||||||
|
{ TuosConsole }
|
||||||
|
|
||||||
|
procedure TuosConsole.ConsolePlay;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
MP_FileName := ordir + 'lib\Windows\64bit\LibMpg123-64.dll';
|
||||||
|
ST_FileName := ordir + 'lib\Windows\64bit\plugin\LibSoundTouch-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
ST_FileName := ordir + 'lib\Windows\32bit\plugin\libSoundTouch-32.dll';
|
||||||
|
MP_FileName := ordir + 'lib\Windows\32bit\LibMpg123-32.dll';
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
// new soundtouch.dll not yet compiled for Windows
|
||||||
|
SF_FileName := '';
|
||||||
|
SoundFilename := ordir + 'sound\test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
SF_FileName := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/OpenBSD/64bit/LibMpg123-64.so';
|
||||||
|
ST_FileName := ordir + 'lib/OpenBSD/64bit/plugin/LibSoundTouch-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
ST_FileName := ordir + 'lib/Linux/64bit/plugin/LibSoundTouch-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/32bit/LibMpg123-32.so';
|
||||||
|
ST_FileName := ordir + 'lib/Linux/32bit/plugin/LibSoundTouch-32.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libmpg123_aarch64.so';
|
||||||
|
ST_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/plugin/libsoundtouch_aarch64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/arm_raspberrypi/libmpg123-arm.so';
|
||||||
|
ST_FileName := ordir + 'lib/Linux/arm_raspberrypi/plugin/libsoundtouch-arm.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
ST_FileName := ordir + 'lib/FreeBSD/64bit/plugin/LibSoundTouch-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/FreeBSD/64bit/LibMpg123-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
ST_FileName := ordir + 'lib/FreeBSD/32bit/plugin/LibSoundTouch-32.so';
|
||||||
|
MP_FileName := ordir + 'lib/FreeBSD/32bit/LibMpg123-32.so';
|
||||||
|
ST_FileName := '';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
MP_FileName := opath + '/lib/Mac/32bit/LibMpg123.dylib';
|
||||||
|
ST_FileName := := opath + '/lib/Mac/32bit/plugin/libSoundTouch-32.dylib';
|
||||||
|
SoundFilename := opath + '/sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
res := uos_LoadLib(Pchar(PA_FileName), Pchar(SF_FileName), Pchar(MP_FileName), nil, nil, nil, nil) ;
|
||||||
|
|
||||||
|
writeln('Result of loading libraries (if 0 => ok ) : ' + IntToStr(res));
|
||||||
|
|
||||||
|
res2 := uos_LoadPlugin('soundtouch', Pchar(ST_FileName));
|
||||||
|
|
||||||
|
writeln('Result of loading SoundTouch plugin (if 0 => ok ) : ' + IntToStr(res2));
|
||||||
|
|
||||||
|
if (res = 0) and (res2 = 0) then begin
|
||||||
|
|
||||||
|
writeln('soundtouch_getVersionId = ' + inttostr(soundtouch_getVersionId()));
|
||||||
|
|
||||||
|
writeln('soundtouch_getVersionString = ' + (soundtouch_getVersionString()));
|
||||||
|
|
||||||
|
|
||||||
|
// Create a memory buffer from a audio file from begining with 1024 frames.
|
||||||
|
thebuffer := uos_File2Buffer(pchar(SoundFilename), 0, thebufferinfos, -1, 1024);
|
||||||
|
|
||||||
|
writeln('length(thebuffer) = ' + inttostr(length(thebuffer)));
|
||||||
|
|
||||||
|
writeln('BPM = ' + floattostr(uos_GetBPM(thebuffer,thebufferinfos.channels,thebufferinfos.samplerate)));
|
||||||
|
// }
|
||||||
|
end else writeln('Libraries did not load... ;-(');
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TuosConsole.doRun;
|
||||||
|
begin
|
||||||
|
ConsolePlay;
|
||||||
|
// writeln('Press a key to exit...');
|
||||||
|
// readln;
|
||||||
|
uos_free();
|
||||||
|
Terminate;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TuosConsole.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TUOSConsole;
|
||||||
|
begin
|
||||||
|
Application := TUOSConsole.Create(nil);
|
||||||
|
Application.Title := 'Console BPM finder Buffer-Memory';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
||||||
|
|
||||||
2129
UOS/examples/consolebpmdetect.prj
Normal file
2129
UOS/examples/consolebpmdetect.prj
Normal file
File diff suppressed because it is too large
Load Diff
77
UOS/examples/consoleplay.lpi
Normal file
77
UOS/examples/consoleplay.lpi
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="consoleplay"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="consoleplay.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="consoleplay"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
225
UOS/examples/consoleplay.pas
Normal file
225
UOS/examples/consoleplay.pas
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
|
||||||
|
program consoleplay;
|
||||||
|
|
||||||
|
|
||||||
|
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in uos_define.inc !
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF}
|
||||||
|
Classes,
|
||||||
|
SysUtils,
|
||||||
|
CustApp,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TUOSConsole }
|
||||||
|
|
||||||
|
TuosConsole = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
procedure ConsolePlay;
|
||||||
|
protected
|
||||||
|
procedure doRun;
|
||||||
|
override;
|
||||||
|
public
|
||||||
|
|
||||||
|
constructor Create(TheOwner: TComponent);
|
||||||
|
override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
res: integer;
|
||||||
|
ordir, opath, SoundFilename, PA_FileName, PC_FileName, SF_FileName, MP_FileName: string;
|
||||||
|
PlayerIndex1, InputIndex1, OutputIndex1: integer;
|
||||||
|
|
||||||
|
{ TuosConsole }
|
||||||
|
|
||||||
|
procedure TuosConsole.ConsolePlay;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound\test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
// MP_FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
SF_FileName := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
// MP_FileName := ordir + 'lib/OpenBSD/64bit/LibMpg123-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/64bit/LibSndFile-64.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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
|
||||||
|
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
|
||||||
|
res := uos_LoadLib(PChar(PA_FileName), PChar(SF_FileName), Nil, Nil, Nil, Nil, nil);
|
||||||
|
writeln;
|
||||||
|
|
||||||
|
if res = 0 then
|
||||||
|
writeln('Libraries are loaded.')
|
||||||
|
else
|
||||||
|
writeln('Libraries did not load.');
|
||||||
|
|
||||||
|
if res = 0 then
|
||||||
|
begin
|
||||||
|
writeln();
|
||||||
|
|
||||||
|
// writeln('Libraries version: '+ uos_GetInfoLibraries());
|
||||||
|
|
||||||
|
//// Create the player.
|
||||||
|
//// PlayerIndex : from 0 to what your computer can do !
|
||||||
|
//// If PlayerIndex exists already, it will be overwriten...
|
||||||
|
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
|
||||||
|
if uos_CreatePlayer(PlayerIndex1) then
|
||||||
|
begin
|
||||||
|
|
||||||
|
//// add a Input from audio-file with default parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
////////// FileName : filename of audio file
|
||||||
|
// result : -1 nothing created, otherwise Input Index in array
|
||||||
|
|
||||||
|
InputIndex1 := uos_AddFromFile(PlayerIndex1, PChar((SoundFilename)), -1, -1, -1);
|
||||||
|
|
||||||
|
writeln('InputIndex1 = ' + IntToStr(InputIndex1));
|
||||||
|
|
||||||
|
if InputIndex1 > -1 then
|
||||||
|
begin
|
||||||
|
//// add a Output into device with default parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
// result : -1 nothing created, otherwise Output Index in array
|
||||||
|
|
||||||
|
{$if defined(cpuarm) or defined(cpuaarch64)}
|
||||||
|
// need a lower latency
|
||||||
|
OutputIndex1 := uos_AddIntoDevOut(PlayerIndex1, -1, 0.3, -1, -1, -1, -1, -1) ;
|
||||||
|
{$else}
|
||||||
|
//OutputIndex1 := uos_AddIntoDevOut(PlayerIndex1);
|
||||||
|
OutputIndex1 := uos_AddIntoDevOut(PlayerIndex1, -1, -1, -1, -1, -1, -1, -1);
|
||||||
|
{$endif}
|
||||||
|
writeln('OutputIndex1 = ' + IntToStr(OutputIndex1));
|
||||||
|
|
||||||
|
// uos_AddIntoFile(PlayerIndex1,pchar('/home/fred/mytest.ogg'), -1, -1, -1, -1, 3);
|
||||||
|
|
||||||
|
if OutputIndex1 > -1 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
/////// everything is ready, here we are, lets play it...
|
||||||
|
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
|
||||||
|
sleep(1000);
|
||||||
|
writeln;
|
||||||
|
writeln('Title: ' + uos_InputGetTagTitle(PlayerIndex1, InputIndex1));
|
||||||
|
sleep(1500);
|
||||||
|
writeln();
|
||||||
|
writeln('Artist: ' + uos_InputGetTagArtist(PlayerIndex1, InputIndex1));
|
||||||
|
writeln;
|
||||||
|
sleep(2000);
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TuosConsole.doRun;
|
||||||
|
begin
|
||||||
|
ConsolePlay;
|
||||||
|
// writeln('Press a key to exit...');
|
||||||
|
// readln;
|
||||||
|
writeln('Ciao...');
|
||||||
|
uos_free();
|
||||||
|
// Do not forget this !
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TuosConsole.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TUOSConsole;
|
||||||
|
begin
|
||||||
|
Application := TUOSConsole.Create(Nil);
|
||||||
|
Application.Title := 'Console Player';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
2142
UOS/examples/consoleplay.prj
Normal file
2142
UOS/examples/consoleplay.prj
Normal file
File diff suppressed because it is too large
Load Diff
74
UOS/examples/consoleplayloop.lpi
Normal file
74
UOS/examples/consoleplayloop.lpi
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="10"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="consoleplayloop"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="consoleplayloop.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="consoleplayloop"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
178
UOS/examples/consoleplayloop.pas
Normal file
178
UOS/examples/consoleplayloop.pas
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
program consoleplayloop;
|
||||||
|
|
||||||
|
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in uos_define.inc !
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF}
|
||||||
|
Classes,
|
||||||
|
SysUtils,
|
||||||
|
CustApp,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TUOSConsole }
|
||||||
|
|
||||||
|
TuosConsole = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
procedure consoleplay;
|
||||||
|
protected
|
||||||
|
procedure doRun; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
res: integer;
|
||||||
|
ordir, opath, SoundFilename, PA_FileName, SF_FileName: string;
|
||||||
|
PlayerIndex1 : integer;
|
||||||
|
|
||||||
|
{ TuosConsole }
|
||||||
|
|
||||||
|
procedure TuosConsole.ConsolePlay;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound\test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
SF_FileName := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
SF_FileName := ordir + ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/64bit/LibSndFile-64.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
|
||||||
|
res := uos_LoadLib(Pchar(PA_FileName), Pchar(SF_FileName), nil, nil, nil, nil, nil) ;
|
||||||
|
|
||||||
|
writeln('Result of loading (if 0 => ok ) : ' + IntToStr(res));
|
||||||
|
|
||||||
|
if res = 0 then begin
|
||||||
|
|
||||||
|
//// Create the player.
|
||||||
|
//// PlayerIndex : from 0 to what your computer can do !
|
||||||
|
//// If PlayerIndex exists already, it will be overwriten...
|
||||||
|
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
if uos_CreatePlayer(PlayerIndex1) then
|
||||||
|
|
||||||
|
//// add a Input from audio-file with default parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
////////// FileName : filename of audio file
|
||||||
|
// result : -1 nothing created, otherwise Input Index in array
|
||||||
|
|
||||||
|
if uos_AddFromFile(PlayerIndex1,(pchar(SoundFilename))) > -1 then
|
||||||
|
|
||||||
|
//// add a Output into device with default parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
// result : -1 nothing created, otherwise Output Index in array
|
||||||
|
|
||||||
|
{$if defined(cpuarm) or defined(cpuaarch64)} // need a lower latency
|
||||||
|
if uos_AddIntoDevOut(PlayerIndex1, -1, 0.3, -1, -1, -1, -1, -1) > -1 then
|
||||||
|
{$else}
|
||||||
|
if uos_AddIntoDevOut(PlayerIndex1) > -1 then
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
/////// everything is ready, here we are, lets play it 3 times...
|
||||||
|
uos_Play(PlayerIndex1, 3);
|
||||||
|
|
||||||
|
sleep(5000);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TuosConsole.doRun;
|
||||||
|
begin
|
||||||
|
ConsolePlay;
|
||||||
|
uos_free();
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TuosConsole.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TUOSConsole;
|
||||||
|
begin
|
||||||
|
Application := TUOSConsole.Create(nil);
|
||||||
|
Application.Title := 'Console Player';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
2129
UOS/examples/consoleplayloop.prj
Normal file
2129
UOS/examples/consoleplayloop.prj
Normal file
File diff suppressed because it is too large
Load Diff
67
UOS/examples/consoleplaymemorybuffer.lpi
Normal file
67
UOS/examples/consoleplaymemorybuffer.lpi
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="10"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="consoleplaymemorybuffer"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="consoleplaymemorybuffer.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="consoleplaymemorybuffer"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<Optimizations>
|
||||||
|
<OptimizationLevel Value="3"/>
|
||||||
|
</Optimizations>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<UseHeaptrc Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
</Linking>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
191
UOS/examples/consoleplaymemorybuffer.pas
Normal file
191
UOS/examples/consoleplaymemorybuffer.pas
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
program consoleplaymemorybuffer;
|
||||||
|
|
||||||
|
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in uos_define.inc !
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF}
|
||||||
|
Classes,
|
||||||
|
ctypes,
|
||||||
|
SysUtils,
|
||||||
|
CustApp,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TUOSConsole }
|
||||||
|
|
||||||
|
TuosConsole = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
procedure ConsolePlay;
|
||||||
|
protected
|
||||||
|
procedure doRun; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
res, i: integer;
|
||||||
|
ordir, opath, st, SoundFilename, PA_FileName, SF_FileName: string;
|
||||||
|
PlayerIndex1, input1: integer;
|
||||||
|
thebuffer: array of cfloat;
|
||||||
|
thebufferinfos: TuosF_BufferInfos;
|
||||||
|
|
||||||
|
{ TuosConsole }
|
||||||
|
|
||||||
|
procedure TuosConsole.ConsolePlay;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound\test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
SF_FileName := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
SF_FileName := ordir + ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/64bit/LibSndFile-64.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
res := uos_LoadLib(PChar(PA_FileName), PChar(SF_FileName), nil, nil, nil, nil, nil);
|
||||||
|
|
||||||
|
writeln('Result of loading (if 0 => ok ) : ' + IntToStr(res));
|
||||||
|
|
||||||
|
if res = 0 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
|
||||||
|
// Create a memory buffer from a audio file
|
||||||
|
thebuffer := uos_File2Buffer(PChar(SoundFilename), 1, thebufferinfos, -1, -1);
|
||||||
|
|
||||||
|
// You may store that buffer into ressource...
|
||||||
|
// ... and when you get the buffer from ressource....
|
||||||
|
|
||||||
|
uos_CreatePlayer(PlayerIndex1);
|
||||||
|
|
||||||
|
// Add a input from memory buffer with custom parameters
|
||||||
|
input1 := uos_AddFromMemoryBuffer(PlayerIndex1, thebuffer, thebufferinfos, -1, 1024);
|
||||||
|
|
||||||
|
// add a Output into device with default parameters
|
||||||
|
|
||||||
|
{$if defined(cpuarm) or defined(cpuaarch64)} // need a lower latency
|
||||||
|
uos_AddIntoDevOut(PlayerIndex1, -1, 0,3, uos_inputgetSampleRate(PlayerIndex1,input1),
|
||||||
|
uos_inputgetChannels(PlayerIndex1,input1) , 1, 1024, -1);
|
||||||
|
{$else}
|
||||||
|
uos_AddIntoDevOut(PlayerIndex1, -1, -1, uos_inputgetSampleRate(PlayerIndex1, input1),
|
||||||
|
uos_inputgetChannels(PlayerIndex1, input1), 1, 1024, -1);
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{ // Save to file
|
||||||
|
uos_addIntoFile(PlayerIndex1, Pchar(ordir + 'testwav.wav'),
|
||||||
|
uos_inputgetSampleRate(PlayerIndex1,input1),
|
||||||
|
uos_inputgetChannels(PlayerIndex1,input1),1,1024,-1 ); //
|
||||||
|
//}
|
||||||
|
|
||||||
|
/////// everything is ready, here we are, lets play it...
|
||||||
|
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
|
||||||
|
sleep(2000);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TuosConsole.doRun;
|
||||||
|
begin
|
||||||
|
ConsolePlay;
|
||||||
|
uos_free();
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TuosConsole.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TUOSConsole;
|
||||||
|
begin
|
||||||
|
Application := TUOSConsole.Create(nil);
|
||||||
|
Application.Title := 'Console Player from Buffer-Memory';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
||||||
|
|
||||||
2129
UOS/examples/consoleplaymemorybuffer.prj
Normal file
2129
UOS/examples/consoleplaymemorybuffer.prj
Normal file
File diff suppressed because it is too large
Load Diff
62
UOS/examples/consoleplaymemorystream.lpi
Normal file
62
UOS/examples/consoleplaymemorystream.lpi
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="10"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="consoleplaymemorystream"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="consoleplaymemorystream.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="consoleplaymemorystream"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<Optimizations>
|
||||||
|
<OptimizationLevel Value="3"/>
|
||||||
|
</Optimizations>
|
||||||
|
</CodeGeneration>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
231
UOS/examples/consoleplaymemorystream.pas
Normal file
231
UOS/examples/consoleplaymemorystream.pas
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
program consoleplaymemorystream;
|
||||||
|
|
||||||
|
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in uos_define.inc !
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF}
|
||||||
|
Classes,
|
||||||
|
ctypes,
|
||||||
|
SysUtils,
|
||||||
|
CustApp,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TUOSConsole }
|
||||||
|
|
||||||
|
TuosConsole = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
procedure ConsolePlay;
|
||||||
|
protected
|
||||||
|
procedure doRun; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
res: integer;
|
||||||
|
ordir, opath, SoundFilename, PA_FileName, SF_FileName, MP_FileName: string;
|
||||||
|
PlayerIndex1, InputIndex1: integer;
|
||||||
|
thememorystream1, thememorystream2: Tmemorystream;
|
||||||
|
|
||||||
|
{ TuosConsole }
|
||||||
|
|
||||||
|
procedure TuosConsole.ConsolePlay;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
MP_FileName := ordir + 'lib\Windows\64bit\LibMpg123-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
MP_FileName := ordir + 'lib\Windows\32bit\LibMpg123-32.dll';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound\test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF linux}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/32bit/LibMpg123-32.so';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/FreeBSD/64bit/libmpg123-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
MP_FileName := ordir + 'lib/FreeBSD/32bit/libmpg123-32.so';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
SF_FileName := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/OpenBSD/64bit/LibMpg123-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
MP_FileName := opath + '/lib/Mac/32bit/LibMpg123-32.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/64bit/LibSndFile-64.dylib';
|
||||||
|
MP_FileName := opath + '/lib/Mac/64bit/LibMpg123-64.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.flac';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
res := uos_LoadLib(PChar(PA_FileName), PChar(SF_FileName), PChar(MP_FileName), nil, nil, nil, nil);
|
||||||
|
|
||||||
|
writeln('Result of loading (if 0 => ok ) : ' + IntToStr(res));
|
||||||
|
|
||||||
|
if res = 0 then
|
||||||
|
begin
|
||||||
|
InputIndex1 := -1;
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
|
||||||
|
// Create a memory stream from a audio file wav, ogg, flac, mp3, opus.
|
||||||
|
thememorystream1 := TMemoryStream.Create;
|
||||||
|
thememorystream1.LoadFromFile(PChar(SoundFilename));
|
||||||
|
thememorystream1.Position := 0;
|
||||||
|
|
||||||
|
if uos_CreatePlayer(PlayerIndex1) then
|
||||||
|
|
||||||
|
// Add a input from device mic with custom parameters
|
||||||
|
// InputIndex1 := uos_AddFromDevIN(PlayerIndex1, -1, -1, -1, -1, 0, 1024 * 8, -1);
|
||||||
|
|
||||||
|
InputIndex1 := uos_AddFromMemoryStream(PlayerIndex1, thememorystream1, -1, -1, 2, 1024 * 8);
|
||||||
|
// Add a input from memory stream with custom parameters
|
||||||
|
// MemoryStream : Memory stream of encoded audio.
|
||||||
|
// TypeAudio : default : -1 --> 0 (0: flac, ogg, wav; 1: mp3; 2:opus)
|
||||||
|
// OutputIndex : Output index of used output
|
||||||
|
// -1: all output, -2: no output, other a existing OutputIndex
|
||||||
|
// (if multi-output then OutName = name of each output separeted by ';')
|
||||||
|
// SampleFormat : default : -1 (2:Int16) (0: Float32, 1:Int32, 2:Int16)
|
||||||
|
// FramesCount : default : -1 (4096)
|
||||||
|
// Result : Input Index in array -1 = error
|
||||||
|
// example : InputIndex1 := uos_AddFromMemoryStream(mymemorystream,-1,-1,2,44100,0,1024);
|
||||||
|
|
||||||
|
if InputIndex1 > -1 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
writeln('uos_InputLength = ' + IntToStr(uos_inputlength(0, 0)));
|
||||||
|
|
||||||
|
// add a Output into device with custom parameters
|
||||||
|
{$if defined(cpuarm) or defined(cpuaarch64)} // need a lower latency
|
||||||
|
uos_AddIntoDevOut(PlayerIndex1, -1, 0,3, uos_inputgetSampleRate(PlayerIndex1,InputIndex1),
|
||||||
|
uos_inputgetChannels(PlayerIndex1,input1) , 0, 1024 * 8, -1);
|
||||||
|
{$else}
|
||||||
|
uos_AddIntoDevOut(PlayerIndex1, -1, -1, uos_inputgetSampleRate(PlayerIndex1, InputIndex1),
|
||||||
|
uos_inputgetChannels(PlayerIndex1, InputIndex1), 2, 1024 * 8, -1);
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
// create a other memorystream from the first one encoding in ogg format.
|
||||||
|
uos_AddIntoMemoryStream(PlayerIndex1, thememorystream2, -1, 2, 2, 1024 * 8, 1);
|
||||||
|
|
||||||
|
/////// everything is ready, here we are, lets play it...
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
sleep(3000);
|
||||||
|
|
||||||
|
uos_Stop(PlayerIndex1); // This if device mic was used
|
||||||
|
sleep(500);
|
||||||
|
|
||||||
|
// OK, let's use the new ogg-memorystream.
|
||||||
|
|
||||||
|
PlayerIndex1 := 1;
|
||||||
|
|
||||||
|
thememorystream2.Position := 0;
|
||||||
|
|
||||||
|
// creata a new player
|
||||||
|
if uos_CreatePlayer(PlayerIndex1) then
|
||||||
|
|
||||||
|
uos_AddFromMemoryStream(PlayerIndex1, thememorystream2, -1, -1, 2, 1024 * 4);
|
||||||
|
// Add a input from memory stream with custom parameters
|
||||||
|
// MemoryStream : Memory stream of encoded audio.
|
||||||
|
// TypeAudio : default : -1 --> 0 (0: flac, ogg, wav; 1: mp3; 2:opus)
|
||||||
|
// OutputIndex : Output index of used output// -1: all output, -2: no output, other cint32 refer to a existing OutputIndex (if multi-output then OutName = name of each output separeted by ';')
|
||||||
|
// SampleFormat : default : -1 (2:Int16) (0: Float32, 1:Int32, 2:Int16)
|
||||||
|
// FramesCount : default : -1 (4096)
|
||||||
|
// result : Input Index in array -1 = error
|
||||||
|
// example : InputIndex1 := uos_AddFromMemoryStream(mymemorystream,-1,-1,2,44100,0,1024);
|
||||||
|
|
||||||
|
// add a Output into device with custom parameters
|
||||||
|
uos_AddIntoDevOut(PlayerIndex1, -1, -1, -1, 2, 2, 1024 * 4, -1);
|
||||||
|
|
||||||
|
/////// everything is ready, here we are, lets play it...
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
|
||||||
|
sleep(3000);
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
writeln('uos_AddFromMemoryStream(...) did not work... ');
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TuosConsole.doRun;
|
||||||
|
begin
|
||||||
|
ConsolePlay;
|
||||||
|
uos_free();
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TuosConsole.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TUOSConsole;
|
||||||
|
begin
|
||||||
|
Application := TUOSConsole.Create(nil);
|
||||||
|
Application.Title := 'Console Player from MemoryStream';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
||||||
|
|
||||||
2130
UOS/examples/consoleplaymemorystream.prj
Normal file
2130
UOS/examples/consoleplaymemorystream.prj
Normal file
File diff suppressed because it is too large
Load Diff
77
UOS/examples/consolespectrum.lpi
Normal file
77
UOS/examples/consolespectrum.lpi
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="consolespectrum"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="consolespectrum.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="consolespectrum"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
253
UOS/examples/consolespectrum.pas
Normal file
253
UOS/examples/consolespectrum.pas
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
program consolespectrum;
|
||||||
|
|
||||||
|
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in uos_define.inc !
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF}
|
||||||
|
Classes,
|
||||||
|
ctypes,
|
||||||
|
SysUtils,
|
||||||
|
CustApp,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TUOSConsole }
|
||||||
|
|
||||||
|
TuosConsole = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
procedure ConsolePlay;
|
||||||
|
protected
|
||||||
|
procedure doRun; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
res, x, y,z: integer;
|
||||||
|
thearray : array of cfloat;
|
||||||
|
ordir, opath, SoundFilename, PA_FileName, SF_FileName, MP_FileName: string;
|
||||||
|
PlayerIndex1, InputIndex1, OutputIndex1 : integer;
|
||||||
|
|
||||||
|
{ TuosConsole }
|
||||||
|
|
||||||
|
procedure TuosConsole.ConsolePlay;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound\test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
SF_FileName := ordir + ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
SF_FileName := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/64bit/LibSndFile-64.dylib';
|
||||||
|
SoundFilename := ordir + '/sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
|
||||||
|
res := uos_LoadLib(Pchar(PA_FileName), Pchar(SF_FileName), nil, nil, nil, nil, nil) ;
|
||||||
|
|
||||||
|
writeln;
|
||||||
|
if res = 0 then
|
||||||
|
writeln('Libraries are loaded.')
|
||||||
|
else
|
||||||
|
writeln('Libraries did not load.');
|
||||||
|
|
||||||
|
if res = 0 then begin
|
||||||
|
writeln();
|
||||||
|
// writeln('Libraries version: '+ uos_GetInfoLibraries());
|
||||||
|
|
||||||
|
//// Create the player.
|
||||||
|
//// PlayerIndex : from 0 to what your computer can do !
|
||||||
|
//// If PlayerIndex exists already, it will be overwriten...
|
||||||
|
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
|
||||||
|
if uos_CreatePlayer(PlayerIndex1) then
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
//// add a Input from audio-file with default parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
////////// FileName : filename of audio file
|
||||||
|
// result : -1 nothing created, otherwise Input Index in array
|
||||||
|
|
||||||
|
InputIndex1 := uos_AddFromFile(PlayerIndex1,(pchar(SoundFilename)));
|
||||||
|
|
||||||
|
if InputIndex1 > -1 then
|
||||||
|
|
||||||
|
//// add a Output into device with default parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
// result : -1 nothing created, otherwise Output Index in array
|
||||||
|
|
||||||
|
|
||||||
|
OutputIndex1 := uos_AddIntoDevOut(PlayerIndex1, -1, 0.3, -1, -1, -1, -1, -1) ;
|
||||||
|
|
||||||
|
|
||||||
|
if OutputIndex1 > -1 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
// Spectrum : create bandpass filters with alsobuf set to false, how many you want:
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 10000,20000, 1,
|
||||||
|
3, 10000,20000, 1, False, nil);
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 6000,10000, 1,
|
||||||
|
3, 6000,10000, 1, False, nil);
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 4000,6000, 1,
|
||||||
|
3, 4000,6000, 1, False, nil);
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 2500,4000, 1,
|
||||||
|
3, 2500,4000, 1, False, nil);
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 1000, 2500, 1,
|
||||||
|
3, 1000, 2500, 1, False, nil);
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 700,1000, 1,
|
||||||
|
3, 700,1000, 1, False, nil);
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 500,700, 1,
|
||||||
|
3, 500,700, 1, False, nil);
|
||||||
|
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, 300,500, 1,
|
||||||
|
3, 300,500, 1, False, nil);
|
||||||
|
|
||||||
|
/////// everything is ready, here we are, lets play it...
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
|
||||||
|
writeln();
|
||||||
|
|
||||||
|
// you may, of course, use a player-loop procedure insteed.
|
||||||
|
while uos_getstatus(PlayerIndex1) > 0 do
|
||||||
|
begin
|
||||||
|
sleep(200);
|
||||||
|
writeln();
|
||||||
|
writeln('GetLevelArray() left|right by band:');
|
||||||
|
// list of left|right levels separed by $ character of each virtual filter:
|
||||||
|
|
||||||
|
// writeln(uos_InputFiltersGetLevelString(PlayerIndex1,InputIndex1));
|
||||||
|
|
||||||
|
// you may also use uos_InputFiltersGetLevelArray and get a array of float:
|
||||||
|
thearray := uos_InputFiltersGetLevelArray(PlayerIndex1,InputIndex1);
|
||||||
|
x := 0;
|
||||||
|
while x < length(thearray) -1 do
|
||||||
|
begin
|
||||||
|
writeln('Band' + inttostr(x div 2) + ' = ' + floattostr(thearray[x]) + '|' + floattostr(thearray[x+1]));
|
||||||
|
x := x +2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TuosConsole.doRun;
|
||||||
|
begin
|
||||||
|
ConsolePlay;
|
||||||
|
// writeln('Press a key to exit...');
|
||||||
|
// readln;
|
||||||
|
writeln('');
|
||||||
|
writeln('Ciao...');
|
||||||
|
uos_free(); // Do not forget this !
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TuosConsole.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TUOSConsole;
|
||||||
|
begin
|
||||||
|
Application := TUOSConsole.Create(nil);
|
||||||
|
Application.Title := 'Console Player';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
2147
UOS/examples/consolespectrum.prj
Normal file
2147
UOS/examples/consolespectrum.prj
Normal file
File diff suppressed because it is too large
Load Diff
77
UOS/examples/consolesynth.lpi
Normal file
77
UOS/examples/consolesynth.lpi
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="consolesynth"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="consolesynth.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="consolesynth"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
234
UOS/examples/consolesynth.pas
Normal file
234
UOS/examples/consolesynth.pas
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
program consolesynth;
|
||||||
|
|
||||||
|
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in uos_define.inc !
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}
|
||||||
|
Classes,
|
||||||
|
SysUtils,
|
||||||
|
CustApp,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TUOSConsole }
|
||||||
|
|
||||||
|
TuosConsole = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
procedure ConsolePlay;
|
||||||
|
protected
|
||||||
|
procedure doRun; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
res: integer;
|
||||||
|
ordir, opath, PA_FileName: string;
|
||||||
|
PlayerIndex1, inindex1: integer;
|
||||||
|
|
||||||
|
{ TuosConsole }
|
||||||
|
|
||||||
|
procedure TuosConsole.ConsolePlay;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
{$endif}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
PA_FileName := ordir + 'lib/OpenBSD/64bit/LibPortaudio-64.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
{$endif}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
// Load the libraries (here only portaudio is needed)
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
|
||||||
|
res := uos_LoadLib(PChar(PA_FileName), nil, nil, nil, nil, nil, nil);
|
||||||
|
|
||||||
|
writeln('Result of loading (if 0 => ok ) : ' + IntToStr(res));
|
||||||
|
|
||||||
|
writeln((uos_getinfolibraries()));
|
||||||
|
|
||||||
|
if res = 0 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
//// Create the player.
|
||||||
|
//// PlayerIndex : from 0 to what your computer can do !
|
||||||
|
//// If PlayerIndex exists already, it will be overwriten...
|
||||||
|
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
inindex1 := -1;
|
||||||
|
|
||||||
|
if uos_CreatePlayer(PlayerIndex1) then
|
||||||
|
inindex1 :=
|
||||||
|
uos_AddFromSynth(PlayerIndex1, -1, -1, -1, 420, 420, -1, -1, -1, -1, -1, 0, -1, -1, -1);
|
||||||
|
|
||||||
|
{ function uos_AddFromSynth(PlayerIndex: cint32; Channels: integer; WaveTypeL, WaveTypeR: integer;
|
||||||
|
FrequencyL, FrequencyR: float; VolumeL, VolumeR: float;
|
||||||
|
duration : cint32; NbHarmonics: cint32; EvenHarmonics: cint32;
|
||||||
|
OutputIndex: cint32; SampleFormat: cint32 ;
|
||||||
|
SampleRate: cint32 ; FramesCount : cint32): cint32;
|
||||||
|
|
||||||
|
// Add a input from Synthesizer with custom parameters
|
||||||
|
// Channels: default: -1 (2) (1 = mono, 2 = stereo)
|
||||||
|
// WaveTypeL: default: -1 (0) (0 = sine-wave 1 = square-wave, used for mono and stereo)
|
||||||
|
// WaveTypeR: default: -1 (0) (0 = sine-wave 1 = square-wave, used for stereo, ignored for mono)
|
||||||
|
// FrequencyL: default: -1 (440 htz) (Left frequency, used for mono)
|
||||||
|
// FrequencyR: default: -1 (440 htz) (Right frequency, used for stereo, ignored for mono)
|
||||||
|
// VolumeL: default: -1 (= 1) (from 0 to 1) => volume left
|
||||||
|
// VolumeR: default: -1 (= 1) (from 0 to 1) => volume rigth (ignored for mono)
|
||||||
|
// Duration: default: -1 (= 1000) => duration in msec (0 = endless)
|
||||||
|
// NbHarmonics: default: -1 (= 0) Number of Harmonics
|
||||||
|
// EvenHarmonics: default: -1 (= 0) (0 = all harmonics, 1 = Only even harmonics)
|
||||||
|
// OutputIndex: Output index of used output
|
||||||
|
// -1: all output, -2: no output, other cint32 refer to
|
||||||
|
// a existing OutputIndex
|
||||||
|
// (if multi-output then OutName = name of each output separeted by ';')
|
||||||
|
// SampleFormat: default : -1 (0: Float32) (0: Float32, 1:Int32, 2:Int16)
|
||||||
|
// SampleRate: delault : -1 (44100)
|
||||||
|
// FramesCount: -1 default : 1024
|
||||||
|
// result: Input Index in array -1 = error
|
||||||
|
}
|
||||||
|
|
||||||
|
{$if defined(cpuarm) or defined(cpuaarch64)} // need a lower latency
|
||||||
|
if uos_AddIntoDevOut(PlayerIndex1,-1,0.3,-1,-1, 0,-1,-1) > - 1 then
|
||||||
|
{$else}
|
||||||
|
if uos_AddIntoDevOut(PlayerIndex1, -1, -1, -1, -1, 0, -1, -1) > -1 then
|
||||||
|
{$endif}
|
||||||
|
//// add a Output into device with custom parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
// result : -1 nothing created, otherwise Output Index in array
|
||||||
|
begin
|
||||||
|
/////// everything is ready, here we are, lets play it...
|
||||||
|
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
|
||||||
|
sleep(150);
|
||||||
|
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, 880, 880, -1, -1, 0, 0, -1, True);
|
||||||
|
|
||||||
|
{
|
||||||
|
procedure InputSetSynth(InputIndex: cint32; WaveTypeL, WaveTypeR: integer;
|
||||||
|
FrequencyL, FrequencyR: float; VolumeL, VolumeR: float; duration: cint32;
|
||||||
|
NbHarmonic: cint32; EvenHarmonics: cint32; Enable: boolean);
|
||||||
|
// InputIndex: one existing input index
|
||||||
|
// WaveTypeL: do not change: -1 (0 = sine-wave 1 = square-wave, used for mono and stereo)
|
||||||
|
// WaveTypeR: do not change: -1 (0 = sine-wave 1 = square-wave, used for stereo, ignored for mono)
|
||||||
|
// FrequencyL: do not change: -1 (Left frequency, used for mono)
|
||||||
|
// FrequencyR: do not change: -1 (440 htz) (Right frequency, used for stereo, ignored for mono)
|
||||||
|
// VolumeL: do not change: -1 (= 1) (from 0 to 1) => volume left
|
||||||
|
// VolumeR: do not change: -1 (from 0 to 1) => volume rigth (ignored for mono)
|
||||||
|
// Duration: in msec (-1 = do not change)
|
||||||
|
// NbHarmonic: Number of Harmonics (-1 not change)
|
||||||
|
// EvenHarmonics: default: -1 (= 0) (0 = all harmonics, 1 = Only even harmonics)
|
||||||
|
// Enable: true or false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(175);
|
||||||
|
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, 610, 610 * 0.99, -1, -1, -1, 0, -1, True);
|
||||||
|
|
||||||
|
sleep(300);
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, la3, la3 * 0.99, -1, -1, -1, 0, -1, True);
|
||||||
|
|
||||||
|
sleep(150);
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, 420, 420 * 0.99, -1, -1, -1, 0, -1, True);
|
||||||
|
|
||||||
|
sleep(300);
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, 320, 320 * 0.99, -1, -1, -1, 0, -1, True);
|
||||||
|
|
||||||
|
sleep(150);
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, 660, 660 * 0.99, -1, -1, -1, 0, -1, True);
|
||||||
|
|
||||||
|
sleep(300);
|
||||||
|
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, la3, la3 * 0.99, -1, -1, -1, 0, 1, True);
|
||||||
|
|
||||||
|
sleep(300);
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, la3, la3 * 1.01, -1, -1, -1, 0, 0, True);
|
||||||
|
|
||||||
|
sleep(300);
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, la3, la3 * 0.99, -1, -1, -1, 0, 1, True);
|
||||||
|
|
||||||
|
sleep(300);
|
||||||
|
uos_InputSetSynth(PlayerIndex1, inindex1, -1, -1, la3, la3 * 1.01, -1, -1, -1, 0, 0, True);
|
||||||
|
|
||||||
|
sleep(1500);
|
||||||
|
|
||||||
|
uos_stop(PlayerIndex1);
|
||||||
|
|
||||||
|
writeln(IntToStr(GetCPUCount()));
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TuosConsole.doRun;
|
||||||
|
begin
|
||||||
|
ConsolePlay;
|
||||||
|
uos_free;
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TuosConsole.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TUOSConsole;
|
||||||
|
begin
|
||||||
|
Application := TUOSConsole.Create(nil);
|
||||||
|
Application.Title := 'Console Synthesizer';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
|
|
||||||
2129
UOS/examples/consolesynth.prj
Normal file
2129
UOS/examples/consolesynth.prj
Normal file
File diff suppressed because it is too large
Load Diff
74
UOS/examples/conswebstream.lpi
Normal file
74
UOS/examples/conswebstream.lpi
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="10"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="conswebstream"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="conswebstream.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="conswebstream"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
<UseExternalDbgSyms Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
197
UOS/examples/conswebstream.pas
Normal file
197
UOS/examples/conswebstream.pas
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
program conswebstream;
|
||||||
|
|
||||||
|
///WARNING : needs FPC version > 3.0.1
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
uses
|
||||||
|
cmem,
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}
|
||||||
|
Classes,
|
||||||
|
// ctypes,
|
||||||
|
SysUtils,
|
||||||
|
//uos_opusurl,
|
||||||
|
uos_flat;
|
||||||
|
|
||||||
|
var
|
||||||
|
res, res2: integer;
|
||||||
|
ordir, opath, PA_FileName, MP_FileName, OF_FileName, theurl: string;
|
||||||
|
theicytag: PChar;
|
||||||
|
PlayerIndex1: integer;
|
||||||
|
|
||||||
|
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}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
OF_FileName := ordir + 'lib/Linux/64bit/LibOpusFile-64.so';
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/32bit/LibMpg123-32.so';
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libmpg123_aarch64.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/arm_raspberrypi/libmpg123-arm.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(openbsd) }
|
||||||
|
SF_FileName := ordir + 'lib/OpenBSD/64bit/LibSndFile-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
{$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}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
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}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
MP_FileName := opath + '/lib/Mac/64bit/LibMpg123-64.dylib';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
// for web streaming => Mpg123 is needed
|
||||||
|
|
||||||
|
res := uos_LoadLib(PChar(PA_FileName), nil, PChar(MP_FileName), nil, nil, PChar(OF_FileName), nil);
|
||||||
|
writeln('');
|
||||||
|
if res = 0 then
|
||||||
|
writeln('===> Libraries are loaded.')
|
||||||
|
else
|
||||||
|
writeln('===> Libraries are NOT loaded.');
|
||||||
|
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
uos_CreatePlayer(PlayerIndex1); //// Create the player
|
||||||
|
writeln('===> uos_CreatePlayer => ok');
|
||||||
|
|
||||||
|
// theurl := 'http://broadcast.infomaniak.net:80/alouette-high.mp3';
|
||||||
|
// theurl := 'http://www.alouette.fr/alouette.m3u' ;
|
||||||
|
// 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' ;
|
||||||
|
// theurl := 'https://sites.google.com/site/fredvsbinaries/willi.opus';
|
||||||
|
theurl := 'http://stream-uk1.radioparadise.com/mp3-128';
|
||||||
|
// for opus file, set AudioFormat = 1 in AddFromURL()
|
||||||
|
// theurl := 'https://sites.google.com/site/fredvsbinaries/guit_kungs.opus';
|
||||||
|
|
||||||
|
{
|
||||||
|
with TfpHttpClient.Create(nil) do
|
||||||
|
try WriteLn(Get(theurl));
|
||||||
|
finally Free;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
writeln('Try to connect to ' + theurl);
|
||||||
|
// res := uos_AddFromURL(PlayerIndex1,pchar(theurl)) ;
|
||||||
|
res := uos_AddFromURL(PlayerIndex1, PChar(theurl), -1, -1, -1, -1, False);
|
||||||
|
|
||||||
|
////////// URL : URL of audio file
|
||||||
|
////////// OutputIndex : OutputIndex of existing Output // -1: all output, -2: no output, other LongInt : existing Output
|
||||||
|
////////// SampleFormat : -1 default : Int16 (0: Float32, 1:Int32, 2:Int16)
|
||||||
|
//////////// FramesCount : default : -1 (1024)
|
||||||
|
//////////// AudioFormat : default : -1 (mp3) (0: mp3, 1: opus)
|
||||||
|
///////////// ICY data enabled
|
||||||
|
|
||||||
|
if res < 0 then
|
||||||
|
writeln('===> uos_AddFromURL => NOT OK:' + IntToStr(res))
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
writeln('===> uos_AddFromURL => OK :' + IntToStr(res));
|
||||||
|
|
||||||
|
//// add a Output => change framecount => 1024
|
||||||
|
|
||||||
|
{$if defined(cpuarm) or defined(cpuaarch64)} // need a lower latency
|
||||||
|
res2 := uos_AddIntoDevOut(PlayerIndex1, -1, 0.3, uos_InputGetSampleRate(PlayerIndex1, res), -1, -1, 1024, -1);
|
||||||
|
{$else}
|
||||||
|
res2 := uos_AddIntoDevOut(PlayerIndex1, -1, -1, uos_InputGetSampleRate(PlayerIndex1, res), -1, -1, 1024, -1);
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
////// Add a Output into Device Output
|
||||||
|
//////////// Device ( -1 is default device )
|
||||||
|
//////////// Latency ( -1 is latency suggested )
|
||||||
|
//////////// SampleRate : delault : -1 (44100)
|
||||||
|
//////////// Channels : delault : -1 (2:stereo) (0: no channels, 1:mono, 2:stereo, ...)
|
||||||
|
//////////// SampleFormat : default : -1 (2:Int16) (0: Float32, 1:Int32, 2:Int16)
|
||||||
|
//////////// FramesCount : default : -1 (= 4096)
|
||||||
|
// ChunkCount : default : -1 (= 512)
|
||||||
|
|
||||||
|
if res2 <> -1 then
|
||||||
|
writeln('===> uos_AddIntoDevOut => ok :' + IntToStr(res2))
|
||||||
|
else
|
||||||
|
|
||||||
|
writeln('===> uos_AddIntoDevOut => NOT ok');
|
||||||
|
if res <> -1 then
|
||||||
|
begin
|
||||||
|
writeln('===> All ready to play.');
|
||||||
|
writeln('Press a key to play...');
|
||||||
|
writeln('After, press a key to exit...');
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
writeln();
|
||||||
|
readln;
|
||||||
|
|
||||||
|
/// OK, let play it.
|
||||||
|
if res <> -1 then
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
{
|
||||||
|
sleep(3000);
|
||||||
|
uos_inputupdateicy(PlayerIndex1,0,theicytag);
|
||||||
|
writeln('icy = ' + (theicytag));
|
||||||
|
sleep(3000);
|
||||||
|
uos_inputupdateicy(PlayerIndex1,0,theicytag);
|
||||||
|
writeln('icy = ' + (theicytag));
|
||||||
|
// }
|
||||||
|
|
||||||
|
writeln('Press a key to exit...');
|
||||||
|
end;
|
||||||
|
readln;
|
||||||
|
uos_free;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
2129
UOS/examples/conswebstream.prj
Normal file
2129
UOS/examples/conswebstream.prj
Normal file
File diff suppressed because it is too large
Load Diff
587
UOS/examples/deviceinfos.lpi
Normal file
587
UOS/examples/deviceinfos.lpi
Normal file
@@ -0,0 +1,587 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="12"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<CompatibilityMode Value="True"/>
|
||||||
|
</Flags>
|
||||||
|
<Title Value="deviceinfos"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
<UseXPManifest Value="True"/>
|
||||||
|
<XPManifest>
|
||||||
|
<DpiAware Value="True"/>
|
||||||
|
</XPManifest>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<CustomData Count="15">
|
||||||
|
<Item0 Name="lazpackager/copyright" Value="2012 Fred van Stappen"/>
|
||||||
|
<Item1 Name="lazpackager/deb/ppa" Value="ppa:fiens/uos"/>
|
||||||
|
<Item2 Name="lazpackager/deb/series" Value="precise"/>
|
||||||
|
<Item3 Name="lazpackager/deb/tpl_changelog" Value="?PACKAGE_NAME? (?FULLVERSION?) ?SERIES?; urgency=low
|
||||||
|
|
||||||
|
* Original version ?VERSION? packaged with lazdebian
|
||||||
|
|
||||||
|
-- ?MAINTAINER? <?MAINTAINER_EMAIL?> ?DATER?
|
||||||
|
"/>
|
||||||
|
<Item4 Name="lazpackager/deb/tpl_control" Value="Source: ?PACKAGE_NAME?
|
||||||
|
Maintainer: ?MAINTAINER? <?MAINTAINER_EMAIL?>
|
||||||
|
Section: misc
|
||||||
|
Priority: optional
|
||||||
|
Standards-Version: 3.9.3
|
||||||
|
Build-Depends: fpc, lcl, lcl-utils, lazarus, debhelper (>= 8)
|
||||||
|
|
||||||
|
Package: ?PACKAGE_NAME?
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends},
|
||||||
|
Description: ?DESCRIPTION?
|
||||||
|
?DESCRIPTION_LONG?
|
||||||
|
"/>
|
||||||
|
<Item5 Name="lazpackager/deb/tpl_copyright" Value="Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: ?COPYRIGHT?
|
||||||
|
License: GPL-2+
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
at your option) any later version.
|
||||||
|
.
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
.
|
||||||
|
On Debian systems, the full text of the GNU General Public
|
||||||
|
License version 2 can be found in the file
|
||||||
|
/usr/share/common-licenses/GPL-2
|
||||||
|
"/>
|
||||||
|
<Item6 Name="lazpackager/deb/tpl_rules" Value="#!/usr/bin/make -f
|
||||||
|
|
||||||
|
# see http://www.debian.org/doc/manuals/maint-guide/dreq.en.html
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
||||||
|
dh_auto_build -- PREFIX=/usr
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
dh_auto_install -- PREFIX=/usr
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
"/>
|
||||||
|
<Item7 Name="lazpackager/description" Value="United Openlib of Sound"/>
|
||||||
|
<Item8 Name="lazpackager/description_long" Value="United Openlib of Sound is a Pascal linker for Portaudio, Sndfile and MPG123 audio libraries.
|
||||||
|
With UOS audio life is easier..."/>
|
||||||
|
<Item9 Name="lazpackager/export_cmd" Value="?CP? *.lpi ?TEMPFOLDER?/
|
||||||
|
?CP? *.lpr ?TEMPFOLDER?/
|
||||||
|
?CP? *.pas ?TEMPFOLDER?/
|
||||||
|
?CP? *.lfm ?TEMPFOLDER?/
|
||||||
|
?CP? *.ico ?TEMPFOLDER?/
|
||||||
|
"/>
|
||||||
|
<Item10 Name="lazpackager/maintainer" Value="Fred van Stappen"/>
|
||||||
|
<Item11 Name="lazpackager/maintainer_email" Value="fiens@hotmail.com"/>
|
||||||
|
<Item12 Name="lazpackager/package_name" Value="united_openlib_sound"/>
|
||||||
|
<Item13 Name="lazpackager/tpl_makefile" Value="PREFIX = /usr/local
|
||||||
|
|
||||||
|
# debuild will set DESTDIR to the fakeroot path and
|
||||||
|
# in the override rules we will change PREFIX to /usr
|
||||||
|
BINDIR = $(DESTDIR)$(PREFIX)/bin
|
||||||
|
|
||||||
|
.PHONY : all
|
||||||
|
all:
|
||||||
|
lazbuild ?PROJECT?
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
clean:
|
||||||
|
$(RM) -r lib
|
||||||
|
$(RM) *.res
|
||||||
|
$(RM) ?EXECUTABLE?
|
||||||
|
|
||||||
|
.PHONY : install
|
||||||
|
install:
|
||||||
|
mkdir -p $(BINDIR)
|
||||||
|
install -s ?EXECUTABLE? $(BINDIR)/
|
||||||
|
"/>
|
||||||
|
<Item14 Name="lazpackager/use_existing_makefile" Value="False"/>
|
||||||
|
</CustomData>
|
||||||
|
<BuildModes Count="1" Active="Default">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<FormatVersion Value="2"/>
|
||||||
|
<Modes Count="1">
|
||||||
|
<Mode0 Name="default"/>
|
||||||
|
</Modes>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="45">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="deviceinfos.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<CursorPos X="3" Y="7"/>
|
||||||
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<IsVisibleTab Value="True"/>
|
||||||
|
<EditorIndex Value="1"/>
|
||||||
|
<TopLine Value="249"/>
|
||||||
|
<CursorPos X="22" Y="262"/>
|
||||||
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
<LoadedDesigner Value="True"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="lazdyn_portaudio.pas"/>
|
||||||
|
<TopLine Value="371"/>
|
||||||
|
<CursorPos X="89" Y="4"/>
|
||||||
|
<UsageCount Value="99"/>
|
||||||
|
</Unit2>
|
||||||
|
<Unit3>
|
||||||
|
<Filename Value="Lazdyn_SoundTouch.pas"/>
|
||||||
|
<CursorPos X="59" Y="12"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit3>
|
||||||
|
<Unit4>
|
||||||
|
<Filename Value="u_os.pas"/>
|
||||||
|
<TopLine Value="445"/>
|
||||||
|
<CursorPos X="10" Y="402"/>
|
||||||
|
<UsageCount Value="81"/>
|
||||||
|
</Unit4>
|
||||||
|
<Unit5>
|
||||||
|
<Filename Value="../firstprognew/mainmixxl.pas"/>
|
||||||
|
<TopLine Value="4347"/>
|
||||||
|
<CursorPos X="9" Y="4364"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit5>
|
||||||
|
<Unit6>
|
||||||
|
<Filename Value="../dynmpg123/waveutils.pas"/>
|
||||||
|
<TopLine Value="3"/>
|
||||||
|
<CursorPos X="45" Y="43"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit6>
|
||||||
|
<Unit7>
|
||||||
|
<Filename Value="kPGtest.pas"/>
|
||||||
|
<TopLine Value="111"/>
|
||||||
|
<CursorPos X="32" Y="128"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit7>
|
||||||
|
<Unit8>
|
||||||
|
<Filename Value="kPGtestSF.pas"/>
|
||||||
|
<TopLine Value="27"/>
|
||||||
|
<CursorPos X="29" Y="32"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit8>
|
||||||
|
<Unit9>
|
||||||
|
<Filename Value="lazdyn_mpg123.pas"/>
|
||||||
|
<TopLine Value="244"/>
|
||||||
|
<CursorPos X="102" Y="250"/>
|
||||||
|
<UsageCount Value="99"/>
|
||||||
|
</Unit9>
|
||||||
|
<Unit10>
|
||||||
|
<Filename Value="../OpenC2Pas/src/main.pas"/>
|
||||||
|
<TopLine Value="193"/>
|
||||||
|
<CursorPos Y="232"/>
|
||||||
|
<UsageCount Value="5"/>
|
||||||
|
</Unit10>
|
||||||
|
<Unit11>
|
||||||
|
<Filename Value="lazdyn_libsndfile.pas"/>
|
||||||
|
<CursorPos Y="12"/>
|
||||||
|
<UsageCount Value="99"/>
|
||||||
|
</Unit11>
|
||||||
|
<Unit12>
|
||||||
|
<Filename Value="../U_OS_Test (copie)/u_os.pas"/>
|
||||||
|
<TopLine Value="72"/>
|
||||||
|
<CursorPos X="34" Y="236"/>
|
||||||
|
<UsageCount Value="1"/>
|
||||||
|
</Unit12>
|
||||||
|
<Unit13>
|
||||||
|
<Filename Value="PA_SF_MP.pas"/>
|
||||||
|
<TopLine Value="77"/>
|
||||||
|
<CursorPos X="20" Y="10"/>
|
||||||
|
<UsageCount Value="3"/>
|
||||||
|
</Unit13>
|
||||||
|
<Unit14>
|
||||||
|
<Filename Value="/lib/codetyphon/fpcsrc/rtl/objpas/sysutils/sysstrh.inc"/>
|
||||||
|
<TopLine Value="100"/>
|
||||||
|
<CursorPos X="10" Y="112"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit14>
|
||||||
|
<Unit15>
|
||||||
|
<Filename Value="../lazarus64/examples/multithreading/mainunit.pas"/>
|
||||||
|
<TopLine Value="70"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit15>
|
||||||
|
<Unit16>
|
||||||
|
<Filename Value="../lazarus64/examples/pascalstream/componentstreampas.pas"/>
|
||||||
|
<TopLine Value="33"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit16>
|
||||||
|
<Unit17>
|
||||||
|
<Filename Value="../firstprognewssbpm/mainmixxl.pas"/>
|
||||||
|
<ComponentName Value="MiXimumLP"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<TopLine Value="2775"/>
|
||||||
|
<CursorPos X="20" Y="2792"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit17>
|
||||||
|
<Unit18>
|
||||||
|
<Filename Value="/media/Windows7/dynsndfile/libsndfilestrings.pas"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit18>
|
||||||
|
<Unit19>
|
||||||
|
<Filename Value="/media/Windows7/dynsndfile/lazdyn_libsndfile.pas"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit19>
|
||||||
|
<Unit20>
|
||||||
|
<Filename Value="../logouos/unit1.pas"/>
|
||||||
|
<TopLine Value="67"/>
|
||||||
|
<CursorPos X="51" Y="83"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit20>
|
||||||
|
<Unit21>
|
||||||
|
<Filename Value="/lib/codetyphon/lazarus/lcl/graphics.pp"/>
|
||||||
|
<TopLine Value="1168"/>
|
||||||
|
<CursorPos X="49" Y="1181"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit21>
|
||||||
|
<Unit22>
|
||||||
|
<Filename Value="/lib/codetyphon/fpcsrc/rtl/objpas/objpas.pp"/>
|
||||||
|
<TopLine Value="119"/>
|
||||||
|
<CursorPos X="8" Y="28"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit22>
|
||||||
|
<Unit23>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<EditorIndex Value="2"/>
|
||||||
|
<TopLine Value="4663"/>
|
||||||
|
<CursorPos X="2" Y="4673"/>
|
||||||
|
<UsageCount Value="100"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit23>
|
||||||
|
<Unit24>
|
||||||
|
<Filename Value="uos_new.pas"/>
|
||||||
|
<TopLine Value="310"/>
|
||||||
|
<CursorPos X="29" Y="478"/>
|
||||||
|
<UsageCount Value="80"/>
|
||||||
|
</Unit24>
|
||||||
|
<Unit25>
|
||||||
|
<Filename Value="../firstprognew/bass.pas"/>
|
||||||
|
<TopLine Value="810"/>
|
||||||
|
<UsageCount Value="5"/>
|
||||||
|
</Unit25>
|
||||||
|
<Unit26>
|
||||||
|
<Filename Value="../onenamevar/unit1.pas"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<TopLine Value="81"/>
|
||||||
|
<CursorPos X="44" Y="100"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit26>
|
||||||
|
<Unit27>
|
||||||
|
<Filename Value="/lib/codetyphon/lazarus/packager/registration/fcllaz.pas"/>
|
||||||
|
<CursorPos Y="4"/>
|
||||||
|
<UsageCount Value="2"/>
|
||||||
|
</Unit27>
|
||||||
|
<Unit28>
|
||||||
|
<Filename Value="../lazarus32/packager/registration/fcllaz.pas"/>
|
||||||
|
<UsageCount Value="2"/>
|
||||||
|
</Unit28>
|
||||||
|
<Unit29>
|
||||||
|
<Filename Value="../U_OS_Testnewonetype/uos.pas"/>
|
||||||
|
<TopLine Value="444"/>
|
||||||
|
<CursorPos X="79" Y="452"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit29>
|
||||||
|
<Unit30>
|
||||||
|
<Filename Value="/media/Windows7/UOS/uos.pas"/>
|
||||||
|
<TopLine Value="747"/>
|
||||||
|
<CursorPos X="5" Y="750"/>
|
||||||
|
<UsageCount Value="3"/>
|
||||||
|
</Unit30>
|
||||||
|
<Unit31>
|
||||||
|
<Filename Value="/lib/codetyphon/lazarus/components/codetools/codebeautifier.pas"/>
|
||||||
|
<TopLine Value="405"/>
|
||||||
|
<UsageCount Value="5"/>
|
||||||
|
</Unit31>
|
||||||
|
<Unit32>
|
||||||
|
<Filename Value="../dynportaudio/mainunitsine.pas"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<TopLine Value="463"/>
|
||||||
|
<CursorPos Y="483"/>
|
||||||
|
<UsageCount Value="17"/>
|
||||||
|
</Unit32>
|
||||||
|
<Unit33>
|
||||||
|
<Filename Value="../dynportaudio/unit1.pas"/>
|
||||||
|
<TopLine Value="81"/>
|
||||||
|
<CursorPos X="16" Y="91"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit33>
|
||||||
|
<Unit34>
|
||||||
|
<Filename Value="/media/Windows7/hollytray/unit1.pas"/>
|
||||||
|
<TopLine Value="48"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit34>
|
||||||
|
<Unit35>
|
||||||
|
<Filename Value="../DynSynthDemo/umain.pas"/>
|
||||||
|
<TopLine Value="260"/>
|
||||||
|
<CursorPos X="100" Y="281"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit35>
|
||||||
|
<Unit36>
|
||||||
|
<Filename Value="uos_portaudio.pas"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<TopLine Value="65"/>
|
||||||
|
<CursorPos X="5" Y="76"/>
|
||||||
|
<UsageCount Value="17"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit36>
|
||||||
|
<Unit37>
|
||||||
|
<Filename Value="main_sp.pas"/>
|
||||||
|
<TopLine Value="213"/>
|
||||||
|
<CursorPos Y="230"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit37>
|
||||||
|
<Unit38>
|
||||||
|
<Filename Value="../../firstprognew (copie)/mainmixxl.pas"/>
|
||||||
|
<TopLine Value="5842"/>
|
||||||
|
<CursorPos X="66" Y="5861"/>
|
||||||
|
<UsageCount Value="12"/>
|
||||||
|
</Unit38>
|
||||||
|
<Unit39>
|
||||||
|
<Filename Value="../../lazarus32/packager/registration/fcllaz.pas"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit39>
|
||||||
|
<Unit40>
|
||||||
|
<Filename Value="../../lazarus64/packager/registration/fcllaz.pas"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit40>
|
||||||
|
<Unit41>
|
||||||
|
<Filename Value="deviceinfos_fpGUI.lpr"/>
|
||||||
|
<TopLine Value="149"/>
|
||||||
|
<CursorPos X="35" Y="170"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit41>
|
||||||
|
<Unit42>
|
||||||
|
<Filename Value="filterplayer.lpi"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
<DefaultSyntaxHighlighter Value="XML"/>
|
||||||
|
</Unit42>
|
||||||
|
<Unit43>
|
||||||
|
<Filename Value="uos_flat.pas"/>
|
||||||
|
<EditorIndex Value="4"/>
|
||||||
|
<TopLine Value="568"/>
|
||||||
|
<CursorPos X="3" Y="580"/>
|
||||||
|
<UsageCount Value="12"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit43>
|
||||||
|
<Unit44>
|
||||||
|
<Filename Value="../../lazarus/2.0.6/lcl/forms/timepopup.pas"/>
|
||||||
|
<ComponentName Value="TimePopupForm"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="TimePopup"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<CursorPos X="94" Y="13"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit44>
|
||||||
|
</Units>
|
||||||
|
<JumpHistory Count="30" HistoryIndex="29">
|
||||||
|
<Position1>
|
||||||
|
<Filename Value="uos_flat.pas"/>
|
||||||
|
<Caret Line="370" Column="91" TopLine="367"/>
|
||||||
|
</Position1>
|
||||||
|
<Position2>
|
||||||
|
<Filename Value="uos_flat.pas"/>
|
||||||
|
<Caret Line="984" Column="53" TopLine="976"/>
|
||||||
|
</Position2>
|
||||||
|
<Position3>
|
||||||
|
<Filename Value="uos_flat.pas"/>
|
||||||
|
<Caret Line="989" Column="19" TopLine="977"/>
|
||||||
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="597" Column="17" TopLine="590"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="uos_flat.pas"/>
|
||||||
|
<Caret Line="8" Column="57"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="9" Column="76"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="82" Column="11" TopLine="67"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="157" Column="45" TopLine="144"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="158" Column="44" TopLine="143"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="3014" Column="51" TopLine="3007"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4212" Column="80" TopLine="4185"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4442" Column="47" TopLine="4424"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4447" Column="31" TopLine="4424"/>
|
||||||
|
</Position13>
|
||||||
|
<Position14>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="111" Column="67" TopLine="111"/>
|
||||||
|
</Position14>
|
||||||
|
<Position15>
|
||||||
|
<Filename Value="uos_flat.pas"/>
|
||||||
|
<Caret Line="580" Column="3" TopLine="568"/>
|
||||||
|
</Position15>
|
||||||
|
<Position16>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="214" Column="15" TopLine="208"/>
|
||||||
|
</Position16>
|
||||||
|
<Position17>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4673" Column="33" TopLine="4654"/>
|
||||||
|
</Position17>
|
||||||
|
<Position18>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4723" Column="42" TopLine="4703"/>
|
||||||
|
</Position18>
|
||||||
|
<Position19>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="214" Column="15" TopLine="202"/>
|
||||||
|
</Position19>
|
||||||
|
<Position20>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4673" Column="33" TopLine="4654"/>
|
||||||
|
</Position20>
|
||||||
|
<Position21>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4723" Column="42" TopLine="4703"/>
|
||||||
|
</Position21>
|
||||||
|
<Position22>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="214" Column="15" TopLine="202"/>
|
||||||
|
</Position22>
|
||||||
|
<Position23>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4676" Column="101" TopLine="4654"/>
|
||||||
|
</Position23>
|
||||||
|
<Position24>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4675" Column="2" TopLine="4654"/>
|
||||||
|
</Position24>
|
||||||
|
<Position25>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<Caret Line="4673" Column="2" TopLine="4663"/>
|
||||||
|
</Position25>
|
||||||
|
<Position26>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="48" Column="41" TopLine="25"/>
|
||||||
|
</Position26>
|
||||||
|
<Position27>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="47" Column="41" TopLine="25"/>
|
||||||
|
</Position27>
|
||||||
|
<Position28>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="262" Column="3" TopLine="249"/>
|
||||||
|
</Position28>
|
||||||
|
<Position29>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="22" Column="25" TopLine="22"/>
|
||||||
|
</Position29>
|
||||||
|
<Position30>
|
||||||
|
<Filename Value="main_di.pas"/>
|
||||||
|
<Caret Line="262" Column="21" TopLine="249"/>
|
||||||
|
</Position30>
|
||||||
|
</JumpHistory>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="deviceinfos"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<UseLineInfoUnit Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<BreakPoints Count="1">
|
||||||
|
<Item1>
|
||||||
|
<Kind Value="bpkSource"/>
|
||||||
|
<WatchScope Value="wpsLocal"/>
|
||||||
|
<WatchKind Value="wpkWrite"/>
|
||||||
|
<Source Value="u_os.pas"/>
|
||||||
|
<Line Value="42"/>
|
||||||
|
</Item1>
|
||||||
|
</BreakPoints>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
22
UOS/examples/deviceinfos.lpr
Normal file
22
UOS/examples/deviceinfos.lpr
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
program deviceinfos;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX} {$IFDEF UseCThreads}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF} {$ENDIF}
|
||||||
|
Interfaces, // this includes the LCL widgetset
|
||||||
|
Forms,
|
||||||
|
main_di { you can add units after this };
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TForm1, Form1);
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
70
UOS/examples/deviceinfos_fpGUI.lpi
Normal file
70
UOS/examples/deviceinfos_fpGUI.lpi
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="10"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<SaveOnlyProjectUnits Value="True"/>
|
||||||
|
<LRSInOutputDirectory Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="UOS Devices Infos"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
</General>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<IgnoreBinaries Value="False"/>
|
||||||
|
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||||
|
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="fpgui_toolkit"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="deviceinfos_fpGUI.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="Device_Infos"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
<CustomOptions Value="-FUunits"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
</CONFIG>
|
||||||
358
UOS/examples/deviceinfos_fpGUI.pas
Normal file
358
UOS/examples/deviceinfos_fpGUI.pas
Normal file
@@ -0,0 +1,358 @@
|
|||||||
|
program deviceinfos_fpGUI;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
cwstring,
|
||||||
|
{$ENDIF}
|
||||||
|
SysUtils,
|
||||||
|
fpg_base,
|
||||||
|
fpg_main,
|
||||||
|
fpg_form,
|
||||||
|
uos_flat,
|
||||||
|
fpg_style_chrome_silver_flatmenu,
|
||||||
|
fpg_stylemanager,
|
||||||
|
Classes,
|
||||||
|
fpg_button,
|
||||||
|
fpg_widget,
|
||||||
|
fpg_label,
|
||||||
|
fpg_Editbtn,
|
||||||
|
fpg_grid { you can add units after this };
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TDevicesInfos = class(TfpgForm)
|
||||||
|
procedure UOS_logo(Sender: TObject);
|
||||||
|
private
|
||||||
|
{@VFD_HEAD_BEGIN: DevicesInfos}
|
||||||
|
infos_grid: TfpgStringGrid;
|
||||||
|
Custom1: TfpgWidget;
|
||||||
|
Labelport: TfpgLabel;
|
||||||
|
btnLoad: TfpgButton;
|
||||||
|
FilenameEdit1: TfpgFileNameEdit;
|
||||||
|
btnReLoad: TfpgButton;
|
||||||
|
Label1: TfpgLabel;
|
||||||
|
Label2: TfpgLabel;
|
||||||
|
Label3: TfpgLabel;
|
||||||
|
{@VFD_HEAD_END: DevicesInfos}
|
||||||
|
public
|
||||||
|
procedure AfterCreate; override;
|
||||||
|
|
||||||
|
procedure btnLoadClick(Sender: TObject);
|
||||||
|
procedure CloseClick(Sender: TObject);
|
||||||
|
procedure btnReLoadClick(Sender: TObject);
|
||||||
|
procedure CheckInfos();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{@VFD_NEWFORM_DECL}
|
||||||
|
|
||||||
|
{@VFD_NEWFORM_IMPL}
|
||||||
|
|
||||||
|
var
|
||||||
|
ordir: string;
|
||||||
|
|
||||||
|
procedure TDevicesInfos.CheckInfos();
|
||||||
|
var
|
||||||
|
x: integer;
|
||||||
|
begin
|
||||||
|
|
||||||
|
UOS_GetInfoDevice();
|
||||||
|
|
||||||
|
label1.Text := 'Devices Count = ' + IntToStr(UOSDeviceCount);
|
||||||
|
|
||||||
|
label2.Text := 'Def Dev IN = ' + IntToStr(UOSDefaultDeviceIN);
|
||||||
|
|
||||||
|
label3.Text := 'Def Dev OUT = ' + IntToStr(UOSDefaultDeviceOUT);
|
||||||
|
|
||||||
|
infos_grid.rowcount := UOSDeviceCount;
|
||||||
|
x := 0;
|
||||||
|
|
||||||
|
while x < UOSDeviceCount do
|
||||||
|
begin
|
||||||
|
|
||||||
|
infos_grid.Cells[0, x] := IntToStr(UOSDeviceInfos[x].DeviceNum);
|
||||||
|
infos_grid.Cells[1, x] := UOSDeviceInfos[x].DeviceName;
|
||||||
|
if UOSDeviceInfos[x].DefaultDevIn = True then
|
||||||
|
infos_grid.Cells[2, x] := 'Yes'
|
||||||
|
else
|
||||||
|
infos_grid.Cells[2, x] := 'No';
|
||||||
|
|
||||||
|
if UOSDeviceInfos[x].DefaultDevOut = True then
|
||||||
|
infos_grid.Cells[3, x] := 'Yes'
|
||||||
|
else
|
||||||
|
infos_grid.Cells[3, x] := 'No';
|
||||||
|
|
||||||
|
infos_grid.Cells[4, x] := IntToStr(UOSDeviceInfos[x].ChannelsIn);
|
||||||
|
infos_grid.Cells[5, x] := IntToStr(UOSDeviceInfos[x].ChannelsOut);
|
||||||
|
infos_grid.Cells[6, x] := floattostrf(UOSDeviceInfos[x].SampleRate, ffFixed, 15, 0);
|
||||||
|
infos_grid.Cells[7, x] := floattostrf(UOSDeviceInfos[x].LatencyHighIn, ffFixed, 15, 8);
|
||||||
|
infos_grid.Cells[8, x] := floattostrf(UOSDeviceInfos[x].LatencyHighOut, ffFixed, 15, 8);
|
||||||
|
infos_grid.Cells[9, x] := floattostrf(UOSDeviceInfos[x].LatencyLowIn, ffFixed, 15, 8);
|
||||||
|
infos_grid.Cells[10, x] := floattostrf(UOSDeviceInfos[x].LatencyLowOut, ffFixed, 15, 8);
|
||||||
|
infos_grid.Cells[11, x] := UOSDeviceInfos[x].HostAPIName;
|
||||||
|
infos_grid.Cells[12, x] := UOSDeviceInfos[x].DeviceType;
|
||||||
|
Inc(x);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TDevicesInfos.CloseClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if btnLoad.Enabled = False then
|
||||||
|
uos_UnloadLib();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TDevicesInfos.btnLoadClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
// Load the library
|
||||||
|
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;
|
||||||
|
if uos_LoadLib(PChar(FilenameEdit1.FileName), nil, nil, nil, nil, nil, nil) = 0 then
|
||||||
|
begin
|
||||||
|
hide;
|
||||||
|
Height := 385;
|
||||||
|
btnReLoad.Enabled := True;
|
||||||
|
btnLoad.Enabled := False;
|
||||||
|
FilenameEdit1.ReadOnly := True;
|
||||||
|
UpdateWindowPosition;
|
||||||
|
btnLoad.Text := 'PortAudio library is loaded...';
|
||||||
|
CheckInfos();
|
||||||
|
WindowPosition := wpScreenCenter;
|
||||||
|
fpgapplication.ProcessMessages;
|
||||||
|
sleep(500);
|
||||||
|
Show;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TDevicesInfos.btnReLoadClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
CheckInfos();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TDevicesInfos.AfterCreate;
|
||||||
|
begin
|
||||||
|
{%region 'Auto-generated GUI code' -fold}
|
||||||
|
|
||||||
|
|
||||||
|
{@VFD_BODY_BEGIN: DevicesInfos}
|
||||||
|
Name := 'DevicesInfos';
|
||||||
|
SetPosition(320, 168, 502, 385);
|
||||||
|
WindowTitle := 'Devices Infos ';
|
||||||
|
Hint := '';
|
||||||
|
BackGroundColor := $80000001;
|
||||||
|
WindowPosition := wpScreenCenter;
|
||||||
|
Ondestroy := @CloseClick;
|
||||||
|
|
||||||
|
infos_grid := TfpgStringGrid.Create(self);
|
||||||
|
with infos_grid do
|
||||||
|
begin
|
||||||
|
Name := 'infos_grid';
|
||||||
|
SetPosition(10, 160, 480, 180);
|
||||||
|
BackgroundColor := TfpgColor($80000002);
|
||||||
|
FontDesc := '#Grid';
|
||||||
|
HeaderFontDesc := '#GridHeader';
|
||||||
|
Hint := '';
|
||||||
|
RowCount := 1;
|
||||||
|
ColumnCount := 0;
|
||||||
|
RowSelect := False;
|
||||||
|
TabOrder := 0;
|
||||||
|
AddColumn('Dev', 40);
|
||||||
|
AddColumn('Name', 200);
|
||||||
|
AddColumn('Default IN', 80);
|
||||||
|
AddColumn('Default OUT', 80);
|
||||||
|
AddColumn('Chan IN', 60);
|
||||||
|
AddColumn('Chan OUT', 60);
|
||||||
|
AddColumn('S Rate', 63);
|
||||||
|
AddColumn('Latency High In', 120);
|
||||||
|
AddColumn('Latency High Out', 120);
|
||||||
|
AddColumn('Latency Low In', 120);
|
||||||
|
AddColumn('Latency Low Out', 120);
|
||||||
|
AddColumn('Host API', 80);
|
||||||
|
AddColumn('Type', 80);
|
||||||
|
DefaultRowHeight := 24;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Custom1 := TfpgWidget.Create(self);
|
||||||
|
with Custom1 do
|
||||||
|
begin
|
||||||
|
Name := 'Custom1';
|
||||||
|
SetPosition(10, 8, 115, 115);
|
||||||
|
OnPaint := @UOS_logo;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Labelport := TfpgLabel.Create(self);
|
||||||
|
with Labelport do
|
||||||
|
begin
|
||||||
|
Name := 'Labelport';
|
||||||
|
SetPosition(136, 40, 320, 15);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
Hint := '';
|
||||||
|
Text := 'Folder + filename of PortAudio Library';
|
||||||
|
end;
|
||||||
|
|
||||||
|
btnLoad := TfpgButton.Create(self);
|
||||||
|
with btnLoad do
|
||||||
|
begin
|
||||||
|
Name := 'btnLoad';
|
||||||
|
SetPosition(16, 128, 470, 23);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
Hint := '';
|
||||||
|
ImageName := '';
|
||||||
|
TabOrder := 0;
|
||||||
|
Text := 'Load that library';
|
||||||
|
onclick := @btnLoadClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FilenameEdit1 := TfpgFileNameEdit.Create(self);
|
||||||
|
with FilenameEdit1 do
|
||||||
|
begin
|
||||||
|
Name := 'FilenameEdit1';
|
||||||
|
SetPosition(136, 56, 356, 24);
|
||||||
|
ExtraHint := '';
|
||||||
|
FileName := '';
|
||||||
|
Filter := '';
|
||||||
|
InitialDir := '';
|
||||||
|
TabOrder := 3;
|
||||||
|
end;
|
||||||
|
|
||||||
|
btnReLoad := TfpgButton.Create(self);
|
||||||
|
with btnReLoad do
|
||||||
|
begin
|
||||||
|
Name := 'btnReLoad';
|
||||||
|
SetPosition(430, 353, 60, 23);
|
||||||
|
Enabled := False;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
Hint := '';
|
||||||
|
ImageName := '';
|
||||||
|
TabOrder := 6;
|
||||||
|
Text := 'Re-load';
|
||||||
|
onclick := @btnReLoadClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Label1 := TfpgLabel.Create(self);
|
||||||
|
with Label1 do
|
||||||
|
begin
|
||||||
|
Name := 'Label1';
|
||||||
|
SetPosition(15, 355, 120, 20);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
Hint := '';
|
||||||
|
Text := 'Devices Count';
|
||||||
|
end;
|
||||||
|
|
||||||
|
Label2 := TfpgLabel.Create(self);
|
||||||
|
with Label2 do
|
||||||
|
begin
|
||||||
|
Name := 'Label2';
|
||||||
|
SetPosition(155, 355, 120, 20);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
Hint := '';
|
||||||
|
Text := 'Default Dev IN';
|
||||||
|
end;
|
||||||
|
|
||||||
|
Label3 := TfpgLabel.Create(self);
|
||||||
|
with Label3 do
|
||||||
|
begin
|
||||||
|
Name := 'Label3';
|
||||||
|
SetPosition(290, 355, 120, 20);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
Hint := '';
|
||||||
|
Text := 'Default Dev OUT';
|
||||||
|
end;
|
||||||
|
|
||||||
|
{@VFD_BODY_END: DevicesInfos}
|
||||||
|
{%endregion}
|
||||||
|
|
||||||
|
//////////////////////
|
||||||
|
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
Height := 157;
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
{$else}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
FilenameEdit1.FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
FilenameEdit1.FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(CPUAMD64)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
{$else}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
{$endif}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
FilenameEdit1.FileName := ordir + '/lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
FilenameEdit1.FileName := ordir + '/lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
{$ENDIF}
|
||||||
|
FilenameEdit1.Initialdir := ordir + 'lib';
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TDevicesInfos.UOS_logo(Sender: TObject);
|
||||||
|
begin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
with Custom1 do
|
||||||
|
begin
|
||||||
|
Canvas.GradientFill(GetClientRect, clgreen, clBlack, gdVertical);
|
||||||
|
Canvas.TextColor := clWhite;
|
||||||
|
Canvas.DrawText(60, 20, 'UOS');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure MainProc;
|
||||||
|
var
|
||||||
|
frm: TDevicesInfos;
|
||||||
|
begin
|
||||||
|
fpgApplication.Initialize;
|
||||||
|
if fpgStyleManager.SetStyle('Chrome silver flat menu') then
|
||||||
|
fpgStyle := fpgStyleManager.Style;
|
||||||
|
frm := TDevicesInfos.Create(nil);
|
||||||
|
try
|
||||||
|
frm.Show;
|
||||||
|
fpgApplication.Run;
|
||||||
|
finally
|
||||||
|
uos_free;
|
||||||
|
frm.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
MainProc;
|
||||||
|
end.
|
||||||
|
|
||||||
2166
UOS/examples/deviceinfos_fpGUI.prj
Normal file
2166
UOS/examples/deviceinfos_fpGUI.prj
Normal file
File diff suppressed because it is too large
Load Diff
574
UOS/examples/filterplayer.lpi
Normal file
574
UOS/examples/filterplayer.lpi
Normal file
@@ -0,0 +1,574 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<General>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="filterplayer"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
<UseXPManifest Value="True"/>
|
||||||
|
<XPManifest>
|
||||||
|
<DpiAware Value="True"/>
|
||||||
|
</XPManifest>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<CustomData Count="15">
|
||||||
|
<Item0 Name="lazpackager/copyright" Value="2012 Fred van Stappen"/>
|
||||||
|
<Item1 Name="lazpackager/deb/ppa" Value="ppa:fiens/uos"/>
|
||||||
|
<Item2 Name="lazpackager/deb/series" Value="precise"/>
|
||||||
|
<Item3 Name="lazpackager/deb/tpl_changelog" Value="?PACKAGE_NAME? (?FULLVERSION?) ?SERIES?; urgency=low
|
||||||
|
|
||||||
|
* Original version ?VERSION? packaged with lazdebian
|
||||||
|
|
||||||
|
-- ?MAINTAINER? <?MAINTAINER_EMAIL?> ?DATER?
|
||||||
|
"/>
|
||||||
|
<Item4 Name="lazpackager/deb/tpl_control" Value="Source: ?PACKAGE_NAME?
|
||||||
|
Maintainer: ?MAINTAINER? <?MAINTAINER_EMAIL?>
|
||||||
|
Section: misc
|
||||||
|
Priority: optional
|
||||||
|
Standards-Version: 3.9.3
|
||||||
|
Build-Depends: fpc, lcl, lcl-utils, lazarus, debhelper (>= 8)
|
||||||
|
|
||||||
|
Package: ?PACKAGE_NAME?
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends},
|
||||||
|
Description: ?DESCRIPTION?
|
||||||
|
?DESCRIPTION_LONG?
|
||||||
|
"/>
|
||||||
|
<Item5 Name="lazpackager/deb/tpl_copyright" Value="Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: ?COPYRIGHT?
|
||||||
|
License: GPL-2+
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
at your option) any later version.
|
||||||
|
.
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
.
|
||||||
|
On Debian systems, the full text of the GNU General Public
|
||||||
|
License version 2 can be found in the file
|
||||||
|
/usr/share/common-licenses/GPL-2
|
||||||
|
"/>
|
||||||
|
<Item6 Name="lazpackager/deb/tpl_rules" Value="#!/usr/bin/make -f
|
||||||
|
|
||||||
|
# see http://www.debian.org/doc/manuals/maint-guide/dreq.en.html
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
||||||
|
dh_auto_build -- PREFIX=/usr
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
dh_auto_install -- PREFIX=/usr
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
"/>
|
||||||
|
<Item7 Name="lazpackager/description" Value="United Openlib of Sound"/>
|
||||||
|
<Item8 Name="lazpackager/description_long" Value="United Openlib of Sound is a Pascal linker for Portaudio, Sndfile and MPG123 audio libraries.
|
||||||
|
With UOS audio life is easier..."/>
|
||||||
|
<Item9 Name="lazpackager/export_cmd" Value="?CP? *.lpi ?TEMPFOLDER?/
|
||||||
|
?CP? *.lpr ?TEMPFOLDER?/
|
||||||
|
?CP? *.pas ?TEMPFOLDER?/
|
||||||
|
?CP? *.lfm ?TEMPFOLDER?/
|
||||||
|
?CP? *.ico ?TEMPFOLDER?/
|
||||||
|
"/>
|
||||||
|
<Item10 Name="lazpackager/maintainer" Value="Fred van Stappen"/>
|
||||||
|
<Item11 Name="lazpackager/maintainer_email" Value="fiens@hotmail.com"/>
|
||||||
|
<Item12 Name="lazpackager/package_name" Value="united_openlib_sound"/>
|
||||||
|
<Item13 Name="lazpackager/tpl_makefile" Value="PREFIX = /usr/local
|
||||||
|
|
||||||
|
# debuild will set DESTDIR to the fakeroot path and
|
||||||
|
# in the override rules we will change PREFIX to /usr
|
||||||
|
BINDIR = $(DESTDIR)$(PREFIX)/bin
|
||||||
|
|
||||||
|
.PHONY : all
|
||||||
|
all:
|
||||||
|
lazbuild ?PROJECT?
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
clean:
|
||||||
|
$(RM) -r lib
|
||||||
|
$(RM) *.res
|
||||||
|
$(RM) ?EXECUTABLE?
|
||||||
|
|
||||||
|
.PHONY : install
|
||||||
|
install:
|
||||||
|
mkdir -p $(BINDIR)
|
||||||
|
install -s ?EXECUTABLE? $(BINDIR)/
|
||||||
|
"/>
|
||||||
|
<Item14 Name="lazpackager/use_existing_makefile" Value="False"/>
|
||||||
|
</CustomData>
|
||||||
|
<BuildModes Count="1" Active="Default">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<FormatVersion Value="2"/>
|
||||||
|
<Modes Count="1">
|
||||||
|
<Mode0 Name="default"/>
|
||||||
|
</Modes>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="42">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="filterplayer.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<CursorPos X="3" Y="7"/>
|
||||||
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<IsVisibleTab Value="True"/>
|
||||||
|
<EditorIndex Value="1"/>
|
||||||
|
<TopLine Value="477"/>
|
||||||
|
<CursorPos X="12" Y="495"/>
|
||||||
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
<LoadedDesigner Value="True"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="lazdyn_portaudio.pas"/>
|
||||||
|
<TopLine Value="60"/>
|
||||||
|
<CursorPos X="10" Y="60"/>
|
||||||
|
<UsageCount Value="97"/>
|
||||||
|
</Unit2>
|
||||||
|
<Unit3>
|
||||||
|
<Filename Value="Lazdyn_SoundTouch.pas"/>
|
||||||
|
<CursorPos X="59" Y="12"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit3>
|
||||||
|
<Unit4>
|
||||||
|
<Filename Value="u_os.pas"/>
|
||||||
|
<TopLine Value="445"/>
|
||||||
|
<CursorPos X="10" Y="402"/>
|
||||||
|
<UsageCount Value="82"/>
|
||||||
|
</Unit4>
|
||||||
|
<Unit5>
|
||||||
|
<Filename Value="../firstprognew/mainmixxl.pas"/>
|
||||||
|
<TopLine Value="4347"/>
|
||||||
|
<CursorPos X="9" Y="4364"/>
|
||||||
|
<UsageCount Value="1"/>
|
||||||
|
</Unit5>
|
||||||
|
<Unit6>
|
||||||
|
<Filename Value="../dynmpg123/waveutils.pas"/>
|
||||||
|
<TopLine Value="3"/>
|
||||||
|
<CursorPos X="45" Y="43"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit6>
|
||||||
|
<Unit7>
|
||||||
|
<Filename Value="kPGtest.pas"/>
|
||||||
|
<TopLine Value="111"/>
|
||||||
|
<CursorPos X="32" Y="128"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit7>
|
||||||
|
<Unit8>
|
||||||
|
<Filename Value="kPGtestSF.pas"/>
|
||||||
|
<TopLine Value="27"/>
|
||||||
|
<CursorPos X="29" Y="32"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit8>
|
||||||
|
<Unit9>
|
||||||
|
<Filename Value="lazdyn_mpg123.pas"/>
|
||||||
|
<TopLine Value="103"/>
|
||||||
|
<CursorPos X="83" Y="113"/>
|
||||||
|
<UsageCount Value="97"/>
|
||||||
|
</Unit9>
|
||||||
|
<Unit10>
|
||||||
|
<Filename Value="../OpenC2Pas/src/main.pas"/>
|
||||||
|
<TopLine Value="193"/>
|
||||||
|
<CursorPos Y="232"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit10>
|
||||||
|
<Unit11>
|
||||||
|
<Filename Value="lazdyn_libsndfile.pas"/>
|
||||||
|
<TopLine Value="288"/>
|
||||||
|
<CursorPos X="24" Y="305"/>
|
||||||
|
<UsageCount Value="97"/>
|
||||||
|
</Unit11>
|
||||||
|
<Unit12>
|
||||||
|
<Filename Value="../U_OS_Test (copie)/u_os.pas"/>
|
||||||
|
<TopLine Value="72"/>
|
||||||
|
<CursorPos X="34" Y="236"/>
|
||||||
|
<UsageCount Value="2"/>
|
||||||
|
</Unit12>
|
||||||
|
<Unit13>
|
||||||
|
<Filename Value="PA_SF_MP.pas"/>
|
||||||
|
<TopLine Value="77"/>
|
||||||
|
<CursorPos X="20" Y="10"/>
|
||||||
|
<UsageCount Value="4"/>
|
||||||
|
</Unit13>
|
||||||
|
<Unit14>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/fpcsrc/rtl/objpas/sysutils/sysstrh.inc"/>
|
||||||
|
<TopLine Value="100"/>
|
||||||
|
<CursorPos X="10" Y="112"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit14>
|
||||||
|
<Unit15>
|
||||||
|
<Filename Value="../lazarus64/examples/multithreading/mainunit.pas"/>
|
||||||
|
<TopLine Value="70"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit15>
|
||||||
|
<Unit16>
|
||||||
|
<Filename Value="../lazarus64/examples/pascalstream/componentstreampas.pas"/>
|
||||||
|
<TopLine Value="33"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit16>
|
||||||
|
<Unit17>
|
||||||
|
<Filename Value="../firstprognewssbpm/mainmixxl.pas"/>
|
||||||
|
<ComponentName Value="MiXimumLP"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<TopLine Value="2775"/>
|
||||||
|
<CursorPos X="20" Y="2792"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit17>
|
||||||
|
<Unit18>
|
||||||
|
<Filename Value="/media/Windows7/dynsndfile/libsndfilestrings.pas"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit18>
|
||||||
|
<Unit19>
|
||||||
|
<Filename Value="/media/Windows7/dynsndfile/lazdyn_libsndfile.pas"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit19>
|
||||||
|
<Unit20>
|
||||||
|
<Filename Value="../logouos/unit1.pas"/>
|
||||||
|
<TopLine Value="67"/>
|
||||||
|
<CursorPos X="51" Y="83"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit20>
|
||||||
|
<Unit21>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/lazarus/lcl/graphics.pp"/>
|
||||||
|
<TopLine Value="1168"/>
|
||||||
|
<CursorPos X="49" Y="1181"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit21>
|
||||||
|
<Unit22>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/fpcsrc/rtl/objpas/objpas.pp"/>
|
||||||
|
<TopLine Value="119"/>
|
||||||
|
<CursorPos X="8" Y="28"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit22>
|
||||||
|
<Unit23>
|
||||||
|
<Filename Value="uos.pas"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<TopLine Value="2987"/>
|
||||||
|
<CursorPos X="33" Y="2987"/>
|
||||||
|
<UsageCount Value="100"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit23>
|
||||||
|
<Unit24>
|
||||||
|
<Filename Value="uos_new.pas"/>
|
||||||
|
<TopLine Value="310"/>
|
||||||
|
<CursorPos X="29" Y="478"/>
|
||||||
|
<UsageCount Value="81"/>
|
||||||
|
</Unit24>
|
||||||
|
<Unit25>
|
||||||
|
<Filename Value="../firstprognew/bass.pas"/>
|
||||||
|
<TopLine Value="810"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit25>
|
||||||
|
<Unit26>
|
||||||
|
<Filename Value="../onenamevar/unit1.pas"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<TopLine Value="81"/>
|
||||||
|
<CursorPos X="44" Y="100"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit26>
|
||||||
|
<Unit27>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/lazarus/packager/registration/fcllaz.pas"/>
|
||||||
|
<CursorPos Y="4"/>
|
||||||
|
<UsageCount Value="3"/>
|
||||||
|
</Unit27>
|
||||||
|
<Unit28>
|
||||||
|
<Filename Value="../lazarus32/packager/registration/fcllaz.pas"/>
|
||||||
|
<UsageCount Value="3"/>
|
||||||
|
</Unit28>
|
||||||
|
<Unit29>
|
||||||
|
<Filename Value="../U_OS_Testnewonetype/uos.pas"/>
|
||||||
|
<TopLine Value="444"/>
|
||||||
|
<CursorPos X="79" Y="452"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit29>
|
||||||
|
<Unit30>
|
||||||
|
<Filename Value="/media/Windows7/UOS/uos.pas"/>
|
||||||
|
<TopLine Value="747"/>
|
||||||
|
<CursorPos X="5" Y="750"/>
|
||||||
|
<UsageCount Value="4"/>
|
||||||
|
</Unit30>
|
||||||
|
<Unit31>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/lazarus/components/codetools/codebeautifier.pas"/>
|
||||||
|
<TopLine Value="405"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit31>
|
||||||
|
<Unit32>
|
||||||
|
<Filename Value="../dynportaudio/mainunitsine.pas"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<TopLine Value="463"/>
|
||||||
|
<CursorPos Y="483"/>
|
||||||
|
<UsageCount Value="18"/>
|
||||||
|
</Unit32>
|
||||||
|
<Unit33>
|
||||||
|
<Filename Value="../dynportaudio/unit1.pas"/>
|
||||||
|
<TopLine Value="81"/>
|
||||||
|
<CursorPos X="16" Y="91"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit33>
|
||||||
|
<Unit34>
|
||||||
|
<Filename Value="filterplayer_fpGUI.lpr"/>
|
||||||
|
<TopLine Value="727"/>
|
||||||
|
<CursorPos X="21" Y="731"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit34>
|
||||||
|
<Unit35>
|
||||||
|
<Filename Value="../../development/lazarus/lcl/stdctrls.pp"/>
|
||||||
|
<TopLine Value="1050"/>
|
||||||
|
<CursorPos X="24" Y="1065"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit35>
|
||||||
|
<Unit36>
|
||||||
|
<Filename Value="main_sp.pas"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="317"/>
|
||||||
|
<CursorPos X="104" Y="333"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit36>
|
||||||
|
<Unit37>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/typhon/lcl/interfaces/gtk2/gtk2wsforms.pp"/>
|
||||||
|
<UnitName Value="Gtk2WSForms"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="1002"/>
|
||||||
|
<CursorPos X="8" Y="1016"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit37>
|
||||||
|
<Unit38>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/typhon/ide/sourcefilemanager.pas"/>
|
||||||
|
<UnitName Value="SourceFileManager"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="241"/>
|
||||||
|
<CursorPos X="4" Y="255"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit38>
|
||||||
|
<Unit39>
|
||||||
|
<Filename Value="/usr/lib/codetyphon/typhon/lcl/customtimer.pas"/>
|
||||||
|
<UnitName Value="CustomTimer"/>
|
||||||
|
<EditorIndex Value="-1"/>
|
||||||
|
<TopLine Value="146"/>
|
||||||
|
<CursorPos X="24" Y="160"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit39>
|
||||||
|
<Unit40>
|
||||||
|
<Filename Value="uos_flat.pas"/>
|
||||||
|
<EditorIndex Value="2"/>
|
||||||
|
<TopLine Value="112"/>
|
||||||
|
<CursorPos X="22" Y="119"/>
|
||||||
|
<UsageCount Value="12"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit40>
|
||||||
|
<Unit41>
|
||||||
|
<Filename Value="define.inc"/>
|
||||||
|
<EditorIndex Value="4"/>
|
||||||
|
<CursorPos X="3" Y="16"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit41>
|
||||||
|
</Units>
|
||||||
|
<JumpHistory Count="30" HistoryIndex="29">
|
||||||
|
<Position1>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="363" Column="19" TopLine="358"/>
|
||||||
|
</Position1>
|
||||||
|
<Position2>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="206" Column="23" TopLine="195"/>
|
||||||
|
</Position2>
|
||||||
|
<Position3>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="102" Column="3" TopLine="98"/>
|
||||||
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="238" Column="3" TopLine="234"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="221" Column="3" TopLine="217"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="142" TopLine="121"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="221" Column="4" TopLine="214"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="237" Column="4" TopLine="232"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="81" Column="28" TopLine="72"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="241" Column="2" TopLine="231"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="177" Column="3" TopLine="177"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="220" Column="4" TopLine="215"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="238" Column="4" TopLine="233"/>
|
||||||
|
</Position13>
|
||||||
|
<Position14>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="390" Column="16" TopLine="375"/>
|
||||||
|
</Position14>
|
||||||
|
<Position15>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="469" TopLine="451"/>
|
||||||
|
</Position15>
|
||||||
|
<Position16>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="272" Column="15" TopLine="250"/>
|
||||||
|
</Position16>
|
||||||
|
<Position17>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="255" TopLine="222"/>
|
||||||
|
</Position17>
|
||||||
|
<Position18>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="91" Column="3" TopLine="91"/>
|
||||||
|
</Position18>
|
||||||
|
<Position19>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="416" Column="87" TopLine="409"/>
|
||||||
|
</Position19>
|
||||||
|
<Position20>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="205" Column="26" TopLine="198"/>
|
||||||
|
</Position20>
|
||||||
|
<Position21>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="204" Column="16" TopLine="198"/>
|
||||||
|
</Position21>
|
||||||
|
<Position22>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="206" Column="16" TopLine="200"/>
|
||||||
|
</Position22>
|
||||||
|
<Position23>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="222" Column="3" TopLine="200"/>
|
||||||
|
</Position23>
|
||||||
|
<Position24>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="223" Column="3" TopLine="201"/>
|
||||||
|
</Position24>
|
||||||
|
<Position25>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="224" Column="3" TopLine="202"/>
|
||||||
|
</Position25>
|
||||||
|
<Position26>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="261" Column="25" TopLine="254"/>
|
||||||
|
</Position26>
|
||||||
|
<Position27>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="262" Column="12" TopLine="243"/>
|
||||||
|
</Position27>
|
||||||
|
<Position28>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="122" Column="45" TopLine="122"/>
|
||||||
|
</Position28>
|
||||||
|
<Position29>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="288" TopLine="272"/>
|
||||||
|
</Position29>
|
||||||
|
<Position30>
|
||||||
|
<Filename Value="main_fp.pas"/>
|
||||||
|
<Caret Line="123" TopLine="101"/>
|
||||||
|
</Position30>
|
||||||
|
</JumpHistory>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="FilterPlayer"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<SmallerCode Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<UseExternalDbgSyms Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<BreakPoints Count="1">
|
||||||
|
<Item1>
|
||||||
|
<Kind Value="bpkSource"/>
|
||||||
|
<WatchScope Value="wpsLocal"/>
|
||||||
|
<WatchKind Value="wpkWrite"/>
|
||||||
|
<Source Value="u_os.pas"/>
|
||||||
|
<Line Value="42"/>
|
||||||
|
</Item1>
|
||||||
|
</BreakPoints>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
22
UOS/examples/filterplayer.lpr
Normal file
22
UOS/examples/filterplayer.lpr
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
program filterplayer;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX} {$IFDEF UseCThreads}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF} {$ENDIF}
|
||||||
|
Interfaces, // this includes the LCL widgetset
|
||||||
|
Forms,
|
||||||
|
main_fp { you can add units after this };
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TForm1, Form1);
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
73
UOS/examples/filterplayer_fpGUI.lpi
Normal file
73
UOS/examples/filterplayer_fpGUI.lpi
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<SaveOnlyProjectUnits Value="True"/>
|
||||||
|
<LRSInOutputDirectory Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="UOS Simple Filter fpGUI"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
</General>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<IgnoreBinaries Value="False"/>
|
||||||
|
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||||
|
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="fpgui_toolkit"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="filterplayer_fpGUI.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="FilterPlayer_FPG"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<WriteFPCLogo Value="False"/>
|
||||||
|
<CustomOptions Value="-FUunits"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
</CONFIG>
|
||||||
942
UOS/examples/filterplayer_fpGUI.pas
Normal file
942
UOS/examples/filterplayer_fpGUI.pas
Normal file
@@ -0,0 +1,942 @@
|
|||||||
|
program filterplayer_fpGUI;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
{$DEFINE UseCThreads}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX} {$IFDEF UseCThreads}
|
||||||
|
cthreads,
|
||||||
|
cwstring, {$ENDIF} {$ENDIF}
|
||||||
|
SysUtils,
|
||||||
|
uos_flat,
|
||||||
|
fpg_style_chrome_silver_flatmenu,
|
||||||
|
fpg_stylemanager,
|
||||||
|
ctypes,
|
||||||
|
Math,
|
||||||
|
Classes,
|
||||||
|
fpg_button,
|
||||||
|
fpg_edit,
|
||||||
|
fpg_widget,
|
||||||
|
fpg_label,
|
||||||
|
fpg_Editbtn,
|
||||||
|
fpg_RadioButton,
|
||||||
|
fpg_trackbar,
|
||||||
|
fpg_CheckBox,
|
||||||
|
fpg_base,
|
||||||
|
fpg_main,
|
||||||
|
fpg_form { you can add units after this };
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TFilterplayer = class(TfpgForm)
|
||||||
|
procedure uos_logo(Sender: TObject);
|
||||||
|
private
|
||||||
|
{@VFD_HEAD_BEGIN: Filterplayer}
|
||||||
|
Custom1: TfpgWidget;
|
||||||
|
Labelport: TfpgLabel;
|
||||||
|
btnLoad: TfpgButton;
|
||||||
|
FilenameEdit1: TfpgFileNameEdit;
|
||||||
|
FilenameEdit2: TfpgFileNameEdit;
|
||||||
|
FilenameEdit4: TfpgFileNameEdit;
|
||||||
|
btnStart: TfpgButton;
|
||||||
|
btnStop: TfpgButton;
|
||||||
|
lposition: TfpgLabel;
|
||||||
|
Labelsnf: TfpgLabel;
|
||||||
|
Labelmpg: TfpgLabel;
|
||||||
|
FilenameEdit3: TfpgFileNameEdit;
|
||||||
|
Llength: TfpgLabel;
|
||||||
|
btnpause: TfpgButton;
|
||||||
|
btnresume: TfpgButton;
|
||||||
|
CheckBox1: TfpgCheckBox;
|
||||||
|
RadioButton1: TfpgRadioButton;
|
||||||
|
RadioButton2: TfpgRadioButton;
|
||||||
|
RadioButton3: TfpgRadioButton;
|
||||||
|
Label2: TfpgLabel;
|
||||||
|
TrackBar1: TfpgTrackBar;
|
||||||
|
TrackBar2: TfpgTrackBar;
|
||||||
|
TrackBar3: TfpgTrackBar;
|
||||||
|
Label3: TfpgLabel;
|
||||||
|
Label4: TfpgLabel;
|
||||||
|
Label5: TfpgLabel;
|
||||||
|
RadioButton4: TfpgRadioButton;
|
||||||
|
Edit1: TfpgEdit;
|
||||||
|
Edit2: TfpgEdit;
|
||||||
|
CheckBox2: TfpgCheckBox;
|
||||||
|
{@VFD_HEAD_END: Filterplayer}
|
||||||
|
public
|
||||||
|
procedure AfterCreate; override;
|
||||||
|
procedure btnLoadClick(Sender: TObject);
|
||||||
|
procedure btnCloseClick(Sender: TObject);
|
||||||
|
procedure btnStartClick(Sender: TObject);
|
||||||
|
procedure btnStopClick(Sender: TObject);
|
||||||
|
procedure btnResumeClick(Sender: TObject);
|
||||||
|
procedure btnPauseClick(Sender: TObject);
|
||||||
|
procedure TrackBar3Change(Sender: TObject; tmp: integer);
|
||||||
|
procedure TrackBar2Change(Sender: TObject; tmp: integer);
|
||||||
|
procedure TrackBar1Change(Sender: TObject; tmp: integer);
|
||||||
|
procedure RadioButton1Change(Sender: TObject);
|
||||||
|
procedure CheckBox1Change(Sender: TObject);
|
||||||
|
procedure TrackBar3proc;
|
||||||
|
procedure TrackBar2proc;
|
||||||
|
procedure TrackBar1proc;
|
||||||
|
|
||||||
|
procedure ClosePlayer1;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
{@VFD_NEWFORM_DECL}
|
||||||
|
|
||||||
|
{@VFD_NEWFORM_IMPL}
|
||||||
|
|
||||||
|
var
|
||||||
|
|
||||||
|
PlayerIndex1: cardinal;
|
||||||
|
ordir, opath: string;
|
||||||
|
Out1Index, In1Index, EQIndex1, EQIndex2, EQIndex3, FTIndex1: integer;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TFilterplayer.btnResumeClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
uos_RePlay(PlayerIndex1);
|
||||||
|
btnStart.Enabled := False;
|
||||||
|
btnStop.Enabled := True;
|
||||||
|
btnPause.Enabled := True;
|
||||||
|
btnresume.Enabled := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.btnPauseClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
uos_Pause(PlayerIndex1);
|
||||||
|
btnStart.Enabled := False;
|
||||||
|
btnStop.Enabled := True;
|
||||||
|
btnPause.Enabled := False;
|
||||||
|
btnresume.Enabled := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TFilterplayer.btnCloseClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (btnstart.Enabled = False) then
|
||||||
|
begin
|
||||||
|
uos_stop(PlayerIndex1);
|
||||||
|
sleep(100);
|
||||||
|
end;
|
||||||
|
if btnLoad.Enabled = False then
|
||||||
|
uos_UnloadLib();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.btnLoadClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
str: string;
|
||||||
|
begin
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
// For Linux amd64, check libsndfile.so
|
||||||
|
if (FilenameEdit2.FileName <> 'system') and (FilenameEdit2.FileName <> '') then
|
||||||
|
if uos_TestLoadLibrary(PChar(FilenameEdit2.FileName)) = false then
|
||||||
|
FilenameEdit2.FileName := FilenameEdit2.FileName + '.2';
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
// Load the libraries
|
||||||
|
// function uos_LoadLib(PortAudioFileName: PChar; SndF // function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename, libxmpfilename: PChar) : LongInt;ileFileName: PChar; Mpg123FileName, opusfilefilename: PChar) : integer;
|
||||||
|
if uos_LoadLib(PChar(FilenameEdit1.FileName), PChar(FilenameEdit2.FileName), PChar(FilenameEdit3.FileName), nil, nil, nil, nil) = 0 then
|
||||||
|
begin
|
||||||
|
hide;
|
||||||
|
Height := 345;
|
||||||
|
btnStart.Enabled := True;
|
||||||
|
btnLoad.Enabled := False;
|
||||||
|
FilenameEdit1.ReadOnly := True;
|
||||||
|
FilenameEdit2.ReadOnly := True;
|
||||||
|
FilenameEdit3.ReadOnly := True;
|
||||||
|
UpdateWindowPosition;
|
||||||
|
btnLoad.Text := 'PortAudio, SndFile and Mpg123 libraries are loaded...';
|
||||||
|
WindowPosition := wpScreenCenter;
|
||||||
|
fpgapplication.ProcessMessages;
|
||||||
|
sleep(500);
|
||||||
|
Show;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.ClosePlayer1;
|
||||||
|
begin
|
||||||
|
radiobutton1.Enabled := True;
|
||||||
|
radiobutton2.Enabled := True;
|
||||||
|
radiobutton3.Enabled := True;
|
||||||
|
radiobutton4.Enabled := True;
|
||||||
|
btnStart.Enabled := True;
|
||||||
|
btnStop.Enabled := False;
|
||||||
|
btnPause.Enabled := False;
|
||||||
|
btnresume.Enabled := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.btnStopClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
uos_Stop(PlayerIndex1);
|
||||||
|
closeplayer1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.btnStartClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
EqGain: double;
|
||||||
|
typfilt: shortint;
|
||||||
|
begin
|
||||||
|
|
||||||
|
PlayerIndex1 := 0; // PlayerIndex : from 0 to what your computer can do ! (depends of ram, cpu, ...)
|
||||||
|
// If PlayerIndex exists already, it will be overwritten...
|
||||||
|
|
||||||
|
{$IF (FPC_FULLVERSION>=20701) or DEFINED(LCL) or DEFINED(consoleapp) or DEFINED(Library) or DEFINED(Windows)}
|
||||||
|
uos_CreatePlayer(PlayerIndex1);
|
||||||
|
{$else}
|
||||||
|
uos_CreatePlayer(PlayerIndex1,sender);
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
//// Create the player.
|
||||||
|
//// PlayerIndex : from 0 to what your computer can do !
|
||||||
|
//// If PlayerIndex exists already, it will be overwriten...
|
||||||
|
In1Index := uos_AddFromFile(PlayerIndex1, PChar(filenameEdit4.filename), -1, 0, -1);
|
||||||
|
//// add input from audio file with custom parameters
|
||||||
|
////////// FileName : filename of audio file
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
////////// OutputIndex : OutputIndex of existing Output // -1 : all output, -2: no output, other integer : existing output)
|
||||||
|
////////// SampleFormat : -1 default : Int16 : (0: Float32, 1:Int32, 2:Int16) SampleFormat of Input can be <= SampleFormat float of Output
|
||||||
|
//////////// FramesCount : default : -1 (65536)
|
||||||
|
// result : -1 nothing created, otherwise Input Index in array
|
||||||
|
|
||||||
|
{$if defined(cpuarm) or defined(cpuaarch64)} // need a lower latency
|
||||||
|
Out1Index :=uos_AddIntoDevOut(PlayerIndex1, -1, 0.3, uos_InputGetSampleRate(PlayerIndex1, In1Index), -1, 0, -1, -1);
|
||||||
|
{$else}
|
||||||
|
Out1Index := uos_AddIntoDevOut(PlayerIndex1, -1, -1, uos_InputGetSampleRate(PlayerIndex1, In1Index), -1, 0, -1, -1);
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
//// add a Output into device with custom parameters
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
//////////// Device ( -1 is default Output device )
|
||||||
|
//////////// Latency ( -1 is latency suggested ) )
|
||||||
|
//////////// SampleRate : delault : -1 (44100)
|
||||||
|
//////////// Channels : delault : -1 (2:stereo) (0: no channels, 1:mono, 2:stereo, ...)
|
||||||
|
//////////// SampleFormat : -1 default : Int16 : (0: Float32, 1:Int32, 2:Int16)
|
||||||
|
//////////// FramesCount : default : -1 (= 65536)
|
||||||
|
// ChunkCount : default : -1 (= 512)
|
||||||
|
|
||||||
|
EQIndex1 := uos_InputAddFilter(PlayerIndex1, In1Index,
|
||||||
|
1, 50, 800, 1,
|
||||||
|
1, 50, 800, 1, True, nil);
|
||||||
|
// Player Index add filter
|
||||||
|
// InputIndex : InputIndex of a existing Input
|
||||||
|
// TypeFilterL: Type of filter left:
|
||||||
|
// ( -1 = current filter ) (fBandAll = 0, fBandSelect = 1, fBandReject = 2
|
||||||
|
// fBandPass = 3, fLowPass = 4, fHighPass = 5)
|
||||||
|
// LowFrequencyL : Lowest frequency left( -1 : current LowFrequency )
|
||||||
|
// HighFrequencyL : Highest frequency left( -1 : current HighFrequency )
|
||||||
|
// GainL : gain left to apply to filter
|
||||||
|
// TypeFilterR: Type of filter right (ignored if mono):
|
||||||
|
// ( -1 = current filter ) (fBandAll = 0, fBandSelect = 1, fBandReject = 2
|
||||||
|
// LowFrequencyR : Lowest frequency Right (ignored if mono) ( -1 : current LowFrequency )
|
||||||
|
// HighFrequencyR : Highest frequency left( -1 : current HighFrequency )
|
||||||
|
// GainR : gain right (ignored if mono) to apply to filter ( 0 to what reasonable )
|
||||||
|
// AlsoBuf : The filter alter buffer aswell ( otherwise, only result is filled in fft.data )
|
||||||
|
// result : index of DSPIn in array
|
||||||
|
|
||||||
|
EQIndex2 := uos_InputAddFilter(PlayerIndex1, In1Index, 1, 801, 3000, 1,
|
||||||
|
1, 801, 3000, 1, True, nil);
|
||||||
|
|
||||||
|
EQIndex3 := uos_InputAddFilter(PlayerIndex1, In1Index, 1, 3001, 10000, 1,
|
||||||
|
1, 3001, 10000, 1, True, nil);
|
||||||
|
|
||||||
|
if radiobutton1.Checked = True then
|
||||||
|
typfilt := 2;
|
||||||
|
if radiobutton2.Checked = True then
|
||||||
|
typfilt := 3;
|
||||||
|
if radiobutton3.Checked = True then
|
||||||
|
typfilt := 5;
|
||||||
|
if radiobutton4.Checked = True then
|
||||||
|
typfilt := 4;
|
||||||
|
|
||||||
|
FTIndex1 := uos_InputAddFilter(PlayerIndex1, In1Index,
|
||||||
|
typfilt, StrToInt(edit2.Text), StrToInt(edit1.Text), 1,
|
||||||
|
typfilt, StrToInt(edit2.Text), StrToInt(edit1.Text), 1,
|
||||||
|
True, nil);
|
||||||
|
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, FTIndex1, -1, -1, -1, -1, -1, -1, -1, -1, True, nil, checkbox2.Checked);
|
||||||
|
|
||||||
|
// InputIndex : InputIndex of a existing Input
|
||||||
|
// DSPInIndex : DSPInIndex of existing DSPIn
|
||||||
|
// TypeFilterL: Type of filter left:
|
||||||
|
// ( -1 = current filter ) (fBandAll = 0, fBandSelect = 1, fBandReject = 2
|
||||||
|
// fBandPass = 3, fLowPass = 4, fHighPass = 5)
|
||||||
|
// LowFrequencyL : Lowest frequency left( -1 : current LowFrequency )
|
||||||
|
// HighFrequencyL : Highest frequency left( -1 : current HighFrequency )
|
||||||
|
// GainL : gain left to apply to filter
|
||||||
|
// TypeFilterR: Type of filter right (ignored if mono):
|
||||||
|
// ( -1 = current filter ) (fBandAll = 0, fBandSelect = 1, fBandReject = 2
|
||||||
|
// LowFrequencyR : Lowest frequency Right (ignored if mono) ( -1 : current LowFrequency )
|
||||||
|
// HighFrequencyR : Highest frequency left( -1 : current HighFrequency )
|
||||||
|
// GainR : gain right (ignored if mono) to apply to filter ( 0 to what reasonable )
|
||||||
|
// AlsoBuf : The filter alter buffer aswell ( otherwise, only result is filled in fft.data )
|
||||||
|
// LoopProc : external procedure of object to synchronize after DSP done
|
||||||
|
// Enable : Filter enabled
|
||||||
|
|
||||||
|
uos_EndProc(PlayerIndex1, @ClosePlayer1);
|
||||||
|
///// Assign the procedure of object to execute at end
|
||||||
|
//////////// PlayerIndex : Index of a existing Player
|
||||||
|
//////////// ClosePlayer1 : procedure of object to execute inside the loop
|
||||||
|
/////// procedure to execute when stream is terminated
|
||||||
|
|
||||||
|
uos_Play(PlayerIndex1); /////// everything is ready, here we are, lets play it...
|
||||||
|
|
||||||
|
btnStart.Enabled := False;
|
||||||
|
btnPause.Enabled := True;
|
||||||
|
btnResume.Enabled := False;
|
||||||
|
btnStop.Enabled := True;
|
||||||
|
|
||||||
|
TrackBar1proc;
|
||||||
|
TrackBar2proc;
|
||||||
|
TrackBar3proc;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.CheckBox1Change(Sender: TObject);
|
||||||
|
begin
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, EQIndex1, -1, -1, -1, -1, -1, -1, -1, -1, True, nil, checkbox1.Checked);
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, EQIndex2, -1, -1, -1, -1, -1, -1, -1, -1, True, nil, checkbox1.Checked);
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, EQIndex3, -1, -1, -1, -1, -1, -1, -1, -1, True, nil, checkbox1.Checked);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.RadioButton1Change(Sender: TObject);
|
||||||
|
var
|
||||||
|
typfilt: shortint;
|
||||||
|
begin
|
||||||
|
if radiobutton1.Checked = True then
|
||||||
|
typfilt := 2;
|
||||||
|
if radiobutton2.Checked = True then
|
||||||
|
typfilt := 3;
|
||||||
|
if radiobutton3.Checked = True then
|
||||||
|
typfilt := 5;
|
||||||
|
if radiobutton4.Checked = True then
|
||||||
|
typfilt := 4;
|
||||||
|
|
||||||
|
// if (btnstart.Enabled = False) then
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, FTIndex1,
|
||||||
|
typfilt, StrToInt(edit2.Text), StrToInt(edit1.Text), 1,
|
||||||
|
typfilt, StrToInt(edit2.Text), StrToInt(edit1.Text), 1,
|
||||||
|
True, nil, checkbox2.Checked);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.TrackBar3proc;
|
||||||
|
var
|
||||||
|
gain: double;
|
||||||
|
tracpos: integer;
|
||||||
|
begin
|
||||||
|
tracpos := -1 * trackBar3.Position;
|
||||||
|
|
||||||
|
if (tracpos) = 0 then
|
||||||
|
gain := 1
|
||||||
|
else if tracpos > 0 then
|
||||||
|
gain := 1 + (tracpos / 20)
|
||||||
|
else
|
||||||
|
gain := ((100 + tracpos) / 100);
|
||||||
|
// if (btnStart.Enabled = true) then
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, EQIndex3, -1, -1, -1, Gain, -1, -1, -1, Gain,
|
||||||
|
True, nil, checkbox1.Checked);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.TrackBar2proc;
|
||||||
|
var
|
||||||
|
gain: double;
|
||||||
|
tracpos: integer;
|
||||||
|
begin
|
||||||
|
tracpos := -1 * trackBar2.Position;
|
||||||
|
|
||||||
|
if (tracpos) = 0 then
|
||||||
|
gain := 1
|
||||||
|
else if tracpos > 0 then
|
||||||
|
gain := 1 + (tracpos / 33)
|
||||||
|
else
|
||||||
|
gain := ((100 + tracpos) / 100);
|
||||||
|
|
||||||
|
// if (btnStart.Enabled = true) then
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, EQIndex2, -1, -1, -1, Gain, -1, -1, -1, Gain,
|
||||||
|
True, nil, checkbox1.Checked);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.TrackBar1proc;
|
||||||
|
var
|
||||||
|
gain: double;
|
||||||
|
tracpos: integer;
|
||||||
|
begin
|
||||||
|
tracpos := -1 * trackBar1.Position;
|
||||||
|
|
||||||
|
if (tracpos) = 0 then
|
||||||
|
gain := 1
|
||||||
|
else if tracpos > 0 then
|
||||||
|
gain := 1 + (tracpos / 33)
|
||||||
|
else
|
||||||
|
gain := ((100 + tracpos) / 100);
|
||||||
|
// if (btnStart.Enabled = true) then
|
||||||
|
|
||||||
|
// if (btnStart.Enabled = true) then
|
||||||
|
uos_InputSetFilter(PlayerIndex1, In1Index, EQIndex1, -1, -1, -1, Gain, -1, -1, -1, Gain,
|
||||||
|
True, nil, checkbox1.Checked);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.TrackBar1Change(Sender: TObject; tmp: integer);
|
||||||
|
begin
|
||||||
|
TrackBar1proc;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TFilterplayer.TrackBar2Change(Sender: TObject; tmp: integer);
|
||||||
|
begin
|
||||||
|
Trackbar2proc;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.TrackBar3Change(Sender: TObject; tmp: integer);
|
||||||
|
begin
|
||||||
|
trackbar3proc;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TFilterplayer.AfterCreate;
|
||||||
|
begin
|
||||||
|
{%region 'Auto-generated GUI code' -fold}
|
||||||
|
|
||||||
|
{@VFD_BODY_BEGIN: Filterplayer}
|
||||||
|
Name := 'Filterplayer';
|
||||||
|
SetPosition(419, 72, 502, 371);
|
||||||
|
WindowTitle := 'Filter player ';
|
||||||
|
IconName := '';
|
||||||
|
BackGroundColor := $80000001;
|
||||||
|
Hint := '';
|
||||||
|
WindowPosition := wpScreenCenter;
|
||||||
|
Ondestroy := @btnCloseClick;
|
||||||
|
|
||||||
|
Custom1 := TfpgWidget.Create(self);
|
||||||
|
with Custom1 do
|
||||||
|
begin
|
||||||
|
Name := 'Custom1';
|
||||||
|
SetPosition(10, 8, 115, 115);
|
||||||
|
OnPaint := @uos_logo;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Labelport := TfpgLabel.Create(self);
|
||||||
|
with Labelport do
|
||||||
|
begin
|
||||||
|
Name := 'Labelport';
|
||||||
|
SetPosition(136, 0, 320, 15);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'Folder + filename of PortAudio Library';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
btnLoad := TfpgButton.Create(self);
|
||||||
|
with btnLoad do
|
||||||
|
begin
|
||||||
|
Name := 'btnLoad';
|
||||||
|
SetPosition(16, 128, 476, 23);
|
||||||
|
Text := 'Load that libraries';
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ImageName := '';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 0;
|
||||||
|
Hint := '';
|
||||||
|
onclick := @btnLoadClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FilenameEdit1 := TfpgFileNameEdit.Create(self);
|
||||||
|
with FilenameEdit1 do
|
||||||
|
begin
|
||||||
|
Name := 'FilenameEdit1';
|
||||||
|
SetPosition(136, 16, 356, 24);
|
||||||
|
ExtraHint := '';
|
||||||
|
FileName := '';
|
||||||
|
Filter := '';
|
||||||
|
InitialDir := '';
|
||||||
|
TabOrder := 3;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FilenameEdit2 := TfpgFileNameEdit.Create(self);
|
||||||
|
with FilenameEdit2 do
|
||||||
|
begin
|
||||||
|
Name := 'FilenameEdit2';
|
||||||
|
SetPosition(136, 56, 356, 24);
|
||||||
|
ExtraHint := '';
|
||||||
|
FileName := '';
|
||||||
|
Filter := '';
|
||||||
|
InitialDir := '';
|
||||||
|
TabOrder := 4;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FilenameEdit4 := TfpgFileNameEdit.Create(self);
|
||||||
|
with FilenameEdit4 do
|
||||||
|
begin
|
||||||
|
Name := 'FilenameEdit4';
|
||||||
|
SetPosition(16, 280, 472, 24);
|
||||||
|
ExtraHint := '';
|
||||||
|
FileName := '';
|
||||||
|
Filter := '';
|
||||||
|
InitialDir := '';
|
||||||
|
TabOrder := 5;
|
||||||
|
end;
|
||||||
|
|
||||||
|
btnStart := TfpgButton.Create(self);
|
||||||
|
with btnStart do
|
||||||
|
begin
|
||||||
|
Name := 'btnStart';
|
||||||
|
SetPosition(104, 312, 44, 23);
|
||||||
|
Text := 'Play';
|
||||||
|
Enabled := False;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ImageName := '';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 6;
|
||||||
|
Hint := '';
|
||||||
|
onclick := @btnstartClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
btnStop := TfpgButton.Create(self);
|
||||||
|
with btnStop do
|
||||||
|
begin
|
||||||
|
Name := 'btnStop';
|
||||||
|
SetPosition(316, 312, 80, 23);
|
||||||
|
Text := 'Stop';
|
||||||
|
Enabled := False;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ImageName := '';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 7;
|
||||||
|
Hint := '';
|
||||||
|
onclick := @btnStopClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
lposition := TfpgLabel.Create(self);
|
||||||
|
with lposition do
|
||||||
|
begin
|
||||||
|
Name := 'lposition';
|
||||||
|
SetPosition(372, 157, 104, 19);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'High Frequency';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
Labelsnf := TfpgLabel.Create(self);
|
||||||
|
with Labelsnf do
|
||||||
|
begin
|
||||||
|
Name := 'Labelsnf';
|
||||||
|
SetPosition(140, 40, 316, 15);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'Folder + filename of SndFile Library';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
Labelmpg := TfpgLabel.Create(self);
|
||||||
|
with Labelmpg do
|
||||||
|
begin
|
||||||
|
Name := 'Labelmpg';
|
||||||
|
SetPosition(136, 80, 316, 15);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'Folder + filename of Mpg123 Library';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
FilenameEdit3 := TfpgFileNameEdit.Create(self);
|
||||||
|
with FilenameEdit3 do
|
||||||
|
begin
|
||||||
|
Name := 'FilenameEdit3';
|
||||||
|
SetPosition(136, 96, 356, 24);
|
||||||
|
ExtraHint := '';
|
||||||
|
FileName := '';
|
||||||
|
Filter := '';
|
||||||
|
InitialDir := '';
|
||||||
|
TabOrder := 12;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Llength := TfpgLabel.Create(self);
|
||||||
|
with Llength do
|
||||||
|
begin
|
||||||
|
Name := 'Llength';
|
||||||
|
SetPosition(376, 201, 104, 15);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'Low Frequency';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
btnpause := TfpgButton.Create(self);
|
||||||
|
with btnpause do
|
||||||
|
begin
|
||||||
|
Name := 'btnpause';
|
||||||
|
SetPosition(164, 312, 52, 23);
|
||||||
|
Text := 'Pause';
|
||||||
|
Enabled := False;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ImageName := '';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 15;
|
||||||
|
Hint := '';
|
||||||
|
onclick := @btnPauseClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
btnresume := TfpgButton.Create(self);
|
||||||
|
with btnresume do
|
||||||
|
begin
|
||||||
|
Name := 'btnresume';
|
||||||
|
SetPosition(232, 312, 64, 23);
|
||||||
|
Text := 'Resume';
|
||||||
|
Enabled := False;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ImageName := '';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 16;
|
||||||
|
Hint := '';
|
||||||
|
onclick := @btnResumeClick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
CheckBox1 := TfpgCheckBox.Create(self);
|
||||||
|
with CheckBox1 do
|
||||||
|
begin
|
||||||
|
Name := 'CheckBox1';
|
||||||
|
SetPosition(32, 252, 156, 19);
|
||||||
|
Checked := True;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 17;
|
||||||
|
Text := 'Enable Equalizer';
|
||||||
|
Hint := '';
|
||||||
|
onchange := @CheckBox1Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
RadioButton1 := TfpgRadioButton.Create(self);
|
||||||
|
with RadioButton1 do
|
||||||
|
begin
|
||||||
|
Name := 'RadioButton1';
|
||||||
|
SetPosition(216, 176, 96, 19);
|
||||||
|
Checked := True;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
GroupIndex := 0;
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 18;
|
||||||
|
Text := 'BandReject';
|
||||||
|
Hint := '';
|
||||||
|
onchange := @RadioButton1Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
RadioButton2 := TfpgRadioButton.Create(self);
|
||||||
|
with RadioButton2 do
|
||||||
|
begin
|
||||||
|
Name := 'RadioButton2';
|
||||||
|
SetPosition(216, 200, 100, 19);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
GroupIndex := 0;
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 19;
|
||||||
|
Text := 'BandPass';
|
||||||
|
Hint := '';
|
||||||
|
onchange := @RadioButton1Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
RadioButton3 := TfpgRadioButton.Create(self);
|
||||||
|
with RadioButton3 do
|
||||||
|
begin
|
||||||
|
Name := 'RadioButton3';
|
||||||
|
SetPosition(216, 246, 100, 19);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
GroupIndex := 0;
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 20;
|
||||||
|
Text := 'HighPass';
|
||||||
|
Hint := '';
|
||||||
|
onchange := @RadioButton1Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Label2 := TfpgLabel.Create(self);
|
||||||
|
with Label2 do
|
||||||
|
begin
|
||||||
|
Name := 'Label2';
|
||||||
|
SetPosition(220, 160, 72, 19);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'Filters';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
TrackBar1 := TfpgTrackBar.Create(self);
|
||||||
|
with TrackBar1 do
|
||||||
|
begin
|
||||||
|
Name := 'TrackBar1';
|
||||||
|
SetPosition(24, 160, 36, 74);
|
||||||
|
Max := 100;
|
||||||
|
min := -100;
|
||||||
|
Orientation := orVertical;
|
||||||
|
ParentShowHint := False;
|
||||||
|
Position := 0;
|
||||||
|
TabOrder := 22;
|
||||||
|
Hint := '';
|
||||||
|
onchange := @TrackBar1Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TrackBar2 := TfpgTrackBar.Create(self);
|
||||||
|
with TrackBar2 do
|
||||||
|
begin
|
||||||
|
Name := 'TrackBar2';
|
||||||
|
SetPosition(80, 160, 32, 74);
|
||||||
|
Max := 100;
|
||||||
|
min := -100;
|
||||||
|
Orientation := orVertical;
|
||||||
|
ParentShowHint := False;
|
||||||
|
Position := 0;
|
||||||
|
TabOrder := 23;
|
||||||
|
Hint := '';
|
||||||
|
onchange := @TrackBar2Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TrackBar3 := TfpgTrackBar.Create(self);
|
||||||
|
with TrackBar3 do
|
||||||
|
begin
|
||||||
|
Name := 'TrackBar3';
|
||||||
|
SetPosition(136, 160, 28, 74);
|
||||||
|
Max := 100;
|
||||||
|
min := -100;
|
||||||
|
Orientation := orVertical;
|
||||||
|
ParentShowHint := False;
|
||||||
|
Position := 0;
|
||||||
|
TabOrder := 24;
|
||||||
|
Hint := '';
|
||||||
|
onchange := @TrackBar3Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Label3 := TfpgLabel.Create(self);
|
||||||
|
with Label3 do
|
||||||
|
begin
|
||||||
|
Name := 'Label3';
|
||||||
|
SetPosition(68, 232, 52, 15);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'Medium';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
Label4 := TfpgLabel.Create(self);
|
||||||
|
with Label4 do
|
||||||
|
begin
|
||||||
|
Name := 'Label4';
|
||||||
|
SetPosition(20, 232, 40, 15);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'Low';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
Label5 := TfpgLabel.Create(self);
|
||||||
|
with Label5 do
|
||||||
|
begin
|
||||||
|
Name := 'Label5';
|
||||||
|
SetPosition(128, 232, 36, 19);
|
||||||
|
Alignment := taCenter;
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
Text := 'High';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
RadioButton4 := TfpgRadioButton.Create(self);
|
||||||
|
with RadioButton4 do
|
||||||
|
begin
|
||||||
|
Name := 'RadioButton4';
|
||||||
|
SetPosition(216, 224, 92, 19);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
GroupIndex := 0;
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 28;
|
||||||
|
Text := 'LowPass';
|
||||||
|
Hint := '';
|
||||||
|
onchange := @RadioButton1Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Edit1 := TfpgEdit.Create(self);
|
||||||
|
with Edit1 do
|
||||||
|
begin
|
||||||
|
Name := 'Edit1';
|
||||||
|
SetPosition(368, 172, 116, 24);
|
||||||
|
ExtraHint := '';
|
||||||
|
FontDesc := '#Edit1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 29;
|
||||||
|
Text := '15000';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
Edit2 := TfpgEdit.Create(self);
|
||||||
|
with Edit2 do
|
||||||
|
begin
|
||||||
|
Name := 'Edit2';
|
||||||
|
SetPosition(368, 216, 116, 24);
|
||||||
|
ExtraHint := '';
|
||||||
|
FontDesc := '#Edit1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 29;
|
||||||
|
Text := '5000';
|
||||||
|
Hint := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
CheckBox2 := TfpgCheckBox.Create(self);
|
||||||
|
with CheckBox2 do
|
||||||
|
begin
|
||||||
|
Name := 'CheckBox2';
|
||||||
|
SetPosition(368, 244, 120, 19);
|
||||||
|
FontDesc := '#Label1';
|
||||||
|
ParentShowHint := False;
|
||||||
|
TabOrder := 30;
|
||||||
|
Text := 'Enable Filter';
|
||||||
|
Hint := '';
|
||||||
|
onchange := @RadioButton1Change;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{@VFD_BODY_END: Filterplayer}
|
||||||
|
{%endregion}
|
||||||
|
|
||||||
|
//////////////////////
|
||||||
|
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
RadioButton1.Checked := True;
|
||||||
|
Height := 157;
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
FilenameEdit2.FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
FilenameEdit3.FileName := ordir + 'lib\Windows\64bit\LibMpg123-64.dll';
|
||||||
|
{$else}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
FilenameEdit2.FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
FilenameEdit3.FileName := ordir + 'lib\Windows\32bit\LibMpg123-32.dll';
|
||||||
|
{$endif}
|
||||||
|
FilenameEdit4.FileName := ordir + 'sound\test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/uos', opath) - 1);
|
||||||
|
FilenameEdit1.FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
FilenameEdit2.FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
FilenameEdit3.FileName := opath + '/lib/Mac/32bit/LibMpg123-32.dylib';
|
||||||
|
FilenameEdit4.FileName := opath + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
{$IFDEF CPU32}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
FilenameEdit1.FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
FilenameEdit2.FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
FilenameEdit3.FileName := opath + '/lib/Mac/32bit/LibMpg123-32.dylib';
|
||||||
|
FilenameEdit4.FileName := opath + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF CPU64}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
FilenameEdit2.FileName := opath + '/lib/Mac/64bit/LibSndFile-64.dylib';
|
||||||
|
FilenameEdit3.FileName := opath + '/lib/Mac/64bit/LibMpg123-64.dylib';
|
||||||
|
FilenameEdit4.FileName := opath + 'sound/test.mp3';
|
||||||
|
FilenameEdit1.FileName := opath + '/lib/Mac/64bit/LibPortaudio-64.dylib';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
FilenameEdit2.FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
FilenameEdit3.FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
FilenameEdit4.FileName := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
FilenameEdit2.FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
FilenameEdit3.FileName := ordir + 'lib/Linux/32bit/LibMpg123-32.so';
|
||||||
|
FilenameEdit4.FileName := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
FilenameEdit1 := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
FilenameEdit2 := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
FilenameEdit3 := ordir + 'lib/Linux/aarch64_raspberrypi/libmpg123_aarch64.so';
|
||||||
|
FilenameEdit4 := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
FilenameEdit2.FileName := ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
FilenameEdit3.FileName := ordir + 'lib/Linux/arm_raspberrypi/libmpg123-arm.so';
|
||||||
|
FilenameEdit4.FileName := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
FilenameEdit2.FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
FilenameEdit3.FileName := ordir + 'lib/FreeBSD/64bit/libmpg123-64.so';
|
||||||
|
{$else}
|
||||||
|
FilenameEdit1.FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-64.so';
|
||||||
|
FilenameEdit2.FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-64.so';
|
||||||
|
FilenameEdit3.FileName := ordir + 'lib/FreeBSD/32bit/libmpg123-64.so';
|
||||||
|
{$endif}
|
||||||
|
FilenameEdit4.FileName := ordir + 'sound/test.mp3';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
FilenameEdit4.Initialdir := ordir + 'sound';
|
||||||
|
FilenameEdit1.Initialdir := ordir + 'lib';
|
||||||
|
FilenameEdit2.Initialdir := ordir + 'lib';
|
||||||
|
FilenameEdit3.Initialdir := ordir + 'lib';
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFilterplayer.uos_logo(Sender: TObject);
|
||||||
|
var
|
||||||
|
xpos, ypos, pbwidth, pbheight: integer;
|
||||||
|
ratio: double;
|
||||||
|
begin
|
||||||
|
xpos := 0;
|
||||||
|
ypos := 0;
|
||||||
|
ratio := 1;
|
||||||
|
pbwidth := 115;
|
||||||
|
pbheight := 115;
|
||||||
|
with Custom1 do
|
||||||
|
begin
|
||||||
|
Canvas.GradientFill(GetClientRect, clgreen, clBlack, gdVertical);
|
||||||
|
Canvas.TextColor := clWhite;
|
||||||
|
Canvas.DrawText(60, 20, 'uos');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure MainProc;
|
||||||
|
var
|
||||||
|
frm: TFilterplayer;
|
||||||
|
begin
|
||||||
|
fpgApplication.Initialize;
|
||||||
|
if fpgStyleManager.SetStyle('Chrome silver flat menu') then
|
||||||
|
fpgStyle := fpgStyleManager.Style;
|
||||||
|
frm := TFilterplayer.Create(nil);
|
||||||
|
try
|
||||||
|
frm.Show;
|
||||||
|
fpgApplication.Run;
|
||||||
|
finally
|
||||||
|
uos_free;
|
||||||
|
frm.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
MainProc;
|
||||||
|
end.
|
||||||
|
|
||||||
2129
UOS/examples/filterplayer_fpGUI.prj
Normal file
2129
UOS/examples/filterplayer_fpGUI.prj
Normal file
File diff suppressed because it is too large
Load Diff
149
UOS/examples/formspectrum.lpi
Normal file
149
UOS/examples/formspectrum.lpi
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="12"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<CompatibilityMode Value="True"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<Title Value="formspectrum"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
<UseXPManifest Value="True"/>
|
||||||
|
<XPManifest>
|
||||||
|
<DpiAware Value="True"/>
|
||||||
|
</XPManifest>
|
||||||
|
</General>
|
||||||
|
<BuildModes Count="3">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
<Item2 Name="Debug">
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="formspectrum"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Parsing>
|
||||||
|
<SyntaxOptions>
|
||||||
|
<IncludeAssertionCode Value="True"/>
|
||||||
|
</SyntaxOptions>
|
||||||
|
</Parsing>
|
||||||
|
<CodeGeneration>
|
||||||
|
<Checks>
|
||||||
|
<IOChecks Value="True"/>
|
||||||
|
<RangeChecks Value="True"/>
|
||||||
|
<OverflowChecks Value="True"/>
|
||||||
|
<StackChecks Value="True"/>
|
||||||
|
</Checks>
|
||||||
|
<VerifyObjMethodCallValidity Value="True"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<DebugInfoType Value="dsDwarf2Set"/>
|
||||||
|
<UseHeaptrc Value="True"/>
|
||||||
|
<TrashVariables Value="True"/>
|
||||||
|
<UseExternalDbgSyms Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
</CompilerOptions>
|
||||||
|
</Item2>
|
||||||
|
<Item3 Name="Release">
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="formspectrum"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<Optimizations>
|
||||||
|
<OptimizationLevel Value="3"/>
|
||||||
|
</Optimizations>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
</CompilerOptions>
|
||||||
|
</Item3>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<DestinationDirectory Value="c:\uos_filter"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<FormatVersion Value="2"/>
|
||||||
|
<Modes Count="1">
|
||||||
|
<Mode0 Name="default"/>
|
||||||
|
</Modes>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="2">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="formspectrum.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="formspectrum_unit.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="Form1"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
</Unit1>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="formspectrum"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="units"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<Optimizations>
|
||||||
|
<OptimizationLevel Value="2"/>
|
||||||
|
</Optimizations>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
</CompilerOptions>
|
||||||
|
</CONFIG>
|
||||||
23
UOS/examples/formspectrum.lpr
Normal file
23
UOS/examples/formspectrum.lpr
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
program formspectrum;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}
|
||||||
|
Interfaces, // this includes the LCL widgetset
|
||||||
|
Forms, formspectrum_unit
|
||||||
|
{ you can add units after this };
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
// RequireDerivedFormResource:=True;
|
||||||
|
// Application.Scaled:=True;
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TForm1, Form1);
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
|
|
||||||
12
UOS/examples/formspectrum_mse.pas
Normal file
12
UOS/examples/formspectrum_mse.pas
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
program formspectrum_mse;
|
||||||
|
{$ifdef FPC}{$mode objfpc}{$h+}{$endif}
|
||||||
|
{$ifdef FPC}
|
||||||
|
{$ifdef mswindows}{$apptype gui}{$endif}
|
||||||
|
{$endif}
|
||||||
|
uses
|
||||||
|
{$ifdef FPC}{$ifdef unix} cthreads,{$endif}{$endif}
|
||||||
|
msegui,main_spectrum_mse;
|
||||||
|
begin
|
||||||
|
application.createform(tmainfo,mainfo);
|
||||||
|
application.run;
|
||||||
|
end.
|
||||||
1594
UOS/examples/formspectrum_mse.prj
Normal file
1594
UOS/examples/formspectrum_mse.prj
Normal file
File diff suppressed because it is too large
Load Diff
161
UOS/examples/formspectrum_unit.lfm
Normal file
161
UOS/examples/formspectrum_unit.lfm
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
object Form1: TForm1
|
||||||
|
Left = 477
|
||||||
|
Height = 258
|
||||||
|
Top = 265
|
||||||
|
Width = 268
|
||||||
|
Caption = 'Filter Spectrum'
|
||||||
|
ClientHeight = 258
|
||||||
|
ClientWidth = 268
|
||||||
|
OnActivate = FormActivate
|
||||||
|
OnDestroy = FormDestroy
|
||||||
|
LCLVersion = '3.0.0.3'
|
||||||
|
object ProgressBar2: TProgressBar
|
||||||
|
Left = 44
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object ProgressBar3: TProgressBar
|
||||||
|
Left = 67
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object ProgressBar4: TProgressBar
|
||||||
|
Left = 90
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
object ProgressBar5: TProgressBar
|
||||||
|
Left = 113
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
object ProgressBar6: TProgressBar
|
||||||
|
Left = 136
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 4
|
||||||
|
end
|
||||||
|
object ProgressBar7: TProgressBar
|
||||||
|
Left = 158
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 5
|
||||||
|
end
|
||||||
|
object ProgressBar8: TProgressBar
|
||||||
|
Left = 181
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 6
|
||||||
|
end
|
||||||
|
object ProgressBar9: TProgressBar
|
||||||
|
Left = 204
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 7
|
||||||
|
end
|
||||||
|
object ProgressBar10: TProgressBar
|
||||||
|
Left = 227
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 8
|
||||||
|
end
|
||||||
|
object Button1: TButton
|
||||||
|
Left = 164
|
||||||
|
Height = 17
|
||||||
|
Top = 7
|
||||||
|
Width = 45
|
||||||
|
Caption = 'Start'
|
||||||
|
TabOrder = 9
|
||||||
|
OnClick = Button1Click
|
||||||
|
end
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 262
|
||||||
|
Height = 1
|
||||||
|
Top = 76
|
||||||
|
Width = 1
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
object FileNameEdit1: TFileNameEdit
|
||||||
|
Left = 7
|
||||||
|
Height = 27
|
||||||
|
Top = 0
|
||||||
|
Width = 156
|
||||||
|
FileName = 'FileNameEdit1'
|
||||||
|
FilterIndex = 0
|
||||||
|
HideDirectories = False
|
||||||
|
ButtonWidth = 23
|
||||||
|
NumGlyphs = 1
|
||||||
|
MaxLength = 0
|
||||||
|
TabOrder = 10
|
||||||
|
Text = 'FileNameEdit1'
|
||||||
|
end
|
||||||
|
object Button2: TButton
|
||||||
|
Left = 213
|
||||||
|
Height = 17
|
||||||
|
Top = 7
|
||||||
|
Width = 45
|
||||||
|
Caption = 'Stop'
|
||||||
|
TabOrder = 11
|
||||||
|
OnClick = Button2Click
|
||||||
|
end
|
||||||
|
object ProgressBar1: TProgressBar
|
||||||
|
Left = 21
|
||||||
|
Height = 228
|
||||||
|
Top = 28
|
||||||
|
Width = 19
|
||||||
|
Orientation = pbVertical
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Smooth = True
|
||||||
|
TabOrder = 12
|
||||||
|
end
|
||||||
|
end
|
||||||
287
UOS/examples/formspectrum_unit.pas
Normal file
287
UOS/examples/formspectrum_unit.pas
Normal file
@@ -0,0 +1,287 @@
|
|||||||
|
unit formspectrum_unit;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes,
|
||||||
|
ctypes,
|
||||||
|
SysUtils,
|
||||||
|
uos_flat,
|
||||||
|
Forms,
|
||||||
|
Controls,
|
||||||
|
Graphics,
|
||||||
|
Dialogs,
|
||||||
|
ComCtrls,
|
||||||
|
StdCtrls,
|
||||||
|
EditBtn, Types;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TForm1 }
|
||||||
|
|
||||||
|
TForm1 = class(TForm)
|
||||||
|
Button1: TButton;
|
||||||
|
Button2: TButton;
|
||||||
|
FileNameEdit1: TFileNameEdit;
|
||||||
|
Label1: TLabel;
|
||||||
|
ProgressBar10: TProgressBar;
|
||||||
|
ProgressBar1: TProgressBar;
|
||||||
|
ProgressBar2: TProgressBar;
|
||||||
|
ProgressBar3: TProgressBar;
|
||||||
|
ProgressBar4: TProgressBar;
|
||||||
|
ProgressBar5: TProgressBar;
|
||||||
|
ProgressBar6: TProgressBar;
|
||||||
|
ProgressBar7: TProgressBar;
|
||||||
|
ProgressBar8: TProgressBar;
|
||||||
|
ProgressBar9: TProgressBar;
|
||||||
|
procedure Button1Click(Sender: TObject);
|
||||||
|
procedure Button2Click(Sender: TObject);
|
||||||
|
procedure FormActivate(Sender: TObject);
|
||||||
|
procedure closeplayer;
|
||||||
|
procedure FormDestroy(Sender: TObject);
|
||||||
|
procedure LoopProcPlayer;
|
||||||
|
procedure endprocedure;
|
||||||
|
private
|
||||||
|
|
||||||
|
public
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
equalizer_band_type = record
|
||||||
|
lo_freq, hi_freq: integer;
|
||||||
|
Text: string[10];
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
|
||||||
|
Equalizer_Bands: array[1..10] of equalizer_band_type;
|
||||||
|
|
||||||
|
|
||||||
|
Form1: TForm1;
|
||||||
|
|
||||||
|
res, x, y, z: integer;
|
||||||
|
thearray: array of cfloat;
|
||||||
|
ordir, opath, SoundFilename, PA_FileName, SF_FileName, MP_FileName: string;
|
||||||
|
PlayerIndex1, InputIndex1, OutputIndex1: integer;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{ TForm1 }
|
||||||
|
procedure TForm1.ClosePlayer;
|
||||||
|
begin
|
||||||
|
button1.Enabled := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.FormDestroy(Sender: TObject);
|
||||||
|
begin
|
||||||
|
uos_stop(0);
|
||||||
|
uos_free();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.LoopProcPlayer;
|
||||||
|
var
|
||||||
|
i, v: integer;
|
||||||
|
begin
|
||||||
|
if uos_getstatus(PlayerIndex1) > 0 then
|
||||||
|
begin
|
||||||
|
i := 1;
|
||||||
|
thearray := uos_InputFiltersGetLevelArray(PlayerIndex1, InputIndex1);
|
||||||
|
x := 0;
|
||||||
|
while x < length(thearray) - 1 do
|
||||||
|
begin
|
||||||
|
if i <= 10 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
v := trunc((thearray[x] + thearray[x + 1]) * 50);
|
||||||
|
|
||||||
|
TProgressBar(findcomponent('ProgressBar' + IntToStr(i))).position := v;
|
||||||
|
end;
|
||||||
|
x := x + 2;
|
||||||
|
Inc(i);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.Button1Click(Sender: TObject);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
|
||||||
|
PlayerIndex1 := 0;
|
||||||
|
|
||||||
|
if uos_CreatePlayer(PlayerIndex1) then
|
||||||
|
begin
|
||||||
|
SoundFilename := FileNameEdit1.FileName;
|
||||||
|
|
||||||
|
InputIndex1 := uos_AddFromFile(PlayerIndex1, (PChar(SoundFilename)), -1, -1, 4096);
|
||||||
|
if InputIndex1 > -1 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
OutputIndex1 := uos_AddIntoDevOut(PlayerIndex1, -1, 0.3, -1, -1, -1, 4096, -1);
|
||||||
|
if OutputIndex1 > -1 then
|
||||||
|
begin
|
||||||
|
// Spectrum : create bandpass filters with alsobuf set to false, how many you want:
|
||||||
|
for i := 1 to 10 do
|
||||||
|
uos_InputAddFilter(PlayerIndex1, InputIndex1,
|
||||||
|
3, Equalizer_Bands[i].lo_freq, Equalizer_Bands[i].hi_freq, 1,
|
||||||
|
3, Equalizer_Bands[i].lo_freq, Equalizer_Bands[i].hi_freq, 1, False, nil);
|
||||||
|
|
||||||
|
uos_Endproc(PlayerIndex1,@endprocedure);
|
||||||
|
|
||||||
|
uos_LoopProcIn(PlayerIndex1, InputIndex1, @LoopProcPlayer);
|
||||||
|
/////// everything is ready, here we are, lets play it...
|
||||||
|
|
||||||
|
|
||||||
|
uos_Play(PlayerIndex1);
|
||||||
|
Button1.Enabled := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.Button2Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
uos_stop(PlayerIndex1);
|
||||||
|
Button1.Enabled := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.endprocedure;
|
||||||
|
begin
|
||||||
|
Button1.Enabled := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.FormActivate(Sender: TObject);
|
||||||
|
var
|
||||||
|
i: integer = 1;
|
||||||
|
begin
|
||||||
|
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
|
||||||
|
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
|
||||||
|
MP_FileName := ordir + 'lib\Windows\64bit\LibMpg123-64.dll';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
|
||||||
|
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
|
||||||
|
MP_FileName := ordir + 'lib\Windows\32bit\LibMpg123-32.dll';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound\test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(CPUAMD64) and defined(linux) }
|
||||||
|
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
|
||||||
|
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/64bit/LibMpg123-64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(cpu86) and defined(linux)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/32bit/LibMpg123-32.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuaarch64)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libportaudio_aarch64.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/aarch64_raspberrypi/libmpg123_aarch64.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$if defined(linux) and defined(cpuarm)}
|
||||||
|
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
|
||||||
|
SF_FileName := ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
|
||||||
|
MP_FileName := ordir + 'lib/Linux/arm_raspberrypi/libmpg123-arm.so';
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF freebsd}
|
||||||
|
{$if defined(cpu64)}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
|
||||||
|
MP_FileName := ordir + 'lib/FreeBSD/64bit/libmpg123-64.so';
|
||||||
|
{$else}
|
||||||
|
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
|
||||||
|
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
|
||||||
|
MP_FileName := ordir + 'lib/FreeBSD/32bit/libmpg123-32.so';
|
||||||
|
{$endif}
|
||||||
|
SoundFilename := ordir + 'sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Darwin}
|
||||||
|
opath := ordir;
|
||||||
|
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
|
||||||
|
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
|
||||||
|
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
|
||||||
|
MP_FileName := ordir + 'lib/Mac/32bit/LibMpg123-32.dylib';
|
||||||
|
SoundFilename := opath + '/sound/test.ogg';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$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}
|
||||||
|
|
||||||
|
FileNameEdit1.FileName := SoundFilename;
|
||||||
|
|
||||||
|
res := uos_LoadLib(PChar(PA_FileName), PChar(SF_FileName), PChar(MP_FileName), nil, nil, nil, nil);
|
||||||
|
if Res <> 0 then
|
||||||
|
begin
|
||||||
|
label1.Caption := 'UOS library in Error';
|
||||||
|
Button1.Enabled := False;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Button1.Enabled := True;
|
||||||
|
|
||||||
|
Equalizer_Bands[1].lo_freq := 18;
|
||||||
|
Equalizer_Bands[1].hi_freq := 46;
|
||||||
|
Equalizer_Bands[1].Text := '31.25';
|
||||||
|
Equalizer_Bands[2].lo_freq := 47;
|
||||||
|
Equalizer_Bands[2].hi_freq := 94;
|
||||||
|
Equalizer_Bands[2].Text := '62.5';
|
||||||
|
Equalizer_Bands[3].lo_freq := 95;
|
||||||
|
Equalizer_Bands[3].hi_freq := 188;
|
||||||
|
Equalizer_Bands[3].Text := '125';
|
||||||
|
Equalizer_Bands[4].lo_freq := 189;
|
||||||
|
Equalizer_Bands[4].hi_freq := 375;
|
||||||
|
Equalizer_Bands[4].Text := '250';
|
||||||
|
Equalizer_Bands[5].lo_freq := 376;
|
||||||
|
Equalizer_Bands[5].hi_freq := 750;
|
||||||
|
Equalizer_Bands[5].Text := '500';
|
||||||
|
Equalizer_Bands[6].lo_freq := 751;
|
||||||
|
Equalizer_Bands[6].hi_freq := 1500;
|
||||||
|
Equalizer_Bands[6].Text := '1K';
|
||||||
|
Equalizer_Bands[7].lo_freq := 1501;
|
||||||
|
Equalizer_Bands[7].hi_freq := 3000;
|
||||||
|
Equalizer_Bands[7].Text := '2K';
|
||||||
|
Equalizer_Bands[8].lo_freq := 3001;
|
||||||
|
Equalizer_Bands[8].hi_freq := 6000;
|
||||||
|
Equalizer_Bands[8].Text := '4K';
|
||||||
|
Equalizer_Bands[9].lo_freq := 6001;
|
||||||
|
Equalizer_Bands[9].hi_freq := 12000;
|
||||||
|
Equalizer_Bands[9].Text := '8K';
|
||||||
|
Equalizer_Bands[10].lo_freq := 12001;
|
||||||
|
Equalizer_Bands[10].hi_freq := 20000;
|
||||||
|
Equalizer_Bands[10].Text := '16K';
|
||||||
|
|
||||||
|
|
||||||
|
while i < 11 do
|
||||||
|
begin
|
||||||
|
TProgressBar(findcomponent('ProgressBar' + IntToStr(i))).hint :=
|
||||||
|
'Freq: ' + Equalizer_Bands[i].Text;
|
||||||
|
Inc(i);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
167
UOS/examples/fpg_style_chrome_silver_flatmenu.pas
Normal file
167
UOS/examples/fpg_style_chrome_silver_flatmenu.pas
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
{ Chrome Style with flat menu
|
||||||
|
by Fred van Stappen
|
||||||
|
fiens@hotmail.com
|
||||||
|
}
|
||||||
|
|
||||||
|
unit fpg_style_chrome_silver_flatmenu;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
/// for custom compil, like using fpgui-dvelop => edit define.inc
|
||||||
|
//{$I define.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, fpg_main, fpg_base;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TExtStyle = class(TfpgStyle)
|
||||||
|
public
|
||||||
|
constructor Create; override;
|
||||||
|
{ General }
|
||||||
|
procedure DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord); override;
|
||||||
|
{ Buttons }
|
||||||
|
procedure DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord;
|
||||||
|
AFlags: TfpgButtonFlags); override;
|
||||||
|
{ Menus }
|
||||||
|
procedure DrawMenuRow(ACanvas: TfpgCanvas; r: TfpgRect;
|
||||||
|
AFlags: TfpgMenuItemFlags); override;
|
||||||
|
function HasButtonHoverEffect: boolean; override;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
fpg_stylemanager;
|
||||||
|
|
||||||
|
{ TExtStyle }
|
||||||
|
|
||||||
|
constructor TExtStyle.Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
fpgSetNamedColor(clWindowBackground, clLightGray);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TExtStyle.HasButtonHoverEffect: boolean;
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TExtStyle.DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord);
|
||||||
|
var
|
||||||
|
r: TfpgRect;
|
||||||
|
begin
|
||||||
|
|
||||||
|
r.SetRect(x, y, w, h);
|
||||||
|
ACanvas.SetColor(cldarkgray);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
|
||||||
|
r.SetRect(x+1, y+1, w-2, h-2);
|
||||||
|
ACanvas.SetColor(clwhite);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TExtStyle.DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord;
|
||||||
|
AFlags: TfpgButtonFlags);
|
||||||
|
var
|
||||||
|
r, r21, r22: TfpgRect;
|
||||||
|
begin
|
||||||
|
|
||||||
|
|
||||||
|
r.SetRect(x, y, w, h);
|
||||||
|
|
||||||
|
r21.SetRect(x, y, w, h div 2);
|
||||||
|
|
||||||
|
r22.SetRect(x, y + (h div 2), w, h div 2);
|
||||||
|
|
||||||
|
if btfIsDefault in AFlags then
|
||||||
|
begin
|
||||||
|
ACanvas.SetColor(TfpgColor($7b7b7b));
|
||||||
|
ACanvas.SetLineStyle(1, lsSolid);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
InflateRect(r, -1, -1);
|
||||||
|
Exclude(AFlags, btfIsDefault);
|
||||||
|
fpgStyle.DrawButtonFace(ACanvas, r.Left, r.Top, r.Width, r.Height, AFlags);
|
||||||
|
Exit; //==>
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Clear the canvas
|
||||||
|
ACanvas.SetColor(clWindowBackground);
|
||||||
|
ACanvas.FillRectangle(r);
|
||||||
|
|
||||||
|
if (btfFlat in AFlags) and not (btfIsPressed in AFlags) then
|
||||||
|
Exit; // no need to go further
|
||||||
|
|
||||||
|
InflateRect(r, -1, -1);
|
||||||
|
// outer rectangle
|
||||||
|
ACanvas.SetLineStyle(1, lsSolid);
|
||||||
|
// ACanvas.SetColor(TfpgColor($a6a6a6));
|
||||||
|
ACanvas.SetColor(clblack);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
|
||||||
|
// so we don't paint over the border
|
||||||
|
|
||||||
|
// now paint the face of the button
|
||||||
|
if (btfIsPressed in AFlags) or (btfHover in AFlags) and not (btfDisabled in AFlags) then
|
||||||
|
begin
|
||||||
|
ACanvas.GradientFill(r21, clHilite1, clwhite, gdVertical);
|
||||||
|
ACanvas.GradientFill(r22, clwhite, clHilite1, gdVertical);
|
||||||
|
// ACanvas.SetColor(clblack);
|
||||||
|
ACanvas.SetColor(cldarkgray);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
InflateRect(r, -1, -1);
|
||||||
|
if (btfHover in AFlags) then ACanvas.SetColor(clyellow) else ACanvas.SetColor(cllime);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
|
||||||
|
ACanvas.GradientFill(r21, clsilver, $E6E6E6, gdVertical);
|
||||||
|
ACanvas.GradientFill(r22, $E6E6E6, clsilver, gdVertical);
|
||||||
|
// ACanvas.SetColor(clblack);
|
||||||
|
ACanvas.SetColor(cldarkgray);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TExtStyle.DrawMenuRow(ACanvas: TfpgCanvas; r: TfpgRect;
|
||||||
|
AFlags: TfpgMenuItemFlags);
|
||||||
|
var
|
||||||
|
r21, r22: TfpgRect;
|
||||||
|
begin
|
||||||
|
r21.Height := r.Height div 2;
|
||||||
|
r21.Width := r.Width;
|
||||||
|
r21.Top := r.top;
|
||||||
|
r21.Left := r.Left;
|
||||||
|
|
||||||
|
r22.Height := r.Height div 2;
|
||||||
|
r22.Width := r.Width;
|
||||||
|
r22.Top := r.top + r22.Height;
|
||||||
|
r22.Left := r.Left;
|
||||||
|
ACanvas.SetColor(clwhite);
|
||||||
|
ACanvas.FillRectangle(r);
|
||||||
|
inherited DrawMenuRow(ACanvas, r, AFlags);
|
||||||
|
if (mifSelected in AFlags) and not (mifSeparator in AFlags) then
|
||||||
|
begin
|
||||||
|
ACanvas.GradientFill(r21, clsilver, clwhite, gdVertical);
|
||||||
|
ACanvas.GradientFill(r22, clwhite, clsilver, gdVertical);
|
||||||
|
ACanvas.SetColor(cldarkgray);
|
||||||
|
ACanvas.SetTextColor(clblack);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
InflateRect(r, -1, -1);
|
||||||
|
ACanvas.SetColor(cllime);
|
||||||
|
ACanvas.DrawRectangle(r);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
fpgStyleManager.RegisterClass('Chrome silver flat menu', TExtStyle);
|
||||||
|
|
||||||
|
end.
|
||||||
BIN
UOS/examples/lib/FreeBSD/32bit/libmpg123-32.so
Normal file
BIN
UOS/examples/lib/FreeBSD/32bit/libmpg123-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/32bit/libportaudio-32.so
Normal file
BIN
UOS/examples/lib/FreeBSD/32bit/libportaudio-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/32bit/libsndfile-32.so
Normal file
BIN
UOS/examples/lib/FreeBSD/32bit/libsndfile-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libfaad2-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libfaad2-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libmp4ff-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libmp4ff-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libmpg123-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libmpg123-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libopus.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libopus.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libopusfile-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libopusfile-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libportaudio-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libportaudio-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libshout-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libshout-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/libsndfile-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/libsndfile-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/plugin/libbs2b-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/plugin/libbs2b-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/FreeBSD/64bit/plugin/libsoundtouch-64.so
Normal file
BIN
UOS/examples/lib/FreeBSD/64bit/plugin/libsoundtouch-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/LibFaad2-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/LibFaad2-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/LibMp4ff-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/LibMp4ff-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/LibMpg123-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/LibMpg123-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/LibPortaudio-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/LibPortaudio-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/LibSndFile-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/LibSndFile-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/libxmp-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/libxmp-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/plugin/LibSoundTouch-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/plugin/LibSoundTouch-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/32bit/plugin/libbs2b-32.so
Normal file
BIN
UOS/examples/lib/Linux/32bit/plugin/libbs2b-32.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibFaad2-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibFaad2-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibMp4ff-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibMp4ff-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibMpg123-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibMpg123-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibOpusFile-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibOpusFile-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibPortaudio-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibPortaudio-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibShout-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibShout-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibSndFile-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibSndFile-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/LibSndFile-64.so.2
Normal file
BIN
UOS/examples/lib/Linux/64bit/LibSndFile-64.so.2
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/libfdk-aac-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/libfdk-aac-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/libopus.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/libopus.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/libxmp-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/libxmp-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/plugin/LibSoundTouch-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/plugin/LibSoundTouch-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/64bit/plugin/libbs2b-64.so
Normal file
BIN
UOS/examples/lib/Linux/64bit/plugin/libbs2b-64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/aarch64_raspberrypi/libmpg123_aarch64.so
Normal file
BIN
UOS/examples/lib/Linux/aarch64_raspberrypi/libmpg123_aarch64.so
Normal file
Binary file not shown.
Binary file not shown.
BIN
UOS/examples/lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so
Normal file
BIN
UOS/examples/lib/Linux/aarch64_raspberrypi/libsndfile_aarch64.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/aarch64_raspberrypi/libxmp_aarch64.so
Normal file
BIN
UOS/examples/lib/Linux/aarch64_raspberrypi/libxmp_aarch64.so
Normal file
Binary file not shown.
Binary file not shown.
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libmpg123-arm.so
Normal file
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libmpg123-arm.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libportaudio-arm.so
Normal file
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libportaudio-arm.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libsndfile-arm.so
Normal file
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libsndfile-arm.so
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libxmp-arm.so
Normal file
BIN
UOS/examples/lib/Linux/arm_raspberrypi/libxmp-arm.so
Normal file
Binary file not shown.
Binary file not shown.
BIN
UOS/examples/lib/Mac/32bit/LibMpg123-32.dylib
Normal file
BIN
UOS/examples/lib/Mac/32bit/LibMpg123-32.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/32bit/LibPortaudio-32.dylib
Normal file
BIN
UOS/examples/lib/Mac/32bit/LibPortaudio-32.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/32bit/LibSndFile-32.dylib
Normal file
BIN
UOS/examples/lib/Mac/32bit/LibSndFile-32.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/32bit/plugin/LibSoundTouch-32.dylib
Normal file
BIN
UOS/examples/lib/Mac/32bit/plugin/LibSoundTouch-32.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/64bit/LibMpg123-64.dylib
Normal file
BIN
UOS/examples/lib/Mac/64bit/LibMpg123-64.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/64bit/LibPortaudio-64.dylib
Normal file
BIN
UOS/examples/lib/Mac/64bit/LibPortaudio-64.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/64bit/LibSndfile-64.dylib
Normal file
BIN
UOS/examples/lib/Mac/64bit/LibSndfile-64.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/64bit/libSoundTouchDLL-64.dylib
Normal file
BIN
UOS/examples/lib/Mac/64bit/libSoundTouchDLL-64.dylib
Normal file
Binary file not shown.
BIN
UOS/examples/lib/Mac/64bit/libxmp-64.dylib
Normal file
BIN
UOS/examples/lib/Mac/64bit/libxmp-64.dylib
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user