|
You can extend the functionality of the Praat program by adding modules written in C or C++ to it. All of Praat's source code is available under the General Public Licence.
Before trying the task of learning how to write Praat extensions in C or C++, you should be well aware of the possibilities of scripting. Many built-in commands in Praat have started their lives as Praat scripts, and scripts are easier to write than extensions in C or C++. If you have a set of scripts, you can distribute them as a plug-in.
You obtain the Praat source code from GitHub (https://github.com/praat), in a file with a name like praat6499_sources.zip
or praat6499_sources.tar.gz
(depending on the Praat version), and unpack this by double-clicking. The result will be a set of directories called kar
, melder
, external
(with clapack
, gsl
, glpk
, flac
, mp3
, portaudio
, espeak
, vorbis
and opusfile
in it), sys
, dwsys
, stat
, fon
, sensors
, dwtools
, LPC
, FFNet
, gram
, artsynth
, EEG
, main
, makefiles
, test
, dwtest
, and generate
, plus a makefile and Xcode project for macOS and a README.md file.
Consult the README file on GitHub for directions to compile and link Praat for your platform.
To start extending Praat’s functionality, you can edit main/main_Praat.cpp
. This example shows you how to create a very simple program with all the functionality of the Praat program, and a single bit more (namely an additional command in the New menu):
#include "praatM.h"
DIRECT (HelloFromJane) {
Melder_information (U"Hello, I am Jane.");
}
int main (int argc, char **argv) {
praat_init (U"Praat_Jane", argc, argv);
INCLUDE_LIBRARY (praat_uvafon_init)
praat_addMenuCommand (U"Objects", U"New", U"Hello from Jane...", nullptr, 0, DO_HelloFromJane);
praat_run ();
return 0;
}
To see how objects are defined, take a look at sys/Thing.h
, sys/Daata.h
, sys/oo.h
, the XXX_def.h
files in the fon
folder, and the corresponding XXX.cpp
files in the fon
folder. To see how commands show up on the buttons in the fixed and dynamic menus, take a look at the large interface description file fon/praat_Fon.cpp
.
For building the Praat shell (the Objects and Picture windows) only, you need only the code in the nine directories kar
, melder
, external/{clapack,gsl,flac,mp3,portaudio,lame,opusfile,vorbis}
, sys
, and dwsys
. You delete the inclusion of praat_uvafon_init
from main
. You will be able to build a Praat shell, i.e. an Objects and a Picture window, which has no knowledge of the world, i.e., which does not know any objects that can be included in the list of objects. You could use this Praat shell for modelling your own world and defining your own classes of objects. For advanced programmers only.
© Paul Boersma 2023-04-09, 2024