Jump to content

rolfdegen

Members
  • Posts

    457
  • Joined

  • Last visited

  • Days Won

    14

Posts posted by rolfdegen

  1. Neue Jeannie Preview Beta Test-Ver. 2.81

    Added more polyhonic synthesis from Mutable Braids and Shruthi Synthesizer

    • Braids VOWL: low-fi Vowel synthesis. PRM_A : formant, PRM_B : formant_shift
    • Shruthi ZSAW: Phase-distortion sawtooth with filter sweep
    • Shruthi ZSYNC:
    • Shruthi ZTRI:
    • Shruthi ZRESO:
    • Shruthi ZPULS:
    • Shruthi Chrushed_Sine:
    • Braids CSAW: no functions at the moment
    • Braids VOSM Sawtooth with 2 formants. PRM_A : formant1 frequency, PRM_B : formant2 frequency
    • Braids TOY Low-fi Circuit-bent sounds. PRM_A : sample reduction, PRM_B : bit toggling
    • Braids SuperSaw: Swarm of 7 sawtooths, PRM_A: Detune, PRM_B High-pass filter
    • Braids ZLPF : Direct synthesis of LP/Peaking/BP/HP filtered waveform
    • Braids ZPKF : PRM_A: Cutoff frequency, PRM_B: Waveshape
    • Braids ZBPF :
    • Braids ZHPF :

    Screenshot-2023-11-09-224800.png

    Youtube: https://youtu.be/SCL5GZZQ7MU

    Github: https://github.com/rolfdegen/Jeannie-Open-source-Synthesizer

    Greetings from germany. Rolf :)

  2. Hello Alex.

    Here is a new Jeannie Firmware 2.21 ST7735S version. I hope your display problem is solved :)

    20230421_161835.thumb.jpg.cee4d414b8ed1ae4074cc95f17705fd3.jpg

     

    Change display code in the ST7735_t3.cpp file

    // Initialization for ST7735R screens (green or red tabs)
    void ST7735_t3::initR(uint8_t options)
    {
      commonInit(Rcmd1);
      if (options == INITR_GREENTAB) {
        commandList(Rcmd2green);
        _colstart = 2;
        _rowstart = 1;
      } else if(options == INITR_144GREENTAB) {
        _screenHeight = ST7735_TFTHEIGHT_144;
        commandList(Rcmd2green144);
        _colstart = 2;
        _rowstart = 3;
      } else if(options == INITR_144GREENTAB_OFFSET) {
        _screenHeight = ST7735_TFTHEIGHT_144;
        commandList(Rcmd2green144);
        _colstart = 0;
        _rowstart = 32;
        } else if(options == INITR_MINI160x80) {
          _screenHeight   = ST7735_TFTHEIGHT_160;
          _screenWidth    = ST7735_TFTWIDTH_80;
         commandList(Rcmd2green160x80);
          _colstart = 24;
          _rowstart = 0;
      } else {
        // _colstart, _rowstart left at default '0' values
        commandList(Rcmd2red);
      }
      commandList(Rcmd3);
    
      // if black or mini, change MADCTL color filter
      if ((options == INITR_BLACKTAB)  || (options == INITR_MINI160x80)){
        writecommand(ST7735_MADCTL);
        writedata_last(0xC0);
    	 _colstart = -2;	// only for ST7735S
    	 _rowstart = -1;	// only for ST7735S
      }
    
      tabcolor = options;
      setRotation(0);
    }

     

    Greetings from germany. Rolf

  3. Hi dear synth fans.

    The Jeannie can now stereo. I reprogrammed the voice distribution in the Jeannie a bit.
    The eight voices can be distributed arbitrarily in the stereo panorama. In addition, there is now a Unison and Mono mode.

     

    Voice distribution in Poly mode:
    1.Voice Left 90%, Right 10%
    2.Voice Left 80%, Right 20%
    3.Voice Left 70%, Right 30%
    4.Voice Left 60%, Right 40%
    5.Voice Left 40%, Right 60%
    6.Voice Left 30%, Right 70%
    7.Voice Left 20%, Right 80%
    8.Voice Left 10%, Right 90%

    Voice distribution in mono mode
    Mono: middle voice
    Mono-2: 1st voice left, 2nd voice right
    Mono-3: 1st voice left, 2nd voice middle, 3rd voice right
    Mono-4: 1st Voice Left, 2nd Voice Left to Center, 3rd Voice Right to Center, 4th Voice Right
    Mono-6: 1st voice left, 2nd voice slightly left to center, 3rd voice slightly more left to center, 4th voice slightly more right to center, 5th voice slightly right to center, 6th voice right

    The whole thing can be spread from mono to stereo with the PAN control :)

    The distribution of votes in Unison mode is still being worked on.

     

    Jeannie current Voices Block

    1960854570_Voice2_32.thumb.PNG.270c7fcf5cd06c620d3452ebf452a295.PNG

  4. Hallo Alex

    I think the display is not the right type. Hence the display error.

    The correct display type:  https://www.buydisplay.com/st7735-1-8-inch-color-tft-display-module-spi-128x160-arduino-raspberry-pi

    But you can ask tubeohm.com if he sells a piece. 

    Happy Easter from germany. Rolf

    Jeannie DIY Project:  https://www.sequencer.de/synthesizer/threads/jeannie-polyphonic-diy-synthesizer.160564/

  5. SysEx Dump works now. See short video.

    It was a bit more complicated than I thought. First, conversion routines had to be developed for all 212 parameter values in the Jeannie, which convert 8/16-bit integer values and 32-bit floating-point values into a 7-bit format for the SysEx dump. The same had to be converted back again.
    This was followed by functions for the transmission and reception of SysEx data. Last but not least, a simple menu for operation had to be developed.

    20220523_135020.thumb.jpg.c087e4c60b607404c39e6ada1ecbbcfb.jpg

    The transmission path is selected with Destination (Midi or USB)
    DUMP type is either a patch or a bank.
    DUMP-Bank sets the bank (A-P) for transmission or reception.
    Source is either the patch no. or when receiving the space in the selected patch bank.
    SYSEX-DUMP is set to send or receive SysEX data.
    The "Load/Save" button starts transmission or reception.
    A progress bar shows the progress of the transfer.

     

    Greetings from germany. Rolf

  6. Small update..

    Soon there will be SysEx DUMP for Jeannie. Then nothing stands in the way of the patch exchange.

    20220501_123341.thumb.jpg.4207005ecdd905aea6d969da381829a2.jpg

    The transmission path is selected with DESTINATION, eg Midi or USB
    DUMP TYPE selects a patch, bank, or all
    With DUMP-Bank the bank
    With source the patch
    With SYSEX-DUMP transmission to the PC or reception
    Transmission or reception is then initialized via the load/save button

    Sending and receiving from SysEx already works. But I still have to do some programming cool.png

    20220505_084324.thumb.jpg.82eea27cbf71b83f96b4434b8fc61f11.jpg

    20220505_092444.thumb.jpg.7adea2acbc537312b62f3b9da45c535e.jpg

    20220505_084723.thumb.jpg.fe58c2fb286a2adc08c3a2ece56130e6.jpg

    Never ending programming. Greetings, Rolf :)

     

  7. Hello user..

    The data format for the transmission or reception of SysEx data has its pitfalls.
    The data may only be 7 bits in size. Larger values lead to the transmission being aborted.
    In the Jeannie, floating point numbers and 16-bit integer numbers are used.
    For saving on SD card, the parameters are converted into ASCII characters and
    written to the SD card. It looks like this for patch "STORM X" B 032, for example.

    Patch.PNG.e5f1a90bcd0548e4e60226d885858245.PNG

     

    The advantage is that floating point numbers or large integer numbers can be transmitted as 7-bit numbers (0-127) via SysEx.
    A disadvantage is the slightly larger amount of data.

    Example code for transferring a SysEx file ( patch "STORM X" B 032 data is not yet complete )

    byte sysexData[32];    // SysEx buffer 256 Byte
    int sysexCount = 0;        // SysEx Data pointer
    
    //*************************************************************************
    // convert parameter string to bin
    //*************************************************************************
    FLASHMEM void String_to_bin (String value, uint8_t len)
    {
        for (uint8_t i = 0; i < len; i++) {
            sysexData[sysexCount] = value[i];
            sysexCount++;
        }
    }
    //*************************************************************************
    // usbMidi send SystemExclusive
    //*************************************************************************
    FLASHMEM void SendSysEx(void)
    {
        // send PrgNr "B 032"
     
        uint8_t patchNo = 32;
        uint8_t currentPatchBank = 1; // Bank B
        String numString = (patchNo);
        String bankString = char(currentPatchBank + 65);
        String fileString = (bankString + "/" + numString);
        uint8_t data_len = NO_OF_PARAMS;
        sysexCount = 0;
     
        // get Sound File String
        File patchFile = SD.open(fileString.c_str());
        String data[data_len]; //Array of data read in
        recallPatchData(patchFile, data);
        patchFile.close();
     
        // Sysex data lenght [28];                            // Daten lenght max 256
        sysexData[sysexCount++] = 0xF0;                        // 0        - Start SysEx
        sysexData[sysexCount++] = 0x00;                        // 1        - ID
        sysexData[sysexCount++] = 0x00;                        // 2        - ID
        sysexData[sysexCount++] = 0x00;                        // 3        - ID
        sysexData[sysexCount++] = 0x00;                        // 4        - Device ID 0-64
        sysexData[sysexCount++] = patchNo;                     // 5        - Patch No
        sysexData[sysexCount++] = currentPatchBank;            // 6        - Folder No
        String_to_bin(data[0], 12);                            // 7-18        - Patch Name
        String_to_bin(data[1], 4);                             // 19-22    - Osc1 level
        String_to_bin(data[2], 4);                             // 23-26    - Osc2 level
     
        // ..even more data
     
        sysexData[sysexCount++] = 0xF7;                        // 27        - End SysEx
     
        usbMIDI.sendSysEx(sysexCount, sysexData, true);        // send SysEx data
     
        Serial.println("Data sending complete");
     
    }

     

    The transferred SysEx file for patch "B 032"

    1108925542_SysExdata.thumb.PNG.d7f4a6abcb53e755ab0a227331d0eb70.PNG

     

    Greetings form germany  :happy: Rolf

     

×
×
  • Create New...