Git Product home page Git Product logo

pdparty's Introduction

PdParty

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.

PdParty website | PdParty on the App Store

This project has been supported in part by:

Description

Run your Pure Data patches on iOS with native GUIs emulated. Inspired by Chris McCormick's Android PdDroidParty and the (now defunct) original RjDj app.


(Image from PdDroidParty)

User Guide & Composer Pack

Head on over to the User Guide

&

Download the PdParty Composer Pack which contains the abstractions you need when composing on your computer as well as scene type templates.

Beta Testing

PdParty releases are available on the App Store.

Want to help with BETA testing new prerelease-versions? Send your name & email address to:

Acknowledgments

3rd Party Libraries

This project uses:

  • libpd: audio engine
  • pd externals:
    • ggee: getdir, stripdir, moog~
    • mrpeach: midifile
    • rjlib: rj_accum, rj_barkflux_accum~, rj_centroid~, rj_senergy~, rj_zcr~
  • liblo: Open Sound Control i/o
  • GCDWebServer: WebDAV server
  • minizip: support for decompressing zip archives
  • MBProgressHUD: progress spinner overlay

3rd Party Samples

  • CanOfBeats, drummachine, multibeat, & pure-widgets-demo: Chris McCormick
  • Atsuke: Frank Barknecht
  • Eargasm: Damian Stewart
  • bouncy: Georg Bosch
  • Elemental - Rain: Tiago Brizolara

3rd Party Resources

Checkout & Build

Clone this repository and checkout it's submodules using git:

git clone https://github.com/danomatika/PdParty.git
cd PdParty
git submodule update --init --recursive

Open the Xcode project and Build/Run.

You can upgrade to newer versions of the libraries used by the project by running the update scripts in the scripts dir which clone the library and copy it's source files into libs.

Developing

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

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.

pdparty's People

Contributors

danomatika avatar diglesia-google avatar fomalsd 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

pdparty's Issues

OSC support

Add in-app OpenSoundControl support using one of these libs:

This is in addition to the mrpeach OSC pd objects and should be able to stream touch & accel data.

Also add ui controls (ala TouchOSC) for:

  • in & out ports
  • set remote hostname
  • show hostname (ip address)

Beta test framework

Add/Use a beta testing framework in order for people to try out the app before submitting it to the AppStore.

Frameworks:

Linker fails on liblo

On build/run from XCode:

ld: library not found for -llo
clang: error: linker command failed with exit code 1 (use -v to see invocation)

The XCode proj shows red for libs/liblo/liblo.a. Missing the file in repo?

OSC settings ui

An OSC settings page similar to TouchOSC for:

  • target host ip or hostname (for Bonjour)
  • incoming port
  • outgoing port
  • enable mulitcast?

RjDj style touch & accel events

Add RjDj / Android ScenePlayer compatible event messaging, ala

  • [#touch]
  • [#accel]

etc

Perhaps add something for device rotation?

  • [#rotate] ?

PD dev console

Add ability to show the PD console as some sort of modal sheet. Super useful for debugging patches in PdParty, ie seeing which abstractions couldn't create, etc.

CoreMidi settings ui

Add a settings page for CoreMidi:

  • enable autoconnect (currently on by default)
  • enable network midi (currently on by default)
  • select specific in and out ports

Something similar to the TouchOSC settings

Zipped scene support

Add the ability to process zipped RjDj etc scenes. Not sure yet where they would come from, perhaps through iTunes copying?

Libraries:

Allow widget subclasses to use factory creation methods.

Hi Dan, thanks for the recent refactoring that makes Gui.h easier to subclass. It's a great help. One more tweak would allow easier subclassing of the widget classes as well.

In each widget's class method for creation (e.g. toggleFromAtomLine:withGui), it allocs an object of the base class, not of a subclass.
Replace each use of
Toggle *x = [[Toggle alloc] initWithFrame:]
with
Toggle *x [[[self class] alloc] initWithFrame:]
to alloc the subclass.

Radio default value.

Radio.m gets its value from atomline[6]. However, that value is not the value written by initial value, but (according to https://puredata.info/docs/developer/PdFileFormat#r34) a switch value that is not used. This means that radios are being initialized to value of 1 unexpectedly.
Radio shouldn't get a value unless "init" is on, and then it should behave as it currently does, to read a separate init value at the end of the atom line.
Thanks!

hide/show nav bar & status bar

Hide nav & status bar when working with a patch. Show again using either a long tap or a small/hidden button in the upper right corner like TouchOSC.

Share button for recordings?

Maybe add a share button to the browser for audio recordings? Basically convert wav to mp3/m4a and then send via email. Another option is to allow copying files into another app like Dropbox.

Crash on display of large numbers in a small number box.

Display a large number in a number box of width = 5.
Expected behavior: display of "+" (or "-" for negative).
Actual: crash from an out of bounds error.
[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'

It occurs in Widget.m line 257, because string.length is 1 (having been set to "+" in line 242), and thus "old_exp_index" has a value of -3 at ln 254.

WebDAV Documents access

Add a WebDAV server for access to the app Documents folder. The server should have an on/off control, a configurable ip port, and show it's current ip address. It should also support Bonjour if possible on local networks.

Server library: CocoaHTTPServer

Location services not being enabled

Location Services is not being enabled on some installs:

just tried geolocation on my iPhone 6s and no data but getting others like accelerometer and gyro

Also see that there is no option to enable Location Services for PdParty in the Settings app. There should be a popup asking permission the first time PdParty is run but that might not be happening.

Number box is clipping incoming/outgoing values to its max/min.

Connect three number boxes in a row; the middle box has min/max values.

e.g.

N canvas 0 22 126 187 10;

X floatatom 11 46 5 10 20 1 - num1send num2send, f 5;

X floatatom 11 25 5 0 0 0 - - num1send, f 5;

X floatatom 11 67 5 0 0 0 - num2send -, f 5;

Initial displayed value of the middle box:
Expected (as per behavior in Pd vanilla .46): 0.
Actual: the min value (above, 10)

Drag the first number box
Expected: values outside of the middle box's range are still passed through the second box (and displayed in the second box.
Actual: both output value and display value are clamped to the range.

running scenes not closed on iPhone

Scenes are not closed when selecting new scenes, so patches keep adding up .. whoops. This works fine on the iPad, so it must be something due to the use of seques on the IPhone.

gui objects antialiased after rotation

Something's going on with the subpixel drawing when a reshape is called after a rotation. If the same patch is existed and reopened in the new orientation, it's rendered correctly (non antialiased).

1.0

First release version

Array widget

Implement an Array widget so patches like C08.analog.sequencer.pd work in PdParty:

screen shot 2016-01-22 at 6 12 17 pm

I'm not 100% sure this is feasible or a good idea. Will need to check how array messaging works in order to find the most efficient way to display & update each array.

patch load autosizing/aspect ratio via scroll view

Currently, loading a patch locks the orientation based on the patch's aspect ratio but does not auto rotate the app interface. This isn't possible on iOS without a hardware rotation event, so to avoid bad scaling in the wrong aspect, the best solution is probably to use a scroll view. Now to work that out ...

Normalize #touch coordinates

Since this is a universal app and will run over multiple screen resolutions and orientations, it makes sense to normalize the screen coordinate system.

Play/Pause button controls audio unit not libpd DSP

Currently, the Play/Pause button in the ControlsView enables/disables the PdAudioController which completely disables both DSP & signal rate messages when off as the libpd process functions are not called.

Perhaps a better approach is to have the button control the libpd DSP instead so signal rate messages still work and overall behavior matches that of the DSP button on Pd desktop.

The only downside to this change is that the audio unit will still be running in the background if the DSP is off and could lead to more resource usage. Then again, this is probably true of pretty much any other iOS audio app. If needed, a settings option could be added to switch this behavior.

Metadata info for recordings?

RjDj style metadata info panel for recordings:

  • Scene
  • Recorded
  • Duration
  • Button to play associated scene (if it's installed)

advanced DroidParty abstraction support

Support for the advanced DroidParty abstractions:

  • [ribbon]
  • [mknob]
  • [loadsave]
  • [menubang]
  • [droidsystem]
  • [droidnetclient] DEPRECATED
  • [droidnetreceive] DEPRECATED

Record button not working

The record button stopped working after moving the recorder.pd & playback.pd from lib/rj to lib/pd. The path was updated for playback but not recording, so the recording patch is not open when the record button is being pressed.

Replacement of dollar-sign-zero values does not work

  • Create a pd patch with a single gui item. Give it a label/sendname/receivename using $0, e.g. $0-foo.
  • Expected: label is shown in PdParty as the assigned number, e.g. "1003-foo".
  • Actual: shown as "#0-foo".

Even though the user writes $0, it is actually encoded in the .pd file atom line as $0:
#X floatatom 69 17 5 0 0 0 #0-baz #0-bar #0-foo, f 5;
And so is not caught by Gui.m line 282, which scans for "$0".
Did pd used to encode '$0' that way? Is it as simple as switching the match pattern to "#0" or is there more complexity at work here?

file_000

Dropped widget initialization.

It looks like some of the initialization behavior (when widget.inits is true) has changed within the last few months, yielding behavior different than PureData on other platforms.

  • Widget, on calling setup, does not fire the init value on any of its subclasses. sendInitValue is empty (whereas it used to call [self sendFloat]).
  • Bang, on calling sendInitValue, shows the bang animation but does not send out a bang.
  • (Not a regression, but noticed it): Number 2 overrides sendInitValue to no-op, with a comment that it doesn't send out a value in pd. However, Number2 does seem to send out a value on init in pd.

RjDj sensor messages

Check for the following RjDj message types, as mentioned on the pd-list:

  • #compass
  • #loc
  • #gyro
  • #time

Implement, if needed.

Key events

Add key events from bluetooth keyboards and things that emulate keyboards (iCade, iControlPad, etc) so [key], [keydown], etc work.

PartyScene device-specific patch loading

Just an idea, support a device specific main patch that allows you to make two interface files:

  • _main_ipad.pd
  • _main_iphone.pd

This way, there is a bit more control on the sizing of things for specific devices. The guts of the patch can then be implemented in an abstract that is loaded but both.

GPS events

Add ability to turn on the GPS chip, request current location, turn on location streaming and poll frequency (soundwalks!), etc. The receive could be [#gps].

Device orientation?

Extend the #rotation events with device 3d orientation events like "facingdown" and "facingup"? Currently, the view orientations are only 3d, but querying the device orientation gives 3d rotate events.

sound output over bluetooth

hi,

thanks for pd party, which is awesome ! for some reason the audio output seems to not work over bluetooth.
i suppose this is linked to the way the audio devices is accessed to reduce the latency. but other applications like Korg Gadget work fine over bluetooth for audio. could you have a look ?

regards

compile error Crashlytics/Crashlytics.h not found

in AppDelegate.m:

When building project, getting a not found error on this header file:

#import <Crashlytics/Crashlytics.h>

The problem was that in build settings, the Framework Search Path had an absolute path to the libs folder with your user name - After changing it to actual location it compiled

Radio widget layout drawing.

the frame computation in [Radio reshape] determines the bounds of the view by:

float cellSize = ceil(self.size * self.gui.scaleX);

but the cells themselves are drawn in drawRect with:

float cellSize = round(self.size * self.gui.scaleX);

Thus yielding the attached image.
I'm exporting a pull request that merely changes the bounds computation to also use |round|.
simulator screen shot jan 28 2016 10 55 43 am

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.