Giter Club home page Giter Club logo

ofxpd's Introduction

ofxPd

Copyright (c) Dan Wilcox 2011-2023

BSD Simplified License.

For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "LICENSE.txt," in this distribution.

See https://github.com/danomatika/ofxPd for documentation as well as the OF forum post on ofxPd

This project has been supported by the CMU Frank-Ratchye STUDIO for Creative Inquiry, the DU Emergent Digital Practices Program, and my time at the ZKM | Hertz-Lab.

Description

ofxPd is an Open Frameworks addon for running an instance of the Pure Data audio environment within an openFrameworks application. Audio, messages, and MIDI events can be passed to and from pure data patches and the library is thread safe.

Pure Data is a graphical patching environment for audio and multimedia (note: the gui and graphics features are not within the scope of this addon)

openFrameworks is a cross platform open source toolkit for creative coding in C++

Build Requirements

To use ofxPd, first you need to download and install Open Frameworks. Development is against the latest version of Open Frameworks on github. Checkout a tag if you need an earlier, stable version.

OF github repository

On macOS, you will need to install Xcode.

On Linux, you can use the Makefile.

On Windows, Qt Creator/Msys2 are recommended as the libpd sources do not currently build in Visual Studio. However, you can use a libpd.dll built by MinGW in a Visual Studio project. See the "Using ofxPd with Visual Studio" section below.

Installation

Place ofxPd within a folder in the apps folder of the OF dir tree:

openframeworks/addons/ofxPd

The easiest way to do this is via cloning with git:

cd openframeworks/addons/
git clone git://github.com/danomatika/ofxPd.git

Which version to use?

The master branch of ofxPd will work with the current stable version of openFrameworks and can be considered relatively stable.

Previous versions are tagged using Semantic Versioning with the updates to newer versions of openFrameworks and libpd noted in the changelog, CHANGES.txt. You can select the tag in the Github "Current Branch" menu or clone and check it out using git.

If you want to use ofxPd with a previous version of openFrameworks, checkout the corresponding version tag after cloning:

git clone git://github.com/danomatika/ofxPd.git
cd ofxPd
git checkout 1.5.3

Running the Example Projects

The example projects are in the pdExample & pdExampleIOS folders.

Project files for the examples are not included so you will need to generate the project files for your operating system and development environment using the OF ProjectGenerator which is included with the openFrameworks distribution.

To (re)generate project files for an existing project:

  • Click the "Import" button in the ProjectGenerator
  • Navigate to the project's parent folder ie. "ofxPd", select the base folder for the example project ie. "pdExample", and click the Open button
  • Click the "Update" button

If everything went Ok, you should now be able to open the generated project and build/run the example.

Notes for iOS Projects

  • As of iOS 10+, you will need to manually add a NSMicrophoneUsageDescription string to the project's info plist or the app will crash immediately:
    1. Click on the blue project at the top of the Xcode file tree (ie. something like "pdExampleIOS"
    2. Click the "Info" tab in the top/middle
    3. Under "Custom iOS Target Properties", hover over the last key in the list and click the "+" button
    4. Add the following:
    • Key: NSMicrophoneUsageDescription
    • Type: string
    • Value: a description string for the app like, ie. "This app needs to use the microphone for bla bla..."
  • If you use the OF release zips from openFrameworks.cc, you need the iOS zip not the macOS zip
  • Make sure that "iOS (Xcode)" is selected in the PG's "Platforms" box

pdMultiExample & Multiple Instance Support

This special example demonstrates ofxPd's multiple-instance support, where you can run multiple separate instances of libpd concurrently.

To build and run this example, the following C and C++ flags must be set: -DPDINSTANCE & -DPDTHREADS. If these are not set, the example will exit early with an error.

Makefile

For Makefile builds, these are set in pdMultiExample/config.make.

Project Generator

For project files which are created with the Project Generator (ie. Xcode), uncomment the line in addons_config.mk under the common target, save, then (re)generate the project with the PG.

Xcode

The defines can be added manually to the Xcode projects build settings: Other C Flags & Other C++ Flags.

PitchShifter

PitchShifter is a simple example application which uses an OF GUI to control a pitch shifter within a PD patch. Like the basic example, you will have to generate the project files using the ProjectGenerator.

How to Create a New ofxPd Project

Note: These instructions are for manually creating a new project from an existing ofxPd project and it's project files (aka Xcode, C::B, etc). You do not need to follow these steps if you use the ProjecGenerator app in which case you may need to add the C Flags as the PG currently seems to have a problem doing this. See the IDE specific instructions on how to do this.

To develop your own project based on ofxPd, either generate a new project with the ProjectGenerator or generate one of the examples, copy, and rename it. You probably want to put it in your apps folder, for example, after copying:

openFrameworks/addons/ofxPd/pdExample/ => openFrameworks/apps/myApps/pdExample/

It must be 3 levels down in the openFrameworks folder structure.

Then after renaming:

openFrameworks/apps/myApps/myPdProject/

For Xcode:

Rename the project in Xcode (do not rename the .xcodeproj file in Finder!): Xcode Menu->Project->Rename

Adding ofxPd to an Existing Project

Note: These instructions are for manually add ofxPd to an existing project. You do not need to follow these steps if you use the ProjecGenerator app in which case you may need to add the C flags as the PG currently seems to have a problem doing this. See the IDE specific instructions on how to do this.

If you want to add ofxPd to another project, you need to make sure you include the src folder:

openFrameworks/addons/ofxPd/src

You will also need to include some additional C flags for building the libpd source:

-DPD -DUSEAPI_DUMMY -DPD_INTERNAL -DHAVE_UNISTD_H -DHAVE_ALLOCA_H -DLIBPD_EXTRA

Note: -DLIBPD_EXTRA is optional if you do not need/use the externals in libpd/pure-data/extra

If you want to build ofxPd with the libpd experimental libpd multi-instance support (ie. for pdMultiExample), add these C flags as well:

-DPDINSTANCE -DPDTHREADS

For Xcode:

Additional C flags are needed per-platform:

  • macOS: -DHAVE_LIBDL -DHAVE_MACHINE_ENDIAN_H -D_DARWIN_C_SOURCE

  • iOS: -fcommon -DHAVE_MACHINE_ENDIAN_H -D_DARWIN_C_SOURCE

  • Create a new group "ofxPd"

  • Drag these directories from ofxPd into this new group: ofxPd/src

  • Add a search path to: ../../../addons/ofxPd/libs/libpd/pure-data/src under Targets->YourApp->Build->Header Search Paths (make sure "All" is selected)

  • Under Targets->YourApp->Build->Other C Flags (make sure "All" is selected), add

    -DPD -DUSEAPI_DUMMY -DPD_INTERNAL -DHAVE_UNISTD_H -DHAVE_ALLOCA_H -DLIBPD_EXTRA

    and the additional C flags noted above

    • Note: Make sure you use Other C Flags! Other C++ Flags will not work since libpd is written in C.
  • Under Other C++ Flags, add

    -DHAVE_UNISTD_H=1

For Linux (Makefiles):

Edit addons.make in your project folder and add the following line to the end of the file:

ofxPd

Using ofxPd with Visual Studio

Visual Studio only

As of spring 2020, the libpd sources should build directly in new versions of Visual Studio. Also, ofxPd projects use the included 64 bit copy of libwinpthread-1.dll used for the Msys2/MinGW build, so everything should be included.

Note: This has not been directly confirmed with OF & ofxPd. (At least no one has told me.) If you mainly use VS, try this first before building the libpd.dll via Msys2/MinGW.

Build libpd.dll with MinGW & use with Visual Studio

In order to use libpd with ofxPd in a Visual Studio project, you need a libpd.lib and libpd.dll libraries built using MinGW (Minimal GNU for Windows) which provides a Unix command shell and compiler.

You can check if there is a pre-compiled libpd for ofxPd available here:

http://docs.danomatika.com/releases/ofxPd/

If so, skip to the "Adding libpd" section, otherwise follow the steps below to set up a build environment and build libpd.

Building libpd with Msys2/MinGW

The steps for 64 bit are basically:

  1. Set up Msys2/MinGW: see https://github.com/libpd/libpd#windows
  • Make sure to follow all steps in the Msys2 setup instructions, ie. updating packages after install
  1. Open an Msys2 shell (64 bit)
  2. Build libpd: make
  3. Install libpd to a temp folder: make install prefix=build/libpd

Adding libpd to a Visual Studio project

Replace the libpd source code in ofxPd with the libpd headers and library files:

  1. Delete the ofxPd ofxPd/libs/libpd folder
  2. Copy libpd/build/libpd into ofxPd/libs

To set up a VS project using ofxPd, you need to link to the libpd.lib import library and place the runtime libraries for libpd in your project's bin folder.

Add libpd.lib to link stage of the Visual Studio project:

VS Linker properties

  • Set "x64" target
  • Project -> Properties
  • Make sure Active configuration & platform are set (you will need to do this for both Debug & Release builds)
  • Configuration Properties -> Linker -> Input
  • Additional Dependencies -> click on right hand drop down, choose Edit...
  • Add the path libpd.lib: $(OF_ROOT)\addons\ofxPd\libs\libpd\lib\libpd.lib

Add the runtime libraries to the project's bin folder:

  • libpd/build/libpd/lib/libpd.dll
  • libpd/libs/mingw64/libwinpthread-1.dll

Note: You will need to re-add libpd.lib to the VS link stage whenever you regenerate the project with the OF ProjectGenerator.

VS project layout

For 32 bit:

  • Open an Msys2 shell (32 bit)
  • Build libpd using make
  • Set the "Win32" target in your VS project before setting the libpd.lib path
  • Copy pthread from the "mingw32" folder: libpd/libs/mingw32/libwinpthread-1.dll

Screenshots provided by @moebiussurfing.

Contributing a libpd Build for Windows

If you have successfully built a new version of libpd for Windows, please consider contributing a copy for others to use.

Make a zip file with the following layout from your ofxPd directory:

bin/pd.dll
bin/libwinpthread-1.dll
libs/libpd/lib/pd.dll
libs/libpd/lib/libpd.lib
libs/libpd/lib/libpd.def
libs/libpd/include/ <-- libpd headers

Name the zip using the following format: "libpd-VER-ARCH-VS####.zip". For example,

"libpd-0.12-prerelease-x64-VS2017.zip" is a 64 bit build of libpd 0.12 (pre-release) using Visual Studio 2017.

Create an issue on the ofxPd Github repo about your new build and we can add it to the release builds link.

Notes

Audio Interfacing & Debugging Audio Issues

libpd as utilized in ofxPd does not handle any of the audio interfacing itself, but is called via the ofSoundStream system within openFrameworks. If you have any issues with the sound interface / audio apis themselves, please log an issue to the openFrameworks Github repo.

Sample Rate

The sample rate is set to 44100 when initializing ofxPd in the examples. If your sample rate is higher, the playback pitch will be higher. Make sure the sample rate is the same as your system audio sample rate to hear the correct pitch.

For example: The default sample rate on macOS is 96000. Running the app at 44100 results in double the playback pitch while initializing ofxPd at 96000 gives the correct pitch.

Running App in the Background on iOS

If you're using ofxPd to build an audio app on iOS, you probably want the app to keep running while in the background (aka switching between other apps or going to the home screen). You can enable this in Xcode by clicking on the Project in the project tree, selecting the "Capabilities" tab, and turning on the "Background Modes" switch, then checking "Audio, Airplay and Picture in Picture". Next, Set "Application does not run in background" to NO in the "Info" tab.

Disabling Automatic Screen Locking on iOS

You may be building an audio app for iOS that you want to run without the automatic screen locking mechanism closing it. You can disable the screen lock timer by adding the following to your ofApp setup() function:

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Bugs & Errors

OF 0.12 and Xcode: 'ext.h' file not found

The OF 0.12 ProjectGenerator seems to have an issue with setting the correct C flags. Check that the required flags specified in the "Adding ofxPd to an Existing Project" section are set in the Xcode project:

  1. Click on the project in the left-hand Project Navigator
  2. Under Targets->YourApp->Build->Other C Flags (make sure "All" is selected)
  3. If the entry is empty or is missing the required flags, set them

iOS app crashes immediately with something about "Microphone Description"

As of iOS version 10+, apps need to ask the user in order to use the camera, microphone, or location data. If you run an iOS project that uses microphone input (ie. pdExampleIOS), a text description is required or the app will be terminated by the OS.

Since the OF Project Generator (currently) doesn't know how to automatically add these description strings to the Xcode project, you will need to do it manually every time you (re)generate an iOS project.

See the steps listed in the "Running the Example Projects" section.

Xcode: Expected value in expression dispatch.h

The macOS 10.13 SDK now requires the HAVE_UNISTD_H to define a value. This has been fixed in ofxPd's addons_config.mk file. You can either use the OF ProjectGenerator to regenerate the Xcode project or add the following to your project's "Other C++ Flags":

-DHAVE_UNISTD_H=1

Pitch is off on the iPhone 6S

The iPhone 6S hardware seems to prefer a sample rate of 48000 and calling ofSoundStreamSetup() with 44100 will not change that in versions of OF 0.8.4 and previous. This means ofxPd will be running at 44100 but the audio stream is actually 48000, resulting in a higher pitch coming out of your patches and a lower pitch going in.

The fix is to follow Apple's method of setting the preferred sample rate, then grabbing what the actual sample rate is afterwards. You can then use this real value in ofSoundStreamSetup() and ofxPd::init(). The pdExampleIOS has been updated to show how to do this. Hopefully, this functionality will be added to OF in the future.

File "tr1/memory" not found in Xcode

You just upgraded to macOS 10.9 and Xcode 5 right? The default compiler is now LLVM and you need to rebuild your Xcode project files so OF will build correctly. Use the ProjectGenerator in the OF 0.8.0 download to regenerate the project:

  • Choose the parent folder of your project folder
  • Set the name of the project
  • Add ofxPd as an add-on
  • Hit generate

Also note, currently the PG doesn't seem to set the C Flags correctly, so you might have to add them manually. See "Adding ofxPd to an Existing Project" on how to do this.

Unknown type t_float, etc

The compiler doesn't recognize the internal Pd types because it's missing the C Flags needed to build libpd. See the section for your IDE in "Adding ofxPd to an Existing Project" on how to do this.

Undefined basic_ostream in XCode

If you get the following linker error in XCode:

Undefined symbols: "std::basic_ostream<char, std::char_traits<char> ...

you need to change the Base SDK to 10.6: Project > Edit Project Settings

RtAudio Hang on Exit in 0062

RtAudio will hang on app exit in OF 0062. The only way to fix this is to make a small edit to the OF 0062 core by editing lib/openFrameworks/sound/ofSoundStream.cpp and commenting line 143 so close() is not called.

"verbose" redefinition in Win Codeblocks

Currently, there is a static function in the videoinput lib on Win that conflicts with a #define in the Pure Data sources. The easy fix, until the OF core is updated, is to comment out line 115 in libs\videoInput\include\videoInput.h.

Note: This change hasn't been tested while using the ofVideoGrabber yet ... there is a slight chance it may cause a crash, be warned.

"undefined reference to SetDllDirectory" in Win Codeblocks

Newer versions of libpd check the windows version, so this needs to be set via a define in your Codeblocks project. If you have an old ofxPd project, this is not set, hence the error. See "Adding ofxPd to an Existing Project" above, and add the WINVER=0x502 define to your project.

Adding Pure Data external libraries to ofxPd

ofxPd only includes the standard set of Pure Data objects as found in the "Vanilla" version of Pd. If you wish to include an external library from Pd-extended, etc you need to include the source files in your project and call the library setup function after initializing ofxPd in order to load the lib.

Adding external source files

The source files for externals included with Pd-extended can be found in the Pure Data Git repositories: http://git.puredata.info/cgit. Other externals may be found elsewhere, including on GitHub.

For example, if we want to include the zexy external in your project, first download the sources files from the Git repository (make sure you have git installed):

git clone https://git.puredata.info/cgit/svn2git/libraries/zexy.git

Once cloned, the zexy sources are in zexy/src/. Copy the .h and .c files into your project folder. In my case I create an externals folder in the src folder of my project, something like myProject/src/externals/zexy. Then add these files to your project.

Note: Some libraries may require external libraries of their own and/or special compile time definitions. Make sure you read the build documentation on the external and include these with your project.

Calling the external setup function

In order for ofxPd to use an external library, the library has to register itself on startup. This is accomplished by calling the library's setup function which is named after the library followed by a "_setup" suffix: "library_setup()". The zexy setup function is simply "zexy_setup()". Call this setup function after initializing ofxPd in your app's setup() function:

if(!pd.init(numOutChannels, numInChannels, sampleRate, ticksPerBuffer)) {
	OF_EXIT_APP(1);
}

// load libs
zexy_setup();

...

If all goes well, you should see some sort of print from the library as it initializes:

[zexy] part of zexy-2.2.3 (compiled: Aug  7 2011)
	Copyright (l) 1999-2008 IOhannes m zmölnig, forum::für::umläute & IEM
[&&~] part of zexy-2.2.3 (compiled: Aug  7 2011)
	Copyright (l) 1999-2008 IOhannes m zmölnig, forum::für::umläute & IEM
[.] part of zexy-2.2.3 (compiled: Aug  7 2011)
	Copyright (l) 1999-2008 IOhannes m zmölnig, forum::für::umläute & IEM
...

For C++ and some C libraries, this is all your need. The project should compile and the external load fine. However, some pure C libraries are not written with explicit C++ support in mind and, for arcane reasons best not delved into here, the C++ compiler will not be able to find the library's setup function. This is the case with zexy and the compiler error looks like this:

'zexy_setup' was not declared in this scope

In order for the C++ compiler to find the function, we need to add our own declaration. This can be done in your app .cpp file, a project header file, etc. In order to keep things organized, I create an "Externals.h" header file and place it in myProject/src/externals. Here I declare the "zexy_setup()" function using a special syntax:

#pragma once

extern "C" {
	void zexy_setup();
}

The extern "C" keywords tell the compiler to look for a pure C function, not a C++ function. Make sure to include the "Externals.h" header file where you include "ofxPd.h". Add a setup function declaration for any other externals that need it here.

External library licensing on iOS

Apple's iOS and App Store policies forbid dynamically linking libraries. As such, you cannot include any GPL licensed externals as the GPL expressly requires dynamic linking. Submitting an app using a GPL library is in violation of the GPL and will most likely result in your app being rejected from distribution in the App Store.

GPL patches, however, are not in violation of GPL distribution policies and can be included. They are not compiled into an application binary and can be replaced by the user.

Developing ofxPd

You can help develop ofxPd on GitHub: https://github.com/danomatika/ofxPd

Create an account, clone or fork the repo, then request a push/merge.

If you find any bugs or suggestions please log them to GitHub as well.

ofxpd's People

Contributors

damian0815 avatar danomatika avatar falcon4ever avatar jonathhhan avatar mazbox avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ofxpd's Issues

ofxPd crashes on exit

I'm using OF0071 on Windows7, Codeblocks-mingw
Any app using ofxPd crashes on exit
Error message in debug mode:
#0 76F68C39 ntdll!RtlUpcaseUnicodeChar() (C:\Windows\system32\ntdll.dll:??)
#1 00000000 0x0081d008 in _argv() (??:??)
#2 00000000 0x0081d00c in mutex() (??:??)
#3 00000000 0x00000000 in ??() (??:??)

adding this to the ofxPd source "solves" the problem:
seems that calling _LOCK, _UNLOCK causes the error:
seeking for the real solution...

void ofxPd::clear() {

#ifndef TARGET_WIN32
    _LOCK();

    if(inputBuffer != NULL) {
        delete[] inputBuffer;
        inputBuffer = NULL;
    }
    PdBase::clear();
    _UNLOCK();
#endif

    channels.clear();

    // add default global channel
    Channel c;
    channels.insert(make_pair(-1, c));
}

no "examples" folder in openFrameworks/addons/ofxPd/example/

under "How to Create a New ofxPd Project" in the readme, it says:

To develop your own project based on ofxPd, simply copy the example project and rename it. You probably want to put it in your apps folder, for example, after copying:

openFrameworks/addons/ofxPd/example/ => openFrameworks/apps/myApps/example/

i find that there is no "example" folder in the ofxPd folder.
there's pdExample and pdExampleIOS

ali

system sound not playing on ios

Actually I tested the ofxpd ios example and the openframeworks audiooutputexample.

With the ofxpd every system sound isn't played at all (eg. keyboard clicks, shutter sound, etc.), with the audiooutputexample everythings works fine...

I'm testing on iphone 4 with ios 6.1

Seems like the libpd in ofxpd is initialized with mixingEnabled:YES but can't find it anywhere in the project.

Any chance to get rid of this behaviour?

simplify event listener system with message object and single callback

Currently there is a simple callback-based event listener with a callback for each message type. I propose a single callback where a message object and type enum is used to determine the type and how to parse the data.

void pdMessageRecieved(ofxPdMessage& message) {

    switch(message.type) {
        case OFX_PD_BANG:
            ...
            break;

        case OFX_PD_NOTEON:
            ...
            break;
    ...

Send to pd is being received twice.

I'm having a hard time tracking down whether this is a ofxPd issue or libpd issue, but I'm doing a sendList to pd and for some reason it's being received twice in the patch. I have a print in libpd showing that it only sends once and a print inside the patch and it's printing twice. Has this been seen before?

Problems compiling Xcode 6.0.1, oF 0.8.4

I experienced some strange issues when trying to compile this Addon on xcode 6.0.1.

First, I get issues when trying to compile files with the ~ in the group-(folder)-name. For example at bonk~.

I removed the issuing groups from the project, and compiling steps further.

Then I got next issue at the file s_file.c.

It says:
addons/ofxPd/libs/libpd/pure-data/src/s_file.c:234 Variable has incomplete type 'struct stat'

After a deeper analysis I figured out, that this lines here somehow seems to make problems in Xcode.
s_file.c, line 19 ff:

ifdef HAVE_UNISTD_H

include <sys/types.h>

include <sys/stat.h>

include <sys/types.h>

include <sys/stat.h>

include <fcntl.h>

include <unistd.h>

endif

I have the suspicion, that the #ifdef HAVE_UNISTD_H is not recognized proper. (I already added the compiler-flag -DHAVE_UNISTD_H)

When I try the open the linked file 'sys/stat.h', xcode says "symbol not found". But when I make this here:
// #ifdef HAVE_UNISTD_H

include <sys/types.h>

include <sys/stat.h>

include <sys/types.h>

include <sys/stat.h>

include <fcntl.h>

include <unistd.h>

// #endif

Then not only the project compiles nicely, but also Xcode finds the liked files. Is this an Xcode-issue? Does somebody else experiences this?

BTW: I was also wondering, why sys/types.h and sys/stat.h is included 2x....

trouble building iOS example

after some adjustments to to find all dependencies, i'm getting stuck with this error:

/Users/ali/GoogleDrive/Development/of_v0.8.4_ios_release/apps/myApps/example/src/AppCore.h:64:3: No template named 'vector'; did you mean 'std::vector'?

image

and this one:

/Users/ali/GoogleDrive/Development/of_v0.8.4_ios_release/apps/myApps/example/src/testApp.cpp:13:10: 'Poco/Path.h' file not found

image

Variable I/O channels

I'm having trouble getting ofxPd to work with a variable audio channel setup. I have a Pd patch configured so that the user can select the input and/or output channels (1-16) via a message from OF. This works fine when I'm using my interface that has 2 mic inputs; I just set the number of inputs via the following method:

pd->setup(2, 2, 44100, ticksPerBuffer);

and I'm able to select between two inputs with no problems.

However, I would like to configure it so that it can be using on interfaces that support up to 16 channels of audio. When I try to specify 16 channels of audio in OF using the following method:

setup(16, 16, 44100, ticksPerBuffer);

I get no sound at all on any channels. I'm using an interface that doesn't support 16 channels, so I'm guessing that's the problem. Is this assumption correct? If so, is there a way to dynamically set the number of channels? If not, what else might be the cause of the issue?

missing 0062 compatibilty

I started this addon with OF 007 in mind but after some calls for built in 0062 compatibility, I agree it would be good to have. I will start on this very soon and separate the code into branches to split the differences if needed.

Here's info from user Seth on the OF forums on getting the current code to build in 0062 for now:

Just wanted to let you know I have it running in 0062. Only minor changes really, and one fix in that the libpd_init_audio ticks_per_buffer need to be set dynamically (not always 1). There's a problem with the simulator on iOS and so ticks_per_buffer > need to be set to 512/ofxPD::getBlocksize();

If you want the code, I can package it up in a day or two. The thing above is the only real change - other than I just commented out the ofLog stuff since that's 007 only and then call process() from testApp's audioRequested().

ofxPd pdexample doesn't build in ofx 0.8.4

trying to get the first example working with 0.8.4,
i've added the "additional c flags" and also confirmed that the header search paths include

../../../addons/ofxPd/libs/libpd/pure-data/src

i'm getting compile errors:
/Users/ali/GoogleDrive/Development/of_v0.8.4_osx_release/apps/myApps/ofxPdTest01/src/ofApp.cpp:429:47: No member named 'numMessages' in 'ofxPd'

image

PdBase.cpp errors while compiling in Raspbian

Hi,

I'm getting this errors while trying to compile ofxPd in Raspbian Jessie:

/home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:57:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::clear()’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:63:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:65:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::addToSearchPath(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:71:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:73:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::clearSearchPath()’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:77:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:79:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual pd::Patch pd::PdBase::openPatch(const string&, const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:84:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:88:17: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:92:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::closePatch(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:103:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:107:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::closePatch(pd::Patch&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:114:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:116:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘bool pd::PdBase::processRaw(const float*, float*)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:122:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘bool pd::PdBase::processShort(int, const short int*, short int*)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:127:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘bool pd::PdBase::processFloat(int, const float*, float*)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:132:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘bool pd::PdBase::processDouble(int, const double*, double*)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:138:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::computeAudio(bool)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:145:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:147:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::subscribe(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:158:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:160:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::unsubscribe(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:178:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:180:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::unsubscribeAll()’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:195:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:199:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘void pd::PdBase::setReceiver(pd::PdReceiver*)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:214:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:216:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘void pd::PdBase::setMidiReceiver(pd::PdMidiReceiver*)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:220:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:222:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendBang(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:227:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:229:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendFloat(const string&, float)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:233:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:235:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendSymbol(const string&, const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:239:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:241:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::startMessage()’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:254:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:259:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::addFloat(float)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:281:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:283:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::addSymbol(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:307:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:309:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::finishList(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:328:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:330:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::finishMessage(const string&, const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:350:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:352:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendList(const string&, const pd::List&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:368:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:370:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:375:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < list.len(); ++i) { ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendMessage(const string&, const string&, const pd::List&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:394:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:396:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:401:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < list.len(); ++i) { ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendNoteOn(int, int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:413:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:415:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendControlChange(int, int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:419:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:421:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendProgramChange(int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:425:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:427:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendPitchBend(int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:431:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:433:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendAftertouch(int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:437:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:439:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendPolyAftertouch(int, int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:443:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:445:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendMidiByte(int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:450:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:452:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendSysex(int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:456:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:458:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::sendSysRealTime(int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:462:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:464:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘int pd::PdBase::arraySize(const string&)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:685:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual bool pd::PdBase::readArray(const string&, std::vector<float>&, int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:696:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:722:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(dest.size() != readLen) { ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual bool pd::PdBase::writeArray(const string&, std::vector<float>&, int, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:736:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘virtual void pd::PdBase::clearArray(const string&, int)’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:771:12: error: ‘_GUARD’ was not declared in this scope _GUARD(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘void pd::PdBase::lock()’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:811:11: error: ‘_LOCK’ was not declared in this scope _LOCK(); ^ /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp: In member function ‘void pd::PdBase::unlock()’: /home/pi/Documents/of_v0.9.3_linuxarmv6l_release/addons/ofxPd/libs/libpd/cpp/PdBase.cpp:815:13: error: ‘_UNLOCK’ was not declared in this scope _UNLOCK();

Any idea of what might be happening?

malloc: pointer being freed was not allocated

I received this once when trying to send a bunch of messages very quickly.

malloc: *** error for object 0xeee340: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug

It stopped on line:

"msgDest = dest;" in ofxPd::startList function.

_WIN32_WINNT not defined

Hello,
I've downloaded the latest version of ofxPd from Github repository (danomatika-ofxPd-007-47-g92869c8). When I compile the ofxPd codeblocks example project for Windows I get this error: "undefined reference to `SetDllDirectory'". The declaration of the SetDllDirectory function is in the winbase.h header file (in pure-data/src):

if (_WIN32_WINNT >= 0x0502)

define SetDllDirectory SetDllDirectoryW

endif

and in ofConstants.h (openFrameworks/utils) there is:

ifndef _WIN32_WINNT

    #   define _WIN32_WINNT 0x400

endif

so it seems like _WIN32_WINNT is not defined.
I've tested the project on Windows 7 and XP.

My solution is to insert "_WIN32_WINNT=0x0502" in the "#define" section of Codeblocks project build options.
Does anyone have the same problem?Is there another way to fix it?

Thank you!

Error in compiling "pthread.h - no such file or directory" (CB::12.11 and OF 0.8 on Win7)

Hi,
I have CB::12.11 and OF 0.8 on a freshly installed Win7 computer.

ofxPd examples didn't compile because of pthread.h missing. Had a quick research (here too https://github.com/danomatika/ofxPd/issues/new) and had it to compile with this workaround. Not the cleanest solution, but hei! It worked.

  1. Copy pthread.h and sched.h into MinGW/include (I've got the files from here ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-1-10-0-release/include/)
  2. Get libpthreadGC1.a from ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-1-10-0-release/lib/ rename it to libpthread.a and copy into MinGW/lib
  3. Get pthreadGC1.dll again from ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-1-10-0-release/lib/ and copy it into MinGW/bin

Dynamically change ticksPerBuffer

On iOS, the preferred/requested buffer size may not be the one the OS will use and other apps have the ability to change the size.

If PD's ticksPerBuffer is using the preferred size and not the actual, it'll cause a mismatch.

We need a way to update the ticksPerBuffer so that it matches the actual size the OS is using. I believe the ticksPerBuffer (on iOS at least) should always be sampleRate/actualBufferSize.

What's the easiest way to change the ticksPerBuffer size on the fly?

vs 2010 sln file missing

I am not seeing the visual studio 2010 solution file in the example directory. Might have been lost somewhere along the way?

add ofx::pd namespace?

I'm thinking of wrapping the ofx pd types in an ofx::pd namespace. Does this make sense?

Can't run examples on iPad, iPhone with OF 0.9.8

Hi,

I'm having multiple issue running the examples.

  • I believe ES1 no longer works on my devices, so I switched to ES2.
  • ofxAccelerometer was giving errors, so I commented it out.
  • It complained about permission to use the microphone, so I added that.
  • Now the app just closes 2 seconds after starting, without showing any GUI, just the OF logo.

Is ofxPd known to work on current iOS devices with OF 0.9.8?

[delread] runs at about 1/2 speed

I'm not sure if this is iOS only, but for some reason when running in PD [delread] reads at one speed and on an iOS device it reads at around 1/2.

You can test this by using a delwrite of 2000 and delread of 400. The delay is much slower on the device.

Hard to say if this is libPD, ofxPD, or some other anomaly.

ofxpd ios App rejected

"We found that your app auto-disables the shutter sound of the camera when a photo is taken..."
this probably is due to the background mode that is on by default.
How to disable the pd background audio (eg. mixingEnabled:NO in obj-C)?

Messages getting mixed up?

I'm currently getting the following:

    OF: OF_LOG_ERROR: ofxPd: Can not start list, message in progress  
    OF: OF_LOG_ERROR: ofxPd: Can not add symbol, message not in progress  
    OF: OF_LOG_ERROR: ofxPd: Can not add float, message not in progress  
    OF: OF_LOG_ERROR: ofxPd: Can not add float, message not in progress  
    OF: OF_LOG_ERROR: ofxPd: Can not add float, message not in progress  
    OF: OF_LOG_ERROR: ofxPd: Can not finish message, message not in progress  

Even if I have this wrapped around the code, it still happens.

      if(!pdRef->isMsgInProgress()){}  

Due to this, occasionally I'm getting some 'error: unpack: type mismatch" errors from PD. I think somehow the messages are getting mixed up and lists are being sent to the wrong place when multiple are sent at the same time. It's causing a nasty distortion when it happens in my case.

My thought is this is occurring because I'm sending lists at the same time or something. One list is being sent on a certain frame number and that runs fine without the error. Another list sends x/y movement to PD on a touch move event. If I only send the frame based event OR I only send the touch based event it runs fine. Once they're mixed, they start to conflict on occasion.

My recommendation to test this would be to send a list of 2-3 floats in the update function and then a list on touch/mouse move to see if you can recreate this.

Crash while opening/closing the Pd patch on Mac OSX

Hi, I found out ofxPd app crashes randomly while opening/closing Pd patches using pd.openPatch() and pd.closePatch() on Mac OSX.

Here's a simple example code you can test.

In ofApp.h

    ofxPd pd;
    Patch patch;
    bool isPatchOpened;
    int keyCount;

in ofApp.cpp

//--------------------------------------------------------------
void ofApp::setup() {
    
    ofSetFrameRate(60);
    ofSetVerticalSync(true);
    
    int ticksPerBuffer = 8;
    int numInputs = 1;
    
    ofSoundStreamSetup(2, numInputs, this, 44100, ofxPd::blockSize()*ticksPerBuffer, 3);
    
    if(!pd.init(2, numInputs, 44100, ticksPerBuffer, false)) {
        OF_EXIT_APP(1);
    }
    pd.addReceiver(*this);

    pd.start();
    
    isPatchOpened = false;
}

//--------------------------------------------------------------
void ofApp::update() {
    
    if (!isPatchOpened) {
        
        patch = pd.openPatch("pd/test.pd");
        isPatchOpened = true;
    }
    else {
        
        pd.closePatch(patch);
        isPatchOpened = false;
    }
    cout << "keyCount : " << ++keyCount << endl;

}

//--------------------------------------------------------------
void ofApp::draw() {
    
    ofSetColor(0, 255, 0);
    ofDrawRectangle(100, 100, 200, 200);
    
    if (isPatchOpened) {
        
        ofSetColor(255, 0, 0);
        ofDrawCircle(200, 200, 100);
    }
}

If you run the app, it will try to open and close a pd patch every frame.
At some point, you will see the app crashing.

screen shot 2017-07-12 at 3 00 07 pm

Sometimes, it also crashes on resizeBytes() or sometimes it crashed on some method in ofUtils.cpp

screen shot 2017-07-12 at 3 30 23 pm

It seemed like the heavier patch I use, the earlier the crash occurred.
So if you want to see the crash earlier, you can simply create [osc~] x 100 times on the empty patch and try with it.

I also tested this on iOS and Android but they both seemed to be working fine.
So I'm guessing that it is a Mac OSX specific problem.

I used OF v0.9.8 on Mac OSX 10.11.6.
I really hope it can be fixed.

Thank you.

Bad access when opening path?

Hey,

Im getting a bad access code when opening the pd patch, the error showing on every step of the file loading. This happens when building for IOS release, debug works fine. Do you know how to fix this?

Codeblocks seemingly not being officially supported from of/windows 0.84

Since there are no official distributions for codeblocks on windows, could you provide visual studio 2015 compatible instructions, ore any hints on what it would take to make this addon work with a windows machine and the latest releases of openframeworks? anything is much appreciated :)

Problem setting up ofxPd example on Android

Hi, I'm trying to run ofxPd example on Android devices using Android Studio on OSX.

First of all, I could successfully compile and run of_v0.9.8_android_release/examples/android/androidEmptyExample on Android Studio.

But I wasn't sure how to properly add ofxPd addon on top of the androidEmptyExample.
So I just tried locating ofxPd folder into androidEmptyExample/src but when I build it, It fails with the errors as you can see in the screenshot below.
screen shot 2017-06-12 at 1 09 18 pm

I thought it has to do with C Flags so I added them on androidEmptyExample/jni/Android.mk file but it doesn't seem to have any effect.
How can I properly add C Flags on Android Studio?
Many Thanks.

Zack

pitchbend values off

Sending a pitchbend value of 2000 from ofxPD yields a value of 10192 in PD. The numbers should match.

hang on exit

The example app hangs on exit in both OF 0062 and 007.

pd.sendFloat to reverb doesn't work

Hi, I'm trying to send float to reverb but doesn't work, I do the same with a delay and it woks and is the same process.
Here you can see some screenshot from my project.

patch of pd:

captura de pantalla 2014-06-22 a la s 17 51 06

source code in OF:

captura de pantalla 2014-06-22 a la s 17 52 30

I think the value of sendFloat works properly, because when I print it on the consol it shows the correct number

Do you know how can I solve it?

Thanks

Update samplerate when it changes.

Right now on audioInput and audioOutput we check to make sure channels and bufferSize are correct and if not, then we re-init with the correct ones. We may also need to include samplerate in that since samplerate can change (especially on iOS) when you switch between devices (airplay, iphone, bluetooth, etc).

App crashes on Android when back button is pressed

Hi, first of all thank you for your amazing work.
I could successfully build and run ofxPd on Android device.
But I found out that my app crashes as soon as I press back button on my phone.
This is the logcat message when the app crashes.

06-30 00:11:35.851 14319-14349/? A/libc: Fatal signal 11 (SIGSEGV) at 0x00000008 (code=1), thread 14349 (Thread-50619)

If I don't initialize pd, the app didn't crash.
But once it is initialized with pd.init(), even if I close patch and stop audio, the crash still occured.

Any advise or guidance would be greatly appreciated.
Thank you so much!

license needed

ofxPd needs a license. I'm thinking BSD or LGPL since I want to be able to use it on iOS.

OF 0071 support

Update ofxPd for 0071 api changes and setup/test using the Project Generator to create the example projects.

stream access for message passing

It would be nice to have automatic type handling via the C++ stream operator <<:
pd << BeginMsg() << "a string" << 100 << 2929.22 << EndMsg();

Also, BeginMsg could take a receive object as the target:
pd << ofxPdBeginMsg("receive1") ...

compiling on raspbian

hi dan.

i ran into problems compiling ofxPd under Raspbian GNU/Linux 8 on a raspberry pi.
needed to include an additional header (bits/sigaction.h) and add some defines for it to compile.

as far as i can see it should not be necessary to include sigaction.h, it should be included by signal.h. not sure whats going on. to include it explicitly resolved my issues, but makes problems on other platforms.

it looks like BYTE_ORDERand LITTLE_ENDIAN are not defined (anymore?), so i needed to set the defines:

#define BYTE_ORDER __BYTE_ORDER
#define LITTLE_ENDIAN __LITTLE_ENDIAN

h_addr could not be resolve, so a define for this also helped:

#ifndef h_addr
#define h_addr h_addr_list[0] /* for backward compatibility */
#endif

and no define for u_short, so:

#ifndef u_short
#define u_short unsigned short
#endif

it works, but looks a bit hackish.
i wonder if the problems could be resolved a bit nicer.

apart from the sigaction.h include it would be just some ifdefs (not much to worry about)
if there is a nicer solution for the include, i could offer a PR.

any ideas?

thread safety

Should there be built in thread safety? It could be implemented using a Poco::Mutex. Currently there is a pthread_mutex used for Linux only.

iOS: Program received signal: “EXC_BAD_ACCESS”.

When sending a list at a high rate (every 20ms or so) the app will crash with “EXC_BAD_ACCESS” at the line ADD_ARG(SETFLOAT); in z_libpd.c

void sendListFunction(){

pdRef->startList("PlayList");

for(int i = 0; i < 15; i++){
pdRef->addFloat(1);
pdRef->addFloat(2);
}

pdRef->finish();

}

I haven't been able to get more debug information than that. The SETFLOAT value seems to be valid so I'm not sure why it'd be crashing. I initially thought maybe it was trying to send a new list before the previous was sent, but that's not the case since bMsgInProgress stops that from happening. This only occurs if sending quickly. If sending at a slow rate there isn't an issue.

Loading a huge file onto patch and start dsp at the same time

hi dan,

in my patch I use a lot of tables and load 2GB of sound files to them using soundfiler object when the patch is opened and at the same time I start dsp inside the patch, using ";pd dsp 1" message in a message box connected to a loadbang. It always produces a crash.

Mac OS 10.12, of0.9.8, Xcode8
com.apple.audio.IOThread.client EXC_BAD_ACCESS.

Bug, duplicate symbols

I tried to include ofxPD in a Project but I became a linker error, 30 duplicate symbols. I tried to compile the examples, but was the same, again 30 duplicate symbols.
I found some similar posts, but I couldn't find any solutions. I looks like there is a problem with "g_list_all.h" . I follow the instructions from Readme file. The errors are lister below.
I'm working with OF 0.98 on OSX Sierra, Xcode 8.3, ofxPd was compiled with the following flags: -DHAVE_UNISTD_H -DUSEAPI_DUMMY -DPD -DLIBPD_EXTRA -DLIBPD_USE_STD_MUTEX -DHAVE_LIBDL
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_array.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_bang.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_canvas.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_clone.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_editor.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_graph.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_guiconnect.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_hdial.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_hslider.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_io.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_mycanvas.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_numbox.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_readwrite.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_rtext.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_scalar.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_template.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_text.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_toggle.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_traversal.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_vdial.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_vslider.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
g_vumeter.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
m_binbuf.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
m_pd.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
s_inter.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
s_loader.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
x_array.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
x_misc.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
x_scalar.o
duplicate symbol glistreloadingabstraction in:
g_all_guis.o
x_text.o
ld: 30 duplicate symbols for architecture x86_64

linux codeblocks build instructions error

This did not work
config.make has no such USER_CFLAGS USER_LDFLAGS or USER_LIBS
and after adding them new to config.make the project will build but no object files are created nor anything in bin like debug or release
????

thanks

"

For Linux (Makefiles & Codeblocks):
edit addons.make in your project folder and add the following line to the end of the file:

ofxPd

edit config.make in your project folder and change the lines for USER_CFLAGS, USER_LDFLAGS and USER_LIBS to:

USER_CFLAGS = -DHAVE_UNISTD_H -DUSEAPI_DUMMY -DPD -shared
USER_LDFLAGS = --export-dynamic
USER_LIBS = -ldl -lm

"

Project built with the OF project generator and ofxPd doesn't compile out of the box

To compile successfully, the pure-data files need to have some definitions: they have been set correctly in the add-on example, and they are defined in addon_config.mk, but using the OF project generator they end up in "Other C++ flags" instead of "Other C Flags"
ADDON_CFLAGS = -DHAVE_UNISTD_H -DUSEAPI_DUMMY -DPD

Is there another line to specify the "Other C Flags" in the addon_config.mk? or is it the project generator making no difference between C++ and C flags and always lumping them as C++ Flags? either way, a project built with the ofxPd addon added to the project generator won't compile out of the box

iOS audioinput buffer causes crash on setup

some compiler errors arise when initializing ofxPd on iOS if you use microphone input. if using lots of memory with your app, sometimes BAD MEMORY access arise because of the audioIn(float* input, int bufferSize, int nChannels) function in ofxPd.cpp

at first time, initial buffer size is larger than desired, no matter how I set ticksperbuffer, etc. so I ended up adding this:

void ofxPd::audioIn(float* input, int bufferSize, int nChannels) {
try {
if(inputBuffer != NULL)
{
if(bufferSize==inputBufferSize)
{
_LOCK();
memcpy(inputBuffer, input, bufferSize_nChannels_sizeof(float));
_UNLOCK();
}
else
{
cout << "skip init buffersize" << endl;
}
}
}
catch (...) {
ofLogError("Pd") << "could not copy input buffer, " <<
"check your buffer size and num channels";
}
}

where inputBufferSize set manually to desired buffer size. after adding this, everything works fine, no bad memory access anymore. hope this helps

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.