Difference between revisions of "Multimedia Programming"

From Lazarus wiki
Jump to navigationJump to search
m (added Video Playback Library Category)
(Fix heading levels; relocate MIDI content to MIDI page; add link to MIDI page)
(40 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
{{Multimedia Programming}}
 
{{Multimedia Programming}}
=Playing Videos=
 
  
==Starting a player application==
+
== Playing Videos ==
  
Once you know the command line and parameters you can use TProcessUTF8 to start the player:
+
The [[Video Playback Libraries]] page contains an annotated list of libraries for Windows, as well as any operating system which is supported by FFmpeg or by VLC. These libraries can be used to embed video playback in your applications.
  
<syntaxhighlight>
+
== Playing Sound ==
uses
 
  Classes, ..., LCLProc, UTF8Process;
 
  
...
+
=== Native solutions ===
 +
 
 +
==== macOS ====
  
implementation
+
* [[macOS_Play_Alert_Sound|System Sound Services]] For up to 30 second sound clips, alerts etc.
 +
* [[macOS Audio Player|AVAudioPlayer]] For longer audio files with volume control, pause, stop, resume, loop control, background music etc.
 +
* [[macOS NSSound]] A very simple method for playing system sounds, application bundle sound files, other sound files with volume control, pause, stop, resume, loops etc.
 +
* [[#OpenAL_Library|OpenAL]] comes pre-installed on macOS (Deprecated at WWDC2019; to be removed in a  future macOS release).
  
procedure TMainForm.Button1Click(Sender: TObject);
+
==== Windows ====
var
 
  Player: TProcessUTF8;
 
begin
 
  Player:=TProcessUTF8.Create(nil);
 
  try
 
    Player.CommandLine:=PathToPlayer+' '+ParametersAndMediaFile;
 
    Player.Execute;
 
  finally
 
    Player.Free;
 
  end;
 
end;
 
</syntaxhighlight>
 
  
For example to start under Linux the mplayer to play a video use:
+
===== Windows API =====
  
<syntaxhighlight>
+
You can use the Windows API to play e.g. wav files:
uses
 
  Classes, ..., FileUtil, LCLProc, UTF8Process;
 
  
 +
<syntaxhighlight lang="pascal">
 +
...
 +
uses MMSystem;
 
...
 
...
 +
sndPlaySound('C:\sounds\test.wav', snd_Async or snd_NoDefault);
 +
</syntaxhighlight>
  
implementation
+
The fail-safe way, which will allow appending paths and nonlatin file names is:
 
+
<syntaxhighlight lang="pascal">
procedure TMainForm.Button1Click(Sender: TObject);
+
sndPlaySound(pchar(UTF8ToSys('C:\sounds\test.wav')), snd_Async or snd_NoDefault);
var
 
  Player: TProcessUTF8;
 
  Filename: String;
 
  PlayerPath: String;
 
  PlayerParams: String;
 
begin
 
  Filename:='/home/username/video.mpg';
 
  PlayerPath:=FindDefaultExecutablePath('mplayer');
 
  PlayerParams:='"'+Filename+'"';
 
  Player:=TProcessUTF8.Create(nil);
 
  try
 
    Player.CommandLine:=PlayerPath+' '+PlayerParams;
 
    Player.Execute;
 
  finally
 
    Player.Free;
 
  end;
 
end;
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==VFW - Video for Windows==
+
===== Audiere Library =====
  
Capturing and playing video streams from TV cards and webcams under Windows the [[Glossary#VFW|VFW]] [[Glossary#API|API]] can be used with [[SysRec]].
+
Has bindings for Delphi, but they do not work with FPC:
  
==MPlayer for Linux gtk2/X and Windows==
+
* http://code.google.com/p/audiere-bind-delphi/
  
'''mplayer''' is an open source and free movie player. There is a LCL control [[TMPlayerControl]] embedding the mplayer, so you can built your own movie players or just play a video in your application. You can download it here:
+
===== Squall sound =====
<pre>
 
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/mplayer mplayer
 
</pre>
 
  
=Playing Sounds=
+
Squall sound works fine with FPC. It has 3D audio and EAX effects, but just supports MP3, OGG and WAV formats. Open sourced in 2009 and appears dead. Windows only.
  
==Windows only: using the Windows API==
+
https://github.com/xtreme3d/squall
You can use the Windows API to play e.g. wav files:
 
<syntaxhighlight>
 
...
 
uses MMSystem;
 
...
 
sndPlaySound('C:\sounds\test.wav', snd_Async or snd_NoDefault);
 
</syntaxhighlight>
 
The fail-safe way, which will allow appending paths and nonlatin file names is:
 
<syntaxhighlight>sndPlaySound(pchar(UTF8ToSys('C:\sounds\test.wav')), snd_Async or snd_NoDefault);</syntaxhighlight>
 
  
 +
=== Cross Platform ===
  
Obviously, this is not cross-platform
+
==== ACS (Audio Component Suite) ====
  
==Using the Audio Component Suite==
+
For more information, read the article about the [[ACS|Audio Component Suite]]
  
Read the page about the [[ACS|Audio Component Suite]]
+
==== Audorra Library ====
  
==Using the OpenAL Library==
+
This library for Linux and Windows works well with Lazarus:
  
A tutorial for Delphi can be found here: [http://www.noeska.com/doal/tutorials.aspx]
+
http://sourceforge.net/projects/audorra/
  
Free Pascal comes with a unit for accessing OpenAL located in fpc/packages/openal as well as [http://svn.freepascal.org/svn/fpc/trunk/packages/openal/examples usage examples]
+
==== BASS ====
  
==BASS==
+
Closed source. Free for non-commercial.
  
 
The BASS library can be downloaded from: http://www.un4seen.com/ and http://www.un4seen.com/forum/?topic=8682.0
 
The BASS library can be downloaded from: http://www.un4seen.com/ and http://www.un4seen.com/forum/?topic=8682.0
  
There is a DJ application, for Windows, Linux and Mac OSX, written with Lazarus and using Bass lib:
+
There is a DJ application, for Windows, Linux and macOS, written with Lazarus and using Bass lib:
 
https://sites.google.com/site/fiensprototyping/
 
https://sites.google.com/site/fiensprototyping/
  
==Audiere Library==
+
==== FMOD ====
 
 
Has bindings for Delphi, but they don't work with FPC:
 
 
 
* http://www.casteng.com/whypascal.shtml
 
* http://www.afterwarp.net/resources/soundlib
 
* http://code.google.com/p/audiere-bind-delphi/
 
  
==Audorra Library==
+
[https://www.fmod.com/core FMOD Core] comes with an elegant API compatible with C, C++, C#, and Javascript, and runs on all major platforms. It is a closed source solution. It is free for use for non-comercial software, but requires the payment of license fees for commercial software.
  
Works fine with Lazarus:
+
==== FPSound ====
  
http://sourceforge.net/projects/audorra/
+
FPSound is a new library being developed in the mold of fpspreadsheet and fpvectorial: it has independent modules to read, write and play sound files and also an intermediary representation for editing. See [[FPSound]]. Uses OpenAL. Appears dead and non-working.
  
==OMEGA Engine==
+
==== OMEGA Engine ====
  
The OMEGA Engine is a full game engine in single Omega.dll file which is just 50kb. It can successfully play FLAC,OGG,MP3,MP2,AMR and WMA files. It searches and uses installed audio codecs from the system.
+
The OMEGA Engine is a full game engine in single Omega.dll file which is just 50kb. It can successfully play FLAC, OGG, MP3, MP2, AMR and WMA files. It searches and uses installed audio codecs from the system. Windows and Linux only.
  
 
http://sourceforge.net/projects/omega-engine/files/
 
http://sourceforge.net/projects/omega-engine/files/
  
The project is dead, but is very easy to use:
+
The project is dead, but it is very easy to use:
  
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
Media_Play('Music.mp3', TRUE);
 
Media_Play('Music.mp3', TRUE);
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==PortAudio==
+
==== OpenAL Library ====
Various bindings for [http://www.portaudio.com/ PortAudio], a cross-platform, open source library for audio playback and recording are available.
+
 
See [[http://wiki.lazarus.freepascal.org/Multimedia_Programming#Playing_Sounds]] for some versions.
+
{{Note|The OpenAL Library Framework is pre-installed on all Apple computers running macOS -- see /System/Library/Frameworks/OpenAL.framework. Apple announced at WWD2019 that '''OpenAL is now deprecated''' and will be removed completely in a future release of macOS.}}
Forum user FredvS has written a Pascal unit that dynamically loads PortAudio: [http://lazarus.freepascal.org/index.php/topic,17521.0.html]
+
 
 +
OpenAL is a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications.
 +
 
 +
The library models a collection of audio sources moving in a 3D space that are heard by a single listener somewhere in that space. The basic OpenAL objects are a Listener, a Source, and a Buffer. There can be a large number of Buffers, which contain audio data. Each buffer can be attached to one or more Sources, which represent points in 3D space which are emitting audio. There is always one Listener object (per audio context), which represents the position where the sources are heard -- rendering is done from the perspective of the Listener.
 +
 
 +
* See the [https://www.openal.org OpenAL website] for documentation, downloads etc.
 +
 
 +
* A tutorial for Delphi can be found [http://www.noeska.com/doal/tutorials.aspx here].
 +
 
 +
* Free Pascal comes with a unit for accessing OpenAL located in fpc/packages/openal as well as [http://svn.freepascal.org/svn/fpc/trunk/packages/openal/examples usage examples].
 +
 
 +
* There is an alternative OpenAL sound manager unit to play wav files by [https://forum.lazarus.freepascal.org/index.php?action=profile;u=59515 Lulu] [https://github.com/Lulu04/OALSoundManager here]. Tested on macOS Mojave 10.14.
 +
 
 +
==== Play Sound Package ====
 +
 
 +
The [[Play Sound Multiplatform|Play Sound Package]] takes a different approach to playing sound cross-platform. For Windows, it uses the native sound system; for Linux it searches the system for programs which will play sound and executes those asynchronously or synchronously via [[TProcess]] or [[TAsyncProcess]]. Note: only works with Windows and Linux.
 +
 
 +
==== PortAudio ====
  
==SDL + SDL_mixer==
+
Various bindings for [http://www.portaudio.com/ PortAudio], a cross-platform, open source library for audio playback and recording, are available.
  
The basic SDL library comes with a very simple sound system. On top of that, SDL mixer adds more sound APIs which build a more flexible solution.
+
Forum user FredvS has written a [http://lazarus.freepascal.org/index.php/topic,17521.0.html Pascal unit] that dynamically loads PortAudio.  
  
Units for accessing SDL libraries are located in fpc/packages/sdl.  
+
Some examples can be found [http://breakoutbox.de/pascal/pascal.html#PortAudio here].
  
==FMOD==
+
==== SDL + SDL_mixer ====
  
Is a closed source solution. It is free for use for non-comercial software, but requires the payment of licenses for commercial software.
+
The basic SDL library comes with a very simple sound system. On top of that, SDL mixer adds more sound APIs which build a more flexible solution.
  
==Squall sound==
+
Units for accessing SDL libraries are located in fpc/packages/sdl.
  
Squall sound works fine with FPC. It has 3D audio and EAX effects, but just supports MP3, OGG and WAV formats.
+
==== SFML/CSFML for FPC ====
  
http://www.afterwarp.net/resources/soundlib
+
[https://www.sfml-dev.org/ Simple and Fast Multimedia Library] aka SFML provides a simple interface to the various components of your PC, to ease the development of games and multimedia applications. It is composed of five modules: system, window, graphics, audio and network.  With SFML, your application can compile and run out of the box on the most common operating systems: Windows, Linux, macOS and soon Android & iOS.
  
==FPSound==
+
Pre-compiled SDKs for your favorite OS are available on the [https://www.sfml-dev.org/download.php download page].
  
FPSound is a new library being developed in the mold of fpspreadsheet and fpvectorial: it has independent modules to read, write and play sound files and also an intermediary representation for editing. See [[FPSound]]
+
CSFML headers binding for FPC can be found at https://github.com/DJMaster/csfml-fpc
  
==UOS (United OpenLib of Sound)==
+
==== uos (United OpenLib of Sound) ====
  
UOS : United OpenLib of Sound. UOS unifies the best open-source audio libraries.
+
'''uos''': United OpenLib of Sound. '''uos''' unifies the best open-source audio libraries.
  
With UOS you can:
+
With '''uos''' you can:
*Listen to mp3, ogg, wav, flac,... audio files.
+
*Listen to mp3, ogg, wav, flac, m4a, opus, cd audio, ... audio files.
 
*With 16, 32 or float 32 bit resolution.
 
*With 16, 32 or float 32 bit resolution.
*Record all types of input into file.
+
*Record all types of input into a file.
 
*Add DSP effects and filters, however many you want and record it.
 
*Add DSP effects and filters, however many you want and record it.
 +
*Do web audio-streaming (listen to web-radio and apply filters).
 
*Listen to multiple inputs and outputs.
 
*Listen to multiple inputs and outputs.
 +
*Produce sound with built-in synthesizer.
  
UOS uses the PortAudio, SndFile and Mpg123 audio libraries.
+
'''uos''' can use the PortAudio, SndFile, Mpg123, Faad, Mp4ff, OpusFile audio libraries and SoundTouch, Bs2b plug-in library.
  
 
Included in the package:
 
Included in the package:
 +
 
* examples.
 
* examples.
* binary libraries for Linux 32/64, Windows 32/64, Mac OSX 32.
+
* binary libraries for Linux 32/64, Windows 32/64, macOS 32/64, FreeBSD 32/64 and ARM Rpi.
 +
 
 +
It can play mp3, ogg, wav, flac, m4a, opus, cda files.
 +
 
 +
http://github.com/fredvs/uos/
 +
 
 +
== Recording Sound ==
 +
 
 +
=== Native solutions ===
 +
 
 +
==== macOS ====
 +
 
 +
* [[macOS Audio Recorder|AVAudioRecorder]] allows you to make audio recordings straight to a file with very little programming overhead.
 +
 
 +
=== Cross platform solutions ===
 +
 
 +
==== uos (United OpenLib of Sound) ====
 +
 
 +
'''uos''': United OpenLib of Sound. '''uos''' unifies the best open-source audio libraries.
 +
 
 +
With '''uos''' you can:
 +
*Record all types of input into a file.
 +
*Add DSP effects and filters, however many you want and record it.
 +
 
 +
'''uos''' can use the PortAudio, SndFile, Mpg123, Faad, Mp4ff, OpusFile audio libraries and SoundTouch, Bs2b plug-in library.
  
http://sites.google.com/site/fiensprototyping/U_OS_Test.tar.gz
+
Included in the package:
 +
 
 +
* examples.
 +
* binary libraries for Linux 32/64, Windows 32/64, macOS 32/64, FreeBSD 32/64 and ARM Rpi.
  
 
http://github.com/fredvs/uos/
 
http://github.com/fredvs/uos/
  
=See also=
+
== MIDI ==
 +
 
 +
Musical Instrument Digital Interface (MIDI) is a technical standard that describes a communications protocol, digital interface, and electrical connectors that connect a wide variety of electronic musical instruments, computers, and related audio devices for playing, editing and recording music.
 +
 
 +
See the [[MIDI]] article for more details about the MIDI software aspect.
 +
 
 +
== Text-To-Speech ==
 +
 
 +
See [[Speech Synthesis]] for native and cross-platform solutions.
 +
 
 +
== See also ==
  
 
* [[Audio libraries]]
 
* [[Audio libraries]]
 
+
* [[Video Playback Libraries]]
[[Category:Tutorials]]
 
[[Category:Multimedia]]
 
[[Category:Video Playback Libraries]]
 

Revision as of 03:38, 2 August 2020

Deutsch (de) English (en) 日本語 (ja) 한국어 (ko) русский (ru) 中文(中国大陆)‎ (zh_CN)

Playing Videos

The Video Playback Libraries page contains an annotated list of libraries for Windows, as well as any operating system which is supported by FFmpeg or by VLC. These libraries can be used to embed video playback in your applications.

Playing Sound

Native solutions

macOS

  • System Sound Services For up to 30 second sound clips, alerts etc.
  • AVAudioPlayer For longer audio files with volume control, pause, stop, resume, loop control, background music etc.
  • macOS NSSound A very simple method for playing system sounds, application bundle sound files, other sound files with volume control, pause, stop, resume, loops etc.
  • OpenAL comes pre-installed on macOS (Deprecated at WWDC2019; to be removed in a future macOS release).

Windows

Windows API

You can use the Windows API to play e.g. wav files:

...
uses MMSystem;
...
sndPlaySound('C:\sounds\test.wav', snd_Async or snd_NoDefault);

The fail-safe way, which will allow appending paths and nonlatin file names is:

sndPlaySound(pchar(UTF8ToSys('C:\sounds\test.wav')), snd_Async or snd_NoDefault);
Audiere Library

Has bindings for Delphi, but they do not work with FPC:

Squall sound

Squall sound works fine with FPC. It has 3D audio and EAX effects, but just supports MP3, OGG and WAV formats. Open sourced in 2009 and appears dead. Windows only.

https://github.com/xtreme3d/squall

Cross Platform

ACS (Audio Component Suite)

For more information, read the article about the Audio Component Suite

Audorra Library

This library for Linux and Windows works well with Lazarus:

http://sourceforge.net/projects/audorra/

BASS

Closed source. Free for non-commercial.

The BASS library can be downloaded from: http://www.un4seen.com/ and http://www.un4seen.com/forum/?topic=8682.0

There is a DJ application, for Windows, Linux and macOS, written with Lazarus and using Bass lib: https://sites.google.com/site/fiensprototyping/

FMOD

FMOD Core comes with an elegant API compatible with C, C++, C#, and Javascript, and runs on all major platforms. It is a closed source solution. It is free for use for non-comercial software, but requires the payment of license fees for commercial software.

FPSound

FPSound is a new library being developed in the mold of fpspreadsheet and fpvectorial: it has independent modules to read, write and play sound files and also an intermediary representation for editing. See FPSound. Uses OpenAL. Appears dead and non-working.

OMEGA Engine

The OMEGA Engine is a full game engine in single Omega.dll file which is just 50kb. It can successfully play FLAC, OGG, MP3, MP2, AMR and WMA files. It searches and uses installed audio codecs from the system. Windows and Linux only.

http://sourceforge.net/projects/omega-engine/files/

The project is dead, but it is very easy to use:

Media_Play('Music.mp3', TRUE);

OpenAL Library

Light bulb  Note: The OpenAL Library Framework is pre-installed on all Apple computers running macOS -- see /System/Library/Frameworks/OpenAL.framework. Apple announced at WWD2019 that OpenAL is now deprecated and will be removed completely in a future release of macOS.

OpenAL is a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications.

The library models a collection of audio sources moving in a 3D space that are heard by a single listener somewhere in that space. The basic OpenAL objects are a Listener, a Source, and a Buffer. There can be a large number of Buffers, which contain audio data. Each buffer can be attached to one or more Sources, which represent points in 3D space which are emitting audio. There is always one Listener object (per audio context), which represents the position where the sources are heard -- rendering is done from the perspective of the Listener.

  • A tutorial for Delphi can be found here.
  • Free Pascal comes with a unit for accessing OpenAL located in fpc/packages/openal as well as usage examples.
  • There is an alternative OpenAL sound manager unit to play wav files by Lulu here. Tested on macOS Mojave 10.14.

Play Sound Package

The Play Sound Package takes a different approach to playing sound cross-platform. For Windows, it uses the native sound system; for Linux it searches the system for programs which will play sound and executes those asynchronously or synchronously via TProcess or TAsyncProcess. Note: only works with Windows and Linux.

PortAudio

Various bindings for PortAudio, a cross-platform, open source library for audio playback and recording, are available.

Forum user FredvS has written a Pascal unit that dynamically loads PortAudio.

Some examples can be found here.

SDL + SDL_mixer

The basic SDL library comes with a very simple sound system. On top of that, SDL mixer adds more sound APIs which build a more flexible solution.

Units for accessing SDL libraries are located in fpc/packages/sdl.

SFML/CSFML for FPC

Simple and Fast Multimedia Library aka SFML provides a simple interface to the various components of your PC, to ease the development of games and multimedia applications. It is composed of five modules: system, window, graphics, audio and network. With SFML, your application can compile and run out of the box on the most common operating systems: Windows, Linux, macOS and soon Android & iOS.

Pre-compiled SDKs for your favorite OS are available on the download page.

CSFML headers binding for FPC can be found at https://github.com/DJMaster/csfml-fpc

uos (United OpenLib of Sound)

uos: United OpenLib of Sound. uos unifies the best open-source audio libraries.

With uos you can:

  • Listen to mp3, ogg, wav, flac, m4a, opus, cd audio, ... audio files.
  • With 16, 32 or float 32 bit resolution.
  • Record all types of input into a file.
  • Add DSP effects and filters, however many you want and record it.
  • Do web audio-streaming (listen to web-radio and apply filters).
  • Listen to multiple inputs and outputs.
  • Produce sound with built-in synthesizer.

uos can use the PortAudio, SndFile, Mpg123, Faad, Mp4ff, OpusFile audio libraries and SoundTouch, Bs2b plug-in library.

Included in the package:

  • examples.
  • binary libraries for Linux 32/64, Windows 32/64, macOS 32/64, FreeBSD 32/64 and ARM Rpi.

It can play mp3, ogg, wav, flac, m4a, opus, cda files.

http://github.com/fredvs/uos/

Recording Sound

Native solutions

macOS

  • AVAudioRecorder allows you to make audio recordings straight to a file with very little programming overhead.

Cross platform solutions

uos (United OpenLib of Sound)

uos: United OpenLib of Sound. uos unifies the best open-source audio libraries.

With uos you can:

  • Record all types of input into a file.
  • Add DSP effects and filters, however many you want and record it.

uos can use the PortAudio, SndFile, Mpg123, Faad, Mp4ff, OpusFile audio libraries and SoundTouch, Bs2b plug-in library.

Included in the package:

  • examples.
  • binary libraries for Linux 32/64, Windows 32/64, macOS 32/64, FreeBSD 32/64 and ARM Rpi.

http://github.com/fredvs/uos/

MIDI

Musical Instrument Digital Interface (MIDI) is a technical standard that describes a communications protocol, digital interface, and electrical connectors that connect a wide variety of electronic musical instruments, computers, and related audio devices for playing, editing and recording music.

See the MIDI article for more details about the MIDI software aspect.

Text-To-Speech

See Speech Synthesis for native and cross-platform solutions.

See also