• Ice-Ice

    @jameslo Thanks a lot! I really appreciate your help. I have spent quite some time now looking at your initial 909 version (always takes me a bit to understand code written by someone else). I like the approach you're taking in the [shiftReg16~] abstraction, this makes all the taps accessible which gives some flexible routing possibilities for trying different combinations.

    Now I'm looking at your edit. I think I am finally understanding how $x and $y are related! So $x and a $y of the same number are the respective input and output of the samples in one block of a discrete "stream", and then $x2 creates a new, separate stream of samples and so on (stream might not be proper terminology). So now I also understand why the fexpr~ version doesn't need a block size of 1 (which your 909 version requires).
    And I can see what you mean by using 1 sample old data, it would indeed be the case. It does sound right to me when I listen to it though, but then, my hearing isn't sample-accurate ;) Thanks for this, I've come a bit closer to understanding fexpr~ now through your help, never used fexpr~ before.

    @alexandros I understand what you mean, it was a naive attempt at porting from the message version to a signal version. I think I will try an expr~ version to see if I can make it work, thanks for your input.

    posted in technical issues read more
  • Ice-Ice

    I am working on a Noise Generator that uses the Linear Feedback Shift Register algorithm, but I am stuck. LFSR was used for the Noise channel in the NES and GameBoy, and that's the sound I am going for. LFSR generates a pseudorandom sequence through bit shift. The feedback loop works like this:

    You start with a fixed-length register as the seed (I am using 15 bits in the example). And then, every time the LSFR is triggered, it does the following:

    XOR bits 0 and 1 (the two right-most bits in the sequence)
    Right-shift the sequence (It's now 1 bit shorter)
    Put the XOR result into the empty last bit (the left-most bit)

    I got it to work in Message Land with no problem:
    [Left: verbose version - Right: condensed version]
    lfsr_message.png

    But I am stuck trying to move this to signal, mostly because I don't fully understand fexpr~:
    I guess I should use fexpr~ since I am using feedback here? Also because every bit in the sequence corresponds to a sample and I need to look up earlier samples to generate the next step (Again, guessing). I am also unsure about the difference between $x and $y. I am guessing I would have to use $y too for this, not just $x. But how do I send an output back as an input, to keep the loop running?

    Here's an attempt at converting the above message version to signal, but it obviously doesn't work (I stubbornly tried to connect the right-most outlet to the left-most inlet but that gives a DSP Loop Error of course):
    lfsr_sig.png
    I would also like to be able to control the clock speed for this, but that would probably just be with sample and hold once the main part is done.

    Here's the patch so far:
    lfsr_expr_stuck.pd

    Thanks for having a look!

    And here are the websites I used as sources if anyone is interested:
    https://gbadev.net/gbadoc/audio/sound4.html
    https://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware
    https://www.mjsyts.com/development/lfsr-noise-part-1/

    posted in technical issues read more
  • Ice-Ice

    I am back, I was help up for a while, I just want to say thank you for everyone's help! This has been really insightful!

    posted in technical issues read more
  • Ice-Ice

    I am reading about reverb algorithms and I came across the concept of nested allpass filters.

    Here's an illustration of a regular allpass filter:
    Allpass_diagram_s.png

    And here's a nested allpass structure:
    Allpass_nested_s.png
    source: http://gdsp.hf.ntnu.no/lessons/6/33/

    I used those illustrations as well as H14.all.pass from the audio examples as the basis. But I am not sure I am doing this right at all....

    Here's a vanilla allpass I made:
    vanilla_allpass~.pd
    allpass.png

    And here's a nested allpass using the above abstraction:
    nested_allpass~.pd
    nested.png

    Is this a proper nested allpass? If not, where am I going wrong? As you might guess, I don't fully understand [rzero_rev~] and [rpole~].
    Cheers

    posted in technical issues read more
  • Ice-Ice

    I got it to work!
    I thought I might try compiling from source after all, so I installed CMake and Visual Studio. In Visual Studio, I only installed "C++ CMake Tools for Windows" and the latest Windows 10 SDK. Then I just wanted to check something quickly in pd before getting into compiling, but it seems that one of these installations already fixed the problem and I am running csound now from within pd. Can create the object and all works as it should. But I only opened pd again after hours of installing, tinkering with, and uninstalling things, so I can't tell exactly what it was that fixed it for me now.

    posted in technical issues read more
  • Ice-Ice

    @jameslo Thanks, I've tried it, but no luck unfortunately. Pure Data console says:

    tried C:/Users/IceIce/AppData/Roaming/Pd/csound6~/csound6~.dll and succeeded
    C:\Users\IceIce\AppData\Roaming\Pd\csound6~\csound6~.dll: The specified module could not be found.
     (126)
    

    and further down:

    csound6~: can't load library
    

    But it's there, csound6~.dll is in that folder. It's strange that it succeeds, but then it says that it can't be found. Also, I was surprised to see that csound wasn't on deken. EIther way, I am on a 64-bit system, and I am not sure if the download is 32-bit. Does it run for you? What steps did you take? Thanks in advance.

    posted in technical issues read more
  • Ice-Ice

    I want to play with Csound from Pure Data. Csound is installed and I can run Csound things from the command line just fine. I downloaded csound_pd from this link:
    https://github.com/csound/csound_pd/releases
    Extracted this to my externals folder and added the directory to Pure Data's Path.
    But I can't create any instances of [csound6~].
    Are there any further steps required to get it to run?
    I don't know if I have to build it myself (never done this before). But there is a csound6~.dll in the externals folder, so I suppose I don't have to build this...

    posted in technical issues read more
  • Ice-Ice

    Tried it and it works. Head conversion works, too. Cheers!

    posted in technical issues read more
  • Ice-Ice

    @whale-av
    Wow, thanks a bunch! Yes, it's the "struct color" as in your patch pd-colours.pd. This is a really helpful index. Finally, I know where all these nice yellows and oranges are. Cool that you added the list of tcl colours as a txt, I saw that yesterday in the tcl/tk documentation.
    H̶o̶w̶e̶v̶e̶r̶,̶ ̶I̶ ̶c̶a̶n̶'̶t̶ ̶c̶r̶e̶a̶t̶e̶ ̶[̶s̶y̶s̶_̶g̶u̶i̶]̶ ̶o̶r̶ ̶[̶c̶o̶l̶o̶r̶p̶a̶n̶e̶l̶]̶.̶ ̶A̶r̶e̶ ̶t̶h̶e̶s̶e̶ ̶e̶x̶t̶e̶r̶n̶a̶l̶s̶?̶
    They're in hcs, which I had installed already. Having a blast right now making my own pd theme!!

    @oid
    Oh nice! But sending hex values gives me "argument number out of range", anything I am missing here? I tried any formatting, like #AAAA77, #aaaa77, AAAA77, and aaaa77. But none of these worked. Also tried it as symbols, by message or through [symbol], but to no avail.

    posted in technical issues read more
  • Ice-Ice

    Changing colour of all the other GUI objects is straightforward:
    Sending an int will cycle through the 30 preset colours in the Properties dialog.
    But what about arrays? Sending an int to an array via [color $1] seems to cycle through an enormous list of subtle shades.
    See the screenshot where I am sending the same value to all the GUI objects. The colours are obviously not the same.
    derangedGameboyThumbnail.png

    What are the values? Is this list buried somewhere in the pd files?
    I have been wondering for years, but I'm done guessing now :wink:

    posted in technical issues read more

Internal error.

Oops! Looks like something went wrong!