Wiki copymirror

This is a mirror of the wiki at pascal.chat. Editing, history and sign-in are there.

uos

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

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

Included in the package: Examples and binary libraries for Linux 32/64, arm aarch64 Raspberry Pi, Windows 32/64, macOS 32/64 and FreeBSD 32/64.

Download

Forum

uoslib

Pascal users should use uos instead.

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

Some methods of uos are not accessible.

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

Install

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

Here some examples how to use uos :

Those libraries can be used by uos:

You may load those libraries with:

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

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

If you replace the filename with pchar('system'), the library of the system will be used (if exists).

WARNING: Do not forget to call uos_free() when application terminates.

Play a file 'MySong.mp3':

pascal
begin
      uos_LoadLib( PortAudioFileName, nil, Mpg123FileName,  nil, nil, 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;
    ...
    uos_free;                             // Call this at end of application.

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

pascal
begin
      uos_LoadLib( pchar(PortAudioFileName), nil, pchar(Mpg123FileName), nil, nil, 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_InputAddDSP( 0, 1 );               // Add as many dsp effects you want
      uos_InputAddDSP( 0, 2 );
      uos_Play( 0 );                      // Play the song with DSP effect...
    end;
    ...
    uos_free;                             // Call this at end of application.

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

pascal
begin
      uos_LoadLib( pchar(PortAudioFileName), nil, nil, 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;
    ...
    uos_free;                             // Call this at end of application.

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

pascal
begin
      uos_LoadLib( pchar(PortAudioFileName), pchar(SndFileFileName), pchar(Mpg123FileName), nil, nil, nil, nil, nil);
      uos_CreatePlayer( 0 );
      uos_AddIntoDevOut( 0 ) ;              // Output into OUT Device
      uos_AddIntoFile( 0, 'Myrecord.wav' ); // Output into wav file
      uos_AddFromDevIn( 0 );                // Input from IN Device
      uos_InputAddDSP( 0, 1 );              // Add as many dsp's you want
      uos_InputAddDSP( 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;
    ...
    uos_free;                               // Call this at end of application.

Syntax

Here are the basic uos methods. Each method has its equivalent with arguments for custom parameters.

Initialization methods:

pascal
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

pascal
uos_AddIntoDevOut();         // Output into OUT Device
    uos_AddIntoFile();           // Output into Wav File
    uos_AddIntoMemoryBuffer()    // Add a Output into memory buffer
    uos_AddIntoMemoryStream()    // Add a Output into memory stream
    uos_AddIntoIceServer()       // Add a Output into a IceCast server
    uos_AddIntoFileFromMem()     // Add a Output into audio wav file from TMemoryStream

Input

pascal
uos_AddFromDevIn();          // Input from IN device
    uos_AddFromFile();           // Input from Audio File
    uos_AddFromMemoryBuffer();   // Input from decoded pcm buffer
    uos_AddFromMemoryStream();   // Input from a TMemoryStream of Audio File
    uos_AddFromFileIntoMemory(); // Input from audio file and stored into memory buffer
    uos_AddFromURL();            // Input from internet URL mp3/opus/aac files
    uos_AddFromSynth(;           // Input form built-in Synthesizer
    uos_InputLength();           // Length of Input in samples
    uos_InputPosition();         // Get position
    uos_InputSeek();             // Change position in byte
    uos_InputSeekTime();         // Change position in time
    uos_InputSeekSeconds();      // Change position in second

Player

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

DSP

pascal
uos_InputAddDSP()            // DSP procedure for input
    uos_OutputAddDSP()           // DSP procedure for output
    uos_InputSetDSP()            // Set DSP In
    uos_OutputSetDSP()           // Set DSP out
    uos_InputSetDSPVolume(...)   // Set Volume
    uos_InputAddFilter(...)      // Add filer
    uos_AddPlugin(...)           // Add pluggin

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


From the Free Pascal wiki, page "uos", as the Internet Archive kept it on 2025-03-12, last changed on 2024-10-08. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 3, last changed by WikiArchive .