• ddw_music

    Oh, spoke too soon... where do I get the [pix_video] backends?

    [pix_video]: backend #0='dc1394'    : dc1394 iidc 
    [gemglxwindow]: Direct Rendering enabled!
    [pix_video]: no valid video backend found
    

    hjh

    posted in pixel# read more
  • ddw_music

    @Jona

    Nice, thanks for the tips!

    I'm now at:

    GEM: Graphics Environment for Multimedia
    GEM: ver: 0.94.git 8508981
    GEM: compiled  on Nov 22 2019
    

    :grinning:

    No time right now to check if it improved the crashes, but this was fairly painless. Thanks.

    hjh

    posted in pixel# read more
  • ddw_music

    Ubuntu Studio 18.04 includes a package for "GEM: ver: 0.93.3 / GEM: compiled on 2018/02/01 at 21:58:19 UTC."

    Current Gem is 0.94.

    How do I update Gem on my system?

    Deken's most recent Gem for Linux is from 2015 (seriously).

    I searched for a PPA but I can't find one for this.

    https://packages.debian.org/buster/gem -- compatible with Ubuntu or not?

    (The immediate motivation is that, in the last 15 minutes or so, multiple Gem help patches caused Pure Data to crash. I suspect a conflict between new Pd 0.50 and old Gem 0.93...?)

    hjh

    posted in pixel# read more
  • ddw_music

    @RandLaneFly "Dude... all i can say is thank you." :) Glad to help. It just happens that I was working on this less than a month ago for a synthesis theory class.

    "the fm8 sounds more filled out with high frequencies"

    The FM8 plot (bottom left) looks like a lot of aliasing. I'm not sure if that's really "filled out." (And the "FM8 sine tone" plot is definitely not from a pure sine tone. It might be deliberate or it might be just a poor oscillator implementation. One of my former students did some research comparing analog oscillators against digital ones from commercial VSTs. The VSTs are often really awful -- unbelievable amounts of aliasing. Massive is one of the worst offenders. I think this is one of the reasons for the harshness of modern EDM -- adding a lot of noise into the pads is a way to cover the kind of gross sound of the oscillators.)

    One thing you might try is to use a wavetable oscillator instead of [cos~]. The wavetable can include a bit extra harmonic content.

    hjh

    posted in technical issues read more
  • ddw_music

    The [tabplay~] help patch says: "The tabplay~ object plays a sample, or part of one, with no transposition or interpolation. It is cheaper than tabread4~ and there are none of tabread4~'s interpolation artifacts."

    So the question here is a nonstarter. There is no way to change the pitch of [tabplay~].

    hjh

    posted in technical issues read more
  • ddw_music

    @RandLaneFly "When the mod index is maxed out it sounds way more extreme and than on the FM8."

    Without looking at your patch --

    I've always done FM (leaving PM aside for a moment) such that index = 1 means that, if f is the main frequency, the carrier frequency oscillates between 0 and 2f.

    mod_phase = phasor(0 .. 2pi) at (f * ratio) Hz
    
    mod = sin(mod_phase) * index
    
    car_phase = phasor(0 .. 2pi) at (f + (f * mod)) Hz = (f * (1 + mod)) Hz
    
    carrier = sin(car_phase)
    

    If you do phase modulation like this, then index has exactly the same meaning.

    mod_phase = phasor(0 .. 2pi) at (f * ratio) Hz
    
    mod = sin(mod_phase) * index
    
    car_phase = mod + phasor(0 .. 2pi) at f Hz
    
    carrier = sin(car_phase)
    

    Takeaway: if the phasor goes 0 to 2pi, then you don't need to do any extra scaling on the modulation index for PM and FM to be compatible.

    The catch in Pure Data is that the phasor is not 0 to 2pi. It's 0 to 1.

    So, for phase modulation, you have to scale the index down by 2pi: mod --> [/ 6.28319].

    pm-in-pd.png

    hjh

    posted in technical issues read more
  • ddw_music

    @s.elliot.perez "They have a 0-1 value in Syntorial (and presumably other synths)."

    "presumably other synths" not necessarily.

    Standard lowpass filter parameters are cutoff frequency (in Hz) and Q.

    hjh

    posted in technical issues read more
  • ddw_music

    Thanks for the further comments.

    I know you can multiply-mod-divide and get fractions. The broader point is about usability. It's a difficult trade-off -- adding more features for the sake of usability creates maintenance problems (which, to be honest, we see in SuperCollider-land), but keeping things light and maintainable means that easy things (fmod) become harder than they should be (concrete impact here is, I will have to explain to a classroom full of not particularly technical students why they can't use a simple, dedicated object for floating-point modulo when there are simple, dedicated objects for the other basic operators -- too much fine print gets old after awhile -- or let them use it Purr-Data now, and take it away from them later when I have to switch them to vanilla Pd so that they can use Gem on Mac).

    hjh

    posted in technical issues read more
  • ddw_music

    @jancsika "Both mod and % produce remainders for integer division in C and C++. Pd is written in C; since it uses the "%" operator internally to produce the output for [%] that is the operation you get."

    OK, fair, but... by analogy, we might go looking for a Pd object that uses fmod() internally:

     fmod 4
    ... couldn't create
    

    The specific use case was a demonstration for a class of crossfading between multiple wavetables (in the trendy Massive or Serum softsynth way). The crossfade coefficients are based on fmod(wavetable_index, 2) and really do need the fractional part.

    hjh

    posted in technical issues read more
  • ddw_music

    1. Is [expr fmod($f1, something)] the only way to get a floating-point modulo?

    2. This is a bit amusing: / and div are floating-point and integer division, respectively. So one might expect % and mod to be floating-point and integer modulo, respectively. But someone seems to have had a sense of humor some years ago?

    pd-float-mod.png

    hjh

    posted in technical issues read more

Internal error.

Oops! Looks like something went wrong!