I added a bit more error handling for MIDI recently. I’d love any help with error handling & tests you have time for! I plan to flesh out the test suite a lot, it’s mostly just a handful of checks for pitch handling stuff in the tune module right now…

The python package index distribution is now up to date with github. I’ll start publishing new releases every weekend through the end of July. https://pypi.python.org/pypi/pippi

1 Like

I had a really great day today.

Deleted a ton of code and added a bunch of functionality.

New release soon, probably tomorrow!

Anyone out there still kicking the tires? :slight_smile:

1 Like

I’m just about to test it out. Will be focused on MIDI - experimenting with using an RPi to run my grids. Looking forward to checking it all out - thanks so much for sharing your work!

1 Like

I love it when things work out that way :slight_smile:

1 Like

Awesome, thanks so much!

Hi everyone. Since this thread, last year I started on a 2.0 branch of pippi which was a total rewrite (except most of the tune.py module) for python3 and a totally different model based on standard python ideas like SoundBuffer and Wavetable data types with operator overloading for expressive manipulation.

Anyway, it’s buggy but I just released alpha 9, and started on beta 1, which is mostly focused on fixing bugs and writing docs.

The project is still on github: http://pippi.world

If you are a python person or otherwise have time to play around with this I’d appreciate beta testers still! Thanks!

3 Likes

Here are a couple random sketches made with pippi 2.0:

https://www.dropbox.com/s/uc96rk7xb2kiwyn/perfume-mix-11.wav?dl=0

https://www.dropbox.com/s/5en8vrgrbvyfax9/stlong.flac?dl=0

2 Likes

I’ll be fiddling with this later today… will report back. Cheers!

1 Like

Pushed a couple bugfixes recently:

2.0.0 - Beta 1 (In Development)
Better overflow handling in SoundBuffer.adsr and wavetables.adsr
Fixed a bug with SoundBuffer.remix when mixing to a single channel

https://github.com/luvsound/pippi#200---beta-1-in-development

Here’s a few more little synthesis sketches with the 2d osc:

https://www.dropbox.com/s/8voa3ghu9q842qw/osc2d_out4.flac?dl=0
https://www.dropbox.com/s/yj0xklcqmx8loa8/osc2d_out3.flac?dl=0
https://www.dropbox.com/s/s2plnigdex40sze/osc2d_out2.flac?dl=0

1 Like

Beta 1 is up on pypi now: https://pypi.org/project/pippi/2.0.0b1/

Changelog:

Features

  • Added fx module
  • Added first pass fx.go granular overdrive effect. See examples/fxgo_example.py for usage.

Bugfixes

  • Fixed a packaging issue preventing the tune module from loading.
  • Better overflow handling in SoundBuffer.adsr and wavetables.adsr
  • Fixed a bug with SoundBuffer.remix when mixing to a single channel
  • Fixed a bug during Wavetable initialization when using wavetable flags to create a window.

Here are renders from all the example scripts in sequence!

https://www.dropbox.com/s/f0vslnkc2ja06jm/example_mix.wav?dl=0

Examples:

https://github.com/luvsound/pippi/tree/master/examples

(venv) shree@shree-linux2:~/pippi$ make test
python -m unittest discover -s tests -p ‘test_*.py’ -v
test_addIntervals (test_chords.TestChords) … ok
test_getChord (test_chords.TestChords) … ok
test_getExtension (test_chords.TestChords) … ok
test_getIntervals (test_chords.TestChords) … ok
test_getQuality (test_chords.TestChords) … ok
test_getRatiofromInterval (test_chords.TestChords) … ok
test_dub_into_empty_sound (test_dub.TestDub) … ok
test_dub_overflow (test_dub.TestDub) … ok
test_graincloud_with_density_lfo (test_graincloud.TestGrainCloud) … ok
test_graincloud_with_length_lfo (test_graincloud.TestGrainCloud) … ok
test_graincloud_with_read_lfo (test_graincloud.TestGrainCloud) … ok
test_graincloud_with_speed_lfo (test_graincloud.TestGrainCloud) … ok
test_maxspeed_graincloud (test_graincloud.TestGrainCloud) … ok
test_minspeed_graincloud (test_graincloud.TestGrainCloud) … ok
test_unmodulated_graincloud (test_graincloud.TestGrainCloud) … ok
test_create_sinewave (test_oscs.TestOscs) … ok
test_create_wt_stack (test_oscs.TestOscs) … ok
test_eu (test_rhythm.TestRhythm) … ok
test_topositions (test_rhythm.TestRhythm) … ok
test_create_empty_ring_buffer (test_ringbuffer.TestRingBuffer) … ok
test_create_ringbuffer_from_soundfile (test_ringbuffer.TestRingBuffer) … ok
test_read_streamed_blocks_from_ringbuffer (test_ringbuffer.TestRingBuffer) … ok
test_stream_blocks_into_ringbuffer_from_soundfile (test_ringbuffer.TestRingBuffer) … ok
test_clip_soundbuffer (test_soundbuffer.TestSoundBuffer) … ok
test_create_buffer_from_soundfile (test_soundbuffer.TestSoundBuffer) … ok
test_create_empty_buffer (test_soundbuffer.TestSoundBuffer) … ok
test_pad_sound_with_silence (test_soundbuffer.TestSoundBuffer) … ok
test_pan (test_soundbuffer.TestSoundBuffer) … ok
test_random_split_buffer (test_soundbuffer.TestSoundBuffer) … ok
test_save_buffer_to_soundfile (test_soundbuffer.TestSoundBuffer) … ok
test_slice_frame (test_soundbuffer.TestSoundBuffer)
A SoundBuffer should return a single frame … ok
test_slice_sample (test_soundbuffer.TestSoundBuffer)
Slicing into the second dimension of a SoundBuffer … ok
test_speed (test_soundbuffer.TestSoundBuffer) … ok
test_split_buffer (test_soundbuffer.TestSoundBuffer) … ok
test_taper (test_soundbuffer.TestSoundBuffer) … ok
test_transpose (test_soundbuffer.TestSoundBuffer) … ok
test_window (test_soundbuffer.TestSoundBuffer) … ok
test_bad_wavetable_type (test_wavetables.TestWavetables) … ok
test_bad_window_type (test_wavetables.TestWavetables) … ok
test_polyseg (test_wavetables.TestWavetables) … sine
<_sre.SRE_Match object; span=(0, 4), match=‘sine’>
None
sine
None
None
1,tri,0-1
<_sre.SRE_Match object; span=(0, 9), match=‘1,tri,0-1’>
1
tri
0
1
rand,0.3-0.8
<_sre.SRE_Match object; span=(0, 12), match=‘rand,0.3-0.8’>
None
rand
0.3
0.8

ERROR
test_randline (test_wavetables.TestWavetables) … ok
test_random_wavetable (test_wavetables.TestWavetables) … ok
test_random_window (test_wavetables.TestWavetables) … ok
test_wtclass (test_wavetables.TestWavetables) … ok

======================================================================
ERROR: test_polyseg (test_wavetables.TestWavetables)

Traceback (most recent call last):
File “/home/shree/pippi/tests/test_wavetables.py”, line 53, in test_polyseg
wt = wavetables.polyseg(score, length)
TypeError: Argument ‘segments’ has incorrect type (expected list, got str)


Ran 44 tests in 1.152s

FAILED (errors=1)
Makefile:4: recipe for target ‘test’ failed
make: *** [test] Error 1

1 Like

Yep, the wavetables.polyseg generator isn’t done. (Working on a concise way to compose wavetables from other wavetables.) There’s a failing test in there on purpose to remind me to finish it! Glad to see all the other tests are passing on your platform. :slight_smile: Looks like linux based on the path to your home dir, do you mind sharing what distro you tested with? (oh duh also the word linux is in your hostname, also a clue haha. so probably running in a vm?)

Thanks!

2 Likes

That’s offputting though (including failing tests in alpha/beta releases)…

Better to call it out in the readme, or disable the tests, or something else?

1 Like

inux shree-linux2 4.4.0-116-lowlatency #140-Ubuntu SMP PREEMPT Mon Feb 12 22:41:05 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

1 Like

Cool, thanks very much!

Making some progress on astrid, the interactive / performance front end to pippi:

Tests are:

  • Granular processing of mic input (buzzing on a tbone mouthpiece & clinking a coffee mug)
  • Simple mic record/playback test (counting)
  • Synthesis & polyphonic playback / note scheduling test
  • Sound file playback (Torvalds pronouncing linux)
4 Likes

i cannot get it to build

python3 setup.py build gives

shree@shree-linux2:~/astrid$ python3 setup.py build
/usr/lib/python3/dist-packages/setuptools/dist.py:285: UserWarning: Normalizing ‘1.0.0-alpha-1’ to ‘1.0.0a1’
normalized_version,
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.5
creating build/lib.linux-x86_64-3.5/astrid
copying astrid/analysis.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/orc.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/init.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/logger.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/io.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/player.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/names.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/workers.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/server.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/midi.py -> build/lib.linux-x86_64-3.5/astrid
copying astrid/client.py -> build/lib.linux-x86_64-3.5/astrid
running build_ext
building ‘astrid.mixer’ extension
creating build/temp.linux-x86_64-3.5
creating build/temp.linux-x86_64-3.5/astrid
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.5m -c astrid/mixer.c -o build/temp.linux-x86_64-3.5/astrid/mixer.o
astrid/mixer.c:1:2: error: #error Do not use this file, it is the result of a failed Cython compilation.
#error Do not use this file, it is the result of a failed Cython compilation.
^

1 Like

Oh! Sorry. You posted the cmd you used.

Try this instead:

make clean build

You can also just:

pip install pippi