Difference between revisions of "uos"

From Free Pascal wiki
Jump to navigationJump to search
Line 17: Line 17:
 
* http://fredvs.github.io/uos/
 
* http://fredvs.github.io/uos/
 
* http://github.com/fredvs/uos/
 
* http://github.com/fredvs/uos/
 +
 +
== Forum (You are welcome.) ==
 +
* http://uos.2369694.n4.nabble.com
  
 
== uoslib ==
 
== uoslib ==

Revision as of 01:52, 27 February 2017

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 (You are welcome.)

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...)