Skip to content

Releases: Qirky/FoxDot

0.6.3

25 May 12:29
Compare
Choose a tag to compare
Update version number for display in title bar

v0.6.1

05 Apr 09:18
Compare
Choose a tag to compare
v0.6.1 Pre-release
Pre-release
  • Added functionality to specify samples when using the play SynthDef. This can be done from the play string by using the bar character in the form |<char><sample>|. These can also be patterns:
p1 >> play("|x2|-u-")

p1 >> play("(x )( |x[23]|)u ")

p1 >> play("|x{0123}| u ")

p1 >> play("|[xxxx][23]| u ") 
  • Improved timing of musical events slightly
  • Added ability to set tunings for scales
Scale.default.set("major", tuning=Tuning.just)

Scale.default.set("minor", tuning=Tuning.ET12)

Scale.default.set("mixolyidian", tuning=[0, 1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11])
  • You no longer need to specify pattern types in functions used in PlayerKey.map. Previously this would have thrown an exception but now does not:
p1 >> pluck([0,1])
p2 >> pluck(p1.pitch.map({1: lambda x: x + (0,2)}))

v0.5.10

02 Feb 10:30
Compare
Choose a tag to compare
v0.5.10 Pre-release
Pre-release
Update setup.py, README, and changelog

v0.5.8

19 Jan 15:06
Compare
Choose a tag to compare
v0.5.8 Pre-release
Pre-release

v0.5.8 fixes and updates

  • Fixed panning issues on many SynthDefs so fmod spreads a signal across 2 channels effectively.
  • Added the ability to use Pattern methods on player attributes when using the every method:
d1 >> play("x-o-o", dur=PDur(5,8)).every(4, "rate.offadd", 2)  
  • Improved every to switch pattern methods on/off at the correct time when using a list of durations.
  • FoxDot UI no longer crashes when saving / closing after using a lambda character.

v0.5.5

02 Jan 14:38
Compare
Choose a tag to compare
v0.5.5 Pre-release
Pre-release
  • Fixed TimeVar class so it no longer inherits from Repeatable i.e. no longer has access to the "every" method.
  • Fixed pattern bug when creating a pattern using the P generator; P[P(0,2)] no longer returns P[0, 2]. However, P[(0,2)] is interpreted exactly as P[0, 2] and will return that instead.
  • Added more variation to the "formantFilter" effect
  • "loop" samples are added "on-the-fly" as opposed to loaded at start up. These can be loaded by filepath (with or without extension)
a1 >> loop("/path/to/sample.wav")
a2 >> loop("/path/to/sample")

a1 >> loop("yeah")             # Searches recursively for yeah.(wav|wave|aif|aiff|flac)
a1 >> loop("perc/kick")        # Supports directories in the path
a1 >> loop("*kick*", sample=2) # Supports * ? [chars] and [!chars]
a1 >> loop("**/*_Em")          # Supports ** as 'recursively all subdirectories'

Pvar behaviour and SynthDef update

30 Nov 16:12
Compare
Choose a tag to compare
Pre-release
  • Improved behaviour of TimeVar, Pvar, and PvarGenerator classes when created via mathematical operators.
  • SynthDefs can be read loaded into FoxDot from SuperCollider using the FileSynthDef and CompiledSynthDef classes (see SynthDef.py).
  • DefaultServer instance has a forward attribute that, when not None, sends any outgoing OSC message to. Example:
# Sends any OSC message going to SuperCollider to the address
DefaultServer.forward = OSCClient(("localhost", 57890))

Simultaneous sample player patterns and network connectivity

22 Nov 13:56
Compare
Choose a tag to compare

v0.5.0 fixes and updates

  • Pattern "zipping" behaviour changed. A PGroup within a sequence is extended when zipped with another instead of nesting it. e.g.
# Old style
>>> P[(0,1),(2,3)].zip([(4,5)])
P[P(0, 1, P(4, 5)), P(2, 3, P(4, 5))]
# New style
>>> P[(0,1),(2,3)].zip([(4,5)])
P[P(0, 1, 4, 5), P(2, 3, 4, 5)]
  • Consequently, sample player strings can use the <> arrows to play multiple sequences together using one string.
# This plays three patterns together
d1 >> play("<x ><  o[ o]>< -(-=)>", sample=(0,1,2))
  • To use a different sample value for each pattern use a group of values as in the example above. Each value in relates to each pattern e.g. the "x" used sample 0, the "o" pattern uses sample 1 and the "-" pattern uses sample 2. If you want to use multiple values just use a group within a group:
# Plays the snare drum in both channels at different rates
d1 >> play("<x x><  o >", pan=(0, (-1,1)), rate=(1, (1,.9))
  • Network synchronisation introduced! This is still quite a beta feature and feedback would be appreciated if you come across any issues. Here's how to do it:

To connect to another instance of FoxDot over the network you need one user to be the master clock. The master clock user needs to go from the menu to "Language" then "Listen for connections". This will start listening for connections from other FoxDot instances. It will print the IP address and port number to the console; give this information to your live coding partner. They need to run the following code using the IP address on the master clock machine:

Clock.connect("<ip address>")

This will copy some data, e.g. tempo, from the master clock and also adjust for the differences in local machine time (if your clocks are out of sync). The latter will depend on the latency of the connection between your machines. If you are out of time slightly, set the Clock.nudge value to a small value (+-0.01) until the clocks are in sync. Now whenever you change the Clock.bpm value, the change will propagate to everyone on the next bar.

Python 3 Update

27 Jul 09:49
Compare
Choose a tag to compare
Python 3 Update Pre-release
Pre-release
v0.4

Update README