Difference between revisions of "Multimedia Programming"

From Lazarus wiki
Jump to navigationJump to search
m (macOS renaming; fixed syntax highlighting)
Line 1: Line 1:
 
{{Multimedia Programming}}
 
{{Multimedia Programming}}
 +
 
=Playing Videos=
 
=Playing Videos=
  
Line 6: Line 7:
 
==MPlayer for Linux gtk2/X and Windows==
 
==MPlayer for Linux gtk2/X and Windows==
  
'''mplayer''' is an open source and free movie player. As part of Lazarus-CCR, 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:
+
'''mplayer''' is an open source and free movie player. As part of Lazarus-CCR, 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 the source here:
 
<pre>
 
<pre>
 
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/mplayer mplayer
 
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/mplayer mplayer
Line 14: Line 15:
  
 
==Windows only: using the Windows API==
 
==Windows only: using the Windows API==
 +
 
You can use the Windows API to play e.g. wav files:
 
You can use the Windows API to play e.g. wav files:
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang="pascal">
 
...
 
...
 
uses MMSystem;
 
uses MMSystem;
Line 21: Line 24:
 
sndPlaySound('C:\sounds\test.wav', snd_Async or snd_NoDefault);
 
sndPlaySound('C:\sounds\test.wav', snd_Async or snd_NoDefault);
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
The fail-safe way, which will allow appending paths and nonlatin file names is:
 
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>
+
<syntaxhighlight lang="pascal">
 
+
sndPlaySound(pchar(UTF8ToSys('C:\sounds\test.wav')), snd_Async or snd_NoDefault);
 +
</syntaxhighlight>
  
 
Obviously, this is not cross-platform
 
Obviously, this is not cross-platform
Line 29: Line 34:
 
==Using the Audio Component Suite==
 
==Using the Audio Component Suite==
  
Read the page about the [[ACS|Audio Component Suite]]
+
For more information, read the article about the [[ACS|Audio Component Suite]]
  
 
==Using the OpenAL Library==
 
==Using the OpenAL Library==
Line 41: Line 46:
 
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==
 
==Audiere Library==
  
Has bindings for Delphi, but they don't work with FPC:
+
Has bindings for Delphi, but they do not work with FPC:
  
 
* http://www.casteng.com/whypascal.shtml
 
* http://www.casteng.com/whypascal.shtml
Line 54: Line 59:
 
==Audorra Library==
 
==Audorra Library==
  
Works fine with Lazarus:  
+
This library works well with Lazarus:  
  
 
http://sourceforge.net/projects/audorra/
 
http://sourceforge.net/projects/audorra/
Line 60: Line 65:
 
==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.
  
 
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==
 
==PortAudio==
 +
 
Various bindings for [http://www.portaudio.com/ PortAudio], a cross-platform, open source library for audio playback and recording are available.
 
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.
 
See [[http://wiki.lazarus.freepascal.org/Multimedia_Programming#Playing_Sounds]] for some versions.
Line 84: Line 90:
 
==FMOD==
 
==FMOD==
  
Is a closed source solution. It is free for use for non-comercial software, but requires the payment of licenses for commercial software.
+
Is a closed source solution. It is free for use for non-comercial software, but requires the payment of license fees for commercial software.
  
 
==Squall sound==
 
==Squall sound==
Line 113: Line 119:
 
Included in the package:
 
Included in the package:
 
* examples.
 
* examples.
* binary libraries for Linux 32/64, Windows 32/64, Mac OSX 32, FreeBSD 32/64 and ARM Rpi.
+
* 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/
 
http://github.com/fredvs/uos/
Line 128: Line 136:
 
* [[Video Playback Libraries]]
 
* [[Video Playback Libraries]]
  
[[Category:Tutorials]]
 
 
[[Category:Multimedia]]
 
[[Category:Multimedia]]

Revision as of 05:41, 17 December 2019

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

Playing Videos

Several Libraries exist for embedding video playback into applications.

MPlayer for Linux gtk2/X and Windows

mplayer is an open source and free movie player. As part of Lazarus-CCR, 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 the source here:

svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/mplayer mplayer

Playing Sounds

Windows only: using the 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);

Obviously, this is not cross-platform

Using the Audio Component Suite

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

Using the OpenAL Library

A tutorial for Delphi can be found here: [1]

Free Pascal comes with a unit for accessing OpenAL located in fpc/packages/openal as well as usage examples

BASS

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/

Audiere Library

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

Audorra Library

This library works well with Lazarus:

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

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.

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

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

Media_Play('Music.mp3', TRUE);

PortAudio

Various bindings for PortAudio, a cross-platform, open source library for audio playback and recording are available. See [[2]] for some versions. Forum user FredvS has written a Pascal unit that dynamically loads PortAudio: [3] Some examples can be found here: [4]

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.

FMOD

Is a closed source solution. It is free for use for non-comercial software, but requires the payment of license fees for commercial software.

Squall sound

Squall sound works fine with FPC. It has 3D audio and EAX effects, but just supports MP3, OGG and WAV formats.

http://www.afterwarp.net/resources/soundlib

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

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 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/

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.

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

See also