uos

From Free Pascal wiki
Revision as of 00:53, 27 February 2017 by Fredvs (talk | contribs)
Jump to navigationJump to search
uoslogo.png

uos (United OpenLib of Sound) is a multi-platform package of audio handling routines that unifies the best open-source audio libraries.

Features

  • play .mp3, .ogg, .wav, .flac, .m4a, .opus and cdrom audio files.
  • 16, 32 or float 32 bit resolution
  • record all types of input into file, in 16 or 32 bit resolution, mono or stereo.
  • add DSP effects and filters, however many you want and record it.
  • play multiple inputs and outputs simultaneously
  • internet audio streaming of mp3 and opus files.

Uos can use the SoundTouch, PortAudio, SndFile, Mpg123, Faad, OpusFile and Mp4ff audio libraries.

Included in the package: Examples and binary libraries for Linux 32/64, arm-Rapsberry Pi, Windows 32/64, Mac OSX 32 and FreeBSD 32/64.

Download

Forum

uoslib

uoslib is the Universal Library version of uos unit and is accessible from Pascal and all other languages (C, Java, ...)

Included in the package: Examples and binary libraries for Linux 32/64, Windows 32/64, Mac OSX 32 and FreeBSD 32/64.

Install

The best way to show how uos works is to look at the examples in uos/uoslib packages. All is included, you only have to compile the demos and run it...

Here some examples how to use uos :

  • Copy all the files in /uos/src/ into the directory of your project.
  • add uos_flat or uos in your uses section. (for uoslib add uoslib_h)
    • uos_flat => All is done by the unit. The procedures are more "universal", same syntax as uoslib.
    • uos => The application must declare uos class and variables. The procedures can be used as oop way.
  • All the examples in uos packages uses uos_flat. There is a example using uos => SimplePlayer_noflat

Those libraries can be used by uos:

  • PortAudio for dealing with audio devices of sound card,
  • SndFile for decoding wav, flac, org audio files,
  • Mpg123 for decoding mp3 audio files,
  • Faad and Mp4ff for decoding m4a audio files,
  • OpusFile for decoding opus audio files,
  • SoundTouch plugin for changing tempo of any type of audio files,
  • bs2b plugin to apply stereo to binaural effect.

You may load those libraries with:

uos_LoadLib( pchar(PortAudioFileName), pchar(SndFileFileName), pchar(Mpg123FileName),  pchar(Mp4ffFileName), pchar(FaadFileName), pchar(OpusFileFileName) );

If some libraries are not needed, just replace the filename with "nil".

Play a file 'MySong.mp3'

begin
  uos_LoadLib( PortAudioFileName, nil, Mpg123FileName,  nil, nil, nil); // only PortAudio and Mpg123 are needed. 
  uos_CreatePlayer( 0 );              // you may create how many players you want, from 0 to to what you computer can do...
  uos_AddIntoDevOut( 0 );             // Add Output with default parameters     
  uos_AddFromFile( 0, 'MySong.mp3' ); // Input from audio file 
    // And let's play it...
  uos_Play(0);                        // Play the song...
end;

Play a sound file with some dsp effects (only for uos, in future for uoslib too):

begin
  uos_LoadLib( pchar(PortAudioFileName), nil, pchar(Mpg123FileName), nil, nil, nil); // only PortAudio and Mpg123 are needed.
  uos_CreatePlayer( 0 );              // First create the player:
  uos_AddIntoDevOut( 0 );             // Add Output with default parameters     
  uos_AddFromFile( 0, 'MySong.mp3' ); // Input from audio file 
  uos_AddDSPIn( 0, 1 );               // Add as many dsp effects you want
  uos_AddDSPIn( 0, 2 );
  uos_Play( 0 );                      // Play the song with DSP effect...
end;

Listen to your mic into your loudspeakers (for uoslib too) :

begin
  uos_LoadLib( pchar(PortAudioFileName), nil, nil, nil, nil, nil); // only PortAudio is needed.
  uos_CreatePlayer( 0 );     
  uos_AddIntoDevOut( 0 );   
  uos_AddFromDevIn( 0 );   // Input from IN Device
  uos_Play( 0 );           // Listen to your mic in your loudspeakers...
end;

Now, ear your mic, listen to a mp3, apply some effects and record the mic into wav file at same time:

begin
  uos_LoadLib( pchar(PortAudioFileName), pchar(SndFileFileName), pchar(Mpg123FileName), nil, nil, nil);
  uos_CreatePlayer( 0 );
  uos_AddIntoDevOut( 0 ) ;              // Output into OUT Device
  uos_AddIntoFile( 0, 'Myrecord.wav' ); // Output into OUT Device
  uos_AddFromDevIn( 0 );                // Input from IN Device
  uos_AddDSPIn( 0, 1 );                 // Add as many dsp's you want
  uos_AddDSPIn( 0, 2 );
  uos_CreatePlayer( 1 );
  uos_AddFromFile( 1, 'MySong.mp3' );  // the background audio file
  uos_AddIntoDevOut( 1 ) ;             // Output into OUT1 Device;

  uos_Play(0);                         // Listen your mic with DSP effects and record it ...
  uos_Play(1);                         // Listen to mp3 while recording
end;

Syntax

Here are the basic uos procedures. Each procedure has its equivalent with arguments for custom parameters.

Initialization Procedures:

uos_LoadLib( );              // Load dynamic libraries for uos  
uos_LoadLibs( );             // Load dynamic libraries for uoslibs
uos_UnLoadLib();             // To unload libraries.
uos_Free;                    // To use when application terminate.

Output

uos_AddIntoDevOut();         // Output into OUT Device
uos_AddIntoFile();           // Output into Wav File

Input

uos_AddFromDevIn();          // Input from IN device
uos_AddFromFile();           // Input from Audio File
uos_AddFromURL();            // Input from internet URL mp3/opus files
uos_AddFromSynth(;           // Input form built-in Synthetizer
uos_InputLength();           // Lenght of Input in samples
uos_InputPosition();         // Get position
uos_Seek();                  // Change position

Player

uos_Play();                  // Start playing
uos_PlayNoFree();            // Start playing but do not free the player after stop.
uos_FreePlayer();            // Free the player. Works only when PlayNoFree() was used.
uos_RePlay();                // Resume playing after pause
uos_Stop();                  // Stop playing and free thread
uos_Pause();                 // Pause playing

DSP

uos_AddDSPIn()               // DSP procedure for input
uos_AddDSPOut()              // DSP procedure for output
uos_SetDSPin()               // Set DSP In
uos_SetDSPout()              // Set DSP out
uos_SetDSPVolumeIn(...)      // Set Volume
uos_AddFilterIn(...)         // Add filer
uos_AddPlugin(...)           // Add pluggin

And much more other procedures/functions (see in uos.pas...)