1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
Introduction on how to use pyo inside an OpenFrameworks project.
================================================================
To use pyo inside an OpenFrameworks project, first you need a
working install of pyo for python 2.7 on your system (will switch
to python 3 as soon as possible). After installing pyo, you can
move on and create an OpenFrameworks project.
------------------------------------------------------------------------
Step 1 - Create a default project with the project generator. To avoid
any include or linking problem, you should save your project in the
default location (OF_ROOT/apps/myApps).
------------------------------------------------------------------------
Step 2 - Add pyo files to your project. You only need to copy
these files in your project's src folder:
- from the folder pyo/embedded:
m_pyo.h
- from the folder pyo/embedded/openframeworks:
PyoClass.cpp
PyoClass.h
------------------------------------------------------------------------
Step 3 - Make sure that your project includes flags for compiling
and linking against Python. On Unix systems, you can set the Python
flags in the file config.make. Uncomment and complete these lines:
PROJECT_LDFLAGS = `python-config --ldflags` # linker flags for Python
PROJECT_CFLAGS = `python-config --cflags` # compiler flags for Python
------------------------------------------------------------------------
Step 4 - Make a scripts folder at the root level of your project and
create a python file, named "stereoDelay.py", with these lines in it:
# Get the input sound and apply a stereo delay + reverb on it.
st_input = Input([0,1])
st_delay = Delay(st_input, delay=[.4, .5], feedback=0.7)
st_rev = WGVerb(st_delay, feedback=0.8, cutoff=4000, bal=0.25).out()
------------------------------------------------------------------------
Step 5 - Edit src/ofApp.h
- Include PyoClass definition:
#include "PyoClass.h"
- Add audio in/out callbacks to the public attributes of the ofApp class:
void audioIn(float * input, int bufferSize, int nChannels);
void audioOut(float * input, int bufferSize, int nChannels);
- Add an ofSoundStream object to the public attributes of the ofApp class:
ofSoundStream soundStream;
- Add a Pyo object to the public attributes of the ofApp class:
Pyo pyo;
------------------------------------------------------------------------
Step 6 - Edit src/ofApp.cpp
- Creates the setup() function:
void ofApp::setup(){
// define audio properties
int sampleRate = 44100;
int bufferSize = 256;
int nChannels = 2;
// initialize a pyo server
pyo.setup(nChannels, bufferSize, sampleRate);
// load a python file
pyo.loadfile("../scripts/stereoDelay.py", 0);
// initialize OpenFrameworks audio streaming channels
//soundStream.listDevices() // Uncomment if you need to
//soundStream.setDeviceID(1); // change the audio device.
soundStream.setup(this, nChannels, nChannels, sampleRate, bufferSize, 4);
}
- Creates audio in/out functions:
void ofApp::audioIn(float * input, int bufferSize, int nChannels){
// send audio samples to pyo
pyo.fillin(input);
}
void ofApp::audioOut(float * output, int bufferSize, int nChannels){
// process and get new audio samples from pyo
pyo.process(output);
}
------------------------------------------------------------------------
Step 7 - Compile your project. To compile, cd to your project folder and:
# This line is for MacOS, you'll have to adapt it to your system!
make && cp -r scripts bin/*.app/Contents/Resources
------------------------------------------------------------------------
Here you go! You should be able to run your app created in the bin folder.
Documentation
=============
For a complete description of functions that can be used to communicate
with the pyo embedded processes, see documentation comments in the file
PyoClass.cpp.
(c) 2019 - belangeo
|