Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

GUI Ideas

ssj71
2011-06-16
2013-05-28
<< < 1 2 (Page 2 of 2)
  • Transmogrifox
    Transmogrifox
    2011-10-08

    Maybe I made the wrong assumption about the "big" effects.  I assumed you would make each effect more like a real stompbox, where it only has 3 or 4 knobs (probably 6 at the very most).  If you look at the current effects, some have up to 13 parameters.  An "advanced" pop-up could give the user access to every parameter supported by the underlying effect as opposed to the default 3 or 4 knobs.

    The connectors are just a graphic :).

     
  • Renato
    Renato
    2011-10-09

    sorry I didn't read the whole discussion, also because I don't understand the technical talk, but I'm just chiming in to say the video looks amazing! It would be very very cool to have this new GUI

    IMHO it would be great if the little effects showed only 3 or 4 knobs, while the big one on the right all the parameters of the effect.

    Regarding the connectors' graphic, yeah it would be a nice touch, but not essential so if I were you I'd leave it as last thing.

    again great job, looking forward to this

     


  • 2011-10-09

    Oh no, I didn't mean it like that transmogrifox, I meant it like, maybe in the small effects I'd put 2 or 3 knobs, and in the big one I'd put all of them

    nareto: "IMHO it would be great if the little effects showed only 3 or 4 knobs, while the big one on the right all the parameters of the effect." that's exactly what I meant.

    I realized few days ago of something I foolishly didn't see before, there are actually 47 different effects, so it might take a while until I get a final version (I'm thinking about making a preview with just 10 effects to see if you like it and then to keep working on it), so for now I'm just going to focus on making the small effects without knobs, and when I finish it all, I will think about putting a couple of knobs on each one

     
  • Transmogrifox
    Transmogrifox
    2011-10-12

    Ok, now I think I remember that discussion about the big effects, so I understand now.

    About 47 different effects:
    Probably part of the advantage of an alternative GUI is to use the interface to narrow the effects selection down to something the average user can easily manage.

    For example, there is the "Phaser" and the "Analog Phaser", which are both phasers.  You could pick one of them and omit the other…of course you could slowly chip away at adding all of the FX eventually, but there is a certain amount of redundancy that makes things look like more.

    For example, Distortion, Overdrive and Derelict all use basically the same code and most of the differences are the interface.  Stompbox was an attempt to make something that is useful on its own (getting good sounds from Distortion, Overdrive and Derelict require adding EQ's in front and behind - so you can make up your own "Distortion" "Overdrive" "Fuzz" (or whatever you think) and the DSP code underneath can be exploited to accomplish what you intend.

    I think all of that is to say the 47 different modules are not all entirely different.

    That said, my vote for the most-used effects for a start would be:
    Noise Gate (I prefer Expander…probably because I coded it :/), Compressor, Chorus, Vibe, Phaser, Flanger, Distortion (Stompbox, etc), EQ, Delay of some sort (probably Echoverse), MuTroMojo (WahWah and envelope filter effect).

    That is 10, and it pretty well covers the bulk of what a typical guitar player expects to see on the pedal board.

    Again, nice work.  It will be fun to see this come about…

     


  • 2011-10-12

    If it's okay to just put 10 or 12 effects, then it'd be way easier to make it
    Here's the next preview with just 12 effects: http://www.youtube.com/watch?v=TwRCeoRag3E
    The names of each effect will be included at the graphics
    And the red vertical bars are supposed to be the input/output levels
    Transmogrifox, thanks for the list, it's really useful as I didn't know the programming details, if you had to add 2 more to that list (to make it 12), which ones would you choose?
    Also, here's a screenshot of the current progress

     
  • Transmogrifox
    Transmogrifox
    2011-10-13

    I would say Convolotron and Infinity would be nice to add to the FX line-up.  I don't know if you have played with infinity yet, be it's mega-wild once you start to abuse it a little bit.

     
  • Sahil
    Sahil
    2011-12-03

    hi

    i have known about rackarack for a while but couldn't use it because of its overwhelming gui. i was waiting for better gui but the team said they were busy. i thought of helping before though i'm not good with codes yet i can create hi res graphics for the application and thous want to offer my help. please tell me what i can do to help improve this software.

     
  • issam
    issam
    2011-12-07

    Hi all,

    I’m trying to build a GUI for Rakarrack with Qt . But I have difficulties to connect the GUI elements to Rakarrack code.
    Can some on help me with any off those things or advice me about anything that can help to get it done :

    +Quick explanations on how a buttons can call a function of Rakarrack and gives a value :( I tried to look into the code but failed to understand the functions used in callbacks)
                  -> how to find the callback needed for each functionality :)?
                  ->Quick explanation of main methods of Rakarrack class so I can use it to make the right callbacks .

    I’m enthusiast about building new GUI for Rakarrack , and It's was motivating to read that discussion. So I’m here to get in touch with people who have the same objectives.

    transmogriphox : Can you advice me any reading about programming effects ? and about audio programming and interacting with hardware ?

    sorry for any mistakes I made using English , it's not the language I'm using everyday.

    cheers,
           

     
  • Transmogrifox
    Transmogrifox
    2011-12-09

    issam1988 - Here is the basic idea:
    Take Compressor, for example.   Reference Compressor.C and Compressor.h.  Here are the functions that will interest you the most:

    Compressor::Compressor_Change_Preset (int dgui, int npreset)

    Compressor::Compressor_Change (int np, int value)

    Compressor::getpar (int np)

    Assuming when you launch your gui, you pass a pointer to an RKR object, (look at how it is done with the FLTK gui), then you can change values in Rakarrack like this (notice there is no set of GUI callback functions within Rakarrack's DSP interface):
    Assume you have an object RKR rkr, then when the "Ratio Knob" is turned you can do this in your callback function for that widget:

    rkr->Compressor_Change (2, 6);

    To change the ratio to 6dB (Notice Case 2 is ratio).

    Then

    rkr->getpar (2);

    if you wanted to get the current ratio to update your widget.

    So you can probably see how it works for the FXs internal presets (don't confuse this with the saved user presets).  These presets are the hard-coded presets you select from a drop-down list on each FX on the FLTK GUI.  The Fpreset object makes it possible to load and save user presets.  Holborn has programmed this to work by hovering over the preset drop-down with the mouse and press "insert" key to save.  All user custom presets are marked with a star in the list.  You probably would want to try to use it before you attempt to incorporate it into your own GUI.  You can ignore that for the most part since it won't break the program if you don't support it ;).

    I hope that is a useful start for you.  Probably the best way to go is to try to pick an easy effect and try to implement just one, and ask questions one by one as you go through the process.

    As far as advice about programming effects goes… that is hard to do in 3 lines of text.  Do you know anything about digital filters, nonlinear functions or much about mathematics in general?  If you understand the basics of phase, frequency and a few things about sample rates, aliasing (why it's bad), and that, then it is easier to move into putting it to work making digital FX.

    It's best to learn basics of digital signal processing.  When I have more time maybe I will start a new thread and post some intro-to-DSP links for you to read.  The implementation of most basic things like wah wah, phasers and flangers isn't too hard if you generally understand how and why they work ;).

    Take care.
    Transmogrifox

     
  • issam
    issam
    2011-12-13

    Transmogrifox - thank you for your answer

    For GUI ,i'll try this as a first step and i let you know about any good results.

    And yes  i have bases and some knowledge on digital filters and nonlinear systems and mathematics in general( i had some courses of digital signal processing) ,but  i never used this before for programming effects or DSP code..

    Stay in touch ;),

     
  • Transmogrifox
    Transmogrifox
    2011-12-14

    That is good to know you have some background in DSP and mathematics.  It's easier to explain using those concepts.

    Probably, again, if you want me to help you learn how to write some FX, then probably the first thing to do is think of an effect you want to make, then I can give you some ideas for how you might do it.

    My background is in electrical engineering and as a hobby, for years, I have made analog effects of various types.  Many of the DSP FX I have coded in Rakarrack are inspired by an analog circuit of some kind… probably the most blatant is the Vibe effect in Rakarrack.  That one is a direct bilinear transform of the analog transfer function intertwined with some approximations of the nonlinear elements in the circuit.

     
  • issam
    issam
    2011-12-21

    I'm facing another obstacle before to test a simple effect integration in GUI :

    My question is how to properly integer  my new rakarrackQtGui.h and rakarrackQtGui.h  in the makefile considering that i need to invoke "qmake" to compile both . I'm using Qt  Eclipse integration plug-in.

    Is there any time when there is active discussions in the IRC channel #rakarrack ?

     
  • Transmogrifox
    Transmogrifox
    2011-12-22

    I'm not familiar with QT (nor with GUI design in general), so I can't help much, especially if you're using eclipse.

    If your rakarrackQtGui.h and rakarrackQtGui.(cpp?) are pure c or c++ source files that don't require other resources for compiling (other than normal c++ compiler flags) then you can modify the rakarrack configure.ac file to include the appropriate libraries and compiler CXXFLAGS (if needed), then
    $./autogen.sh
    $./configure
    And if you included the right libs, then configure should pass and we expect make to work.  You will need also to add your rakarrackQtGui.h and .cpp files to the src/Makefile.am following the same pattern as the others.

    I haven't been in the #rakarrack IRC channel for quite some time, but AFAIK Holborn is there most of the time.  He can probably help more than I can since he made the GUI for rakarrack.

    Take a look at how rakarrack.h and rakarrack.cxx are treated in the Makefile.am, and configure.ac for ideas.  The FLTK designer (FLUID) generates a rakarrack.h and rakarrack.cxx file, then these files are compiled like any other c++ source file, which do not require anything that g++ does not support.  If the Qt designer generates the same kind of thing, then in theory you only need to imitate the way the FLTK gui is compiled into the program.

     
  • issam
    issam
    2011-12-29

    I succeed connecting RKR with my  GUI , the problem was mainly in the .pro file ( Makefike for Qt project) . Now i can access RKR class from my GUI  :) :
    Now i have some problems with jack , Actually i don't know if what I'm doing is the right way to apply a simple effect :
    As my application is running i can hear my guitar but without any effect , here is my main.cpp

    int main(int argc, char *argv[])
    {
        RKR rkr;
           QApplication a(argc, argv,&rkr);                         // Create the main application
            Widget w;                                                             // Create the main widget for Gui
             mlockall (MCL_CURRENT| MCL_FUTURE);
         JACKstart (&rkr, rkr.jackclient);
         rkr.InitMIDI();
         rkr.ConnectMIDI ();
          // Activate FX on ?
           rkr.Bypass=0;
           rkr.val_il_sum=-50.0;
           rkr.val_ir_sum=-50.0;
           rkr.val_vl_sum=-50.0;
           rkr.val_vr_sum=-50.0;
           rkr.old_vl_sum=-50.0;
           rkr.old_vr_sum=-50.0;
           rkr.old_il_sum=-50.0;
           rkr.old_ir_sum=-50.0;
           //  How to load and apply effects from Bank ?
           // How to activate compressor .. or distortion for example ?
           rkr.efx_Compressor->Compressor_Change(2,6);
           rkr.efx_Compressor->getpar(2);
         w.show();                                                                                                // show GUI
        return a.exec();
        JACKfinish ();
    }
    

    I know that in code, what I'm doing is not activating compressor effect but just changing the ratio in it to 6db. But i didn't find the right number in the function Compressor_change , or in other Efx_xxxx->Changepar() to activate and apply any effect .

    Can you please instruction on how to apply a distinctive effect like distortion or overdrive after to activate "FX_On"

    In Application console output  i can see :


    Cannot connect to server socket err = No such file or directory
    Cannot connect to server socket

    jackdmp 1.9.7
    Copyright 2001-2005 Paul Davis and others.
    Copyright 2004-2011 Grame.
    jackdmp comes with ABSOLUTELY NO WARRANTY
    This is free software, and you are welcome to redistribute it
    under certain conditions; see the file COPYING for details
    no message buffer overruns
    no message buffer overruns
    JACK server starting in realtime mode with priority 10
    control device hw:0
    control device hw:0
    audio_reservation_init
    Acquire audio card Audio0
    creating alsa driver … hw:0|hw:0|1024|2|44100|0|0|nomon|swmeter|-|32bit
    control device hw:0
    configuring for 44100Hz, period = 1024 frames (23.2 ms), buffer = 2 periods
    ALSA: final selected sample format for capture: 32bit integer little-endian
    ALSA: use 2 periods for capture
    ALSA: final selected sample format for playback: 32bit integer little-endian
    ALSA: use 2 periods for playback

    and after closing the application :


    JackEngine::XRun: client = rakarrack was not run: state = 1
    JackAudioDriver::ProcessGraphAsync: Process error
    JackEngine::XRun: client = rakarrack was not run: state = 1
    JackAudioDriver::ProcessGraphAsync: Process error
    JackTemporaryException : now quits…
    JackServer::ClientKill ref = 2 cannot be closed
    jack main caught signal 2

    control device hw:0
    Released audio card Audio0
    audio_reservation_finish
    control device hw:0

    Is there any problem with jack with this logs ?

    Thank you ,

     
  • Transmogrifox
    Transmogrifox
    2011-12-30

    Take a look at jack.C to see what is going on.  I don't know how familiar you are with jack, but the main rt processing is done in a callback function which you can find in jack.C.

    JACKstart() tells jack everything it wants to know, and leaves a pointer to a callback program,

    int
    jackprocess (jack_nframes_t nframes, void *arg)
    

    As you scroll down, you'll see a lot of interesting things that you will probably need to handle in the future, but for making an effect work, here is where it gets interesting:

      memcpy (JackOUT->efxoutl, inl,
          sizeof (jack_default_audio_sample_t) * nframes);
      memcpy (JackOUT->efxoutr, inr,
          sizeof (jack_default_audio_sample_t) * nframes);
      memcpy (JackOUT->auxdata, aux,
          sizeof (jack_default_audio_sample_t) * nframes);
      
      JackOUT->Alg (JackOUT->efxoutl, JackOUT->efxoutr, inl, inr ,0);
      
      memcpy (outl, JackOUT->efxoutl,
          sizeof (jack_default_audio_sample_t) * nframes);
      memcpy (outr, JackOUT->efxoutr,
          sizeof (jack_default_audio_sample_t) * nframes);
    

    Now we need to figure out what 

    JackOUT->Alg (JackOUT->efxoutl, JackOUT->efxoutr, inl, inr ,0);
    

    is doing.

    Open Process.C
    Now remember in jack.C,

    int
    JACKstart (RKR * rkr_, jack_client_t * jackclient_)
    {
      JackOUT = rkr_;
    

    We see "JackOUT" is a pointer to your rkr object…

    So here is the main processing loop in Rakarrack, process.C:

    void
    RKR::Alg (float *inl1, float *inr1, float *origl, float *origr, void *)
    {
    

    It appears to me, "Bypass" does the opposite of what you expect it to do…

      if (Bypass)
        { 
       <snip>
          for (i = 0; i < 10; i++)
        {
            switch (efx_order[i])
            {
    <snip>
            case 1:
              if (Compressor_Bypass)
            {
              efx_Compressor->out (efxoutl, efxoutr);
              Vol2_Efx ();
            }
              break;
    <snip>
        }
    

    So…rkr.Compressor_Bypass AND rkr.Bypass need to be set to 1 in order to process the compressor effect.

    The thing to keep in mind is that Rakarrack is designed to run without a GUI.  Think of it as something more of a client-server relationship than as part of the program.

    I recommend you use Rakarrack's main.C and process.C (process.C hard to avoid) and only add if statements to choose your gui or the FLTK GUI.  It looks like the QT gui uses w.show();  which must contain its own loop.

    If you look in main.C, you'll see the FLTK GUI is updated by a call within a while loop in main.C.  You would probably want to shovel your GUI off into another thread so this loop still runs:

      
    ///You add your code to put your gui in another thread
    if(qtgui)
    gui=0; 
    qt_threadid = pthread_create( &guithread, NULL, startgui ((void*) rkr);
    //you could make your own while loop after this to run rkr.mmiramidi(); to avoid the if statement each time around the loop
    }
    //and your startgui function contains all the code (above) to create the QT Gui and call the w.show()
    //then the following loop will run without calling the FLTK gui.  anyway, you probably get the idea...
    while (Pexitprogram == 0)
        {
      
          // Refresh GUI
          if (gui)
        {
          Fl::wait ();
        }
          else
        {
          usleep (1500);
          if (preset != 1000)
            {
              if( (preset>0) && (preset<61)) rkr.Bank_to_Preset (preset);
              preset = 1000;
            }
        }
          
          rkr.miramidi ();
        }
    

    I hope that is helpful

     
  • Transmogrifox
    Transmogrifox
    2011-12-30

    Just a follow-up to summarize.  I think the piece you're missing is the "Alg" function found within Process.C, and generally everything that happens in Process.C.  Jack calls this function every PERIOD, and if you got Rakarrack to compile, then you're sort of working blind creating your own main.C and not looking at what process.C is doing "behind your back".

    Take Care,
    TFX

     
<< < 1 2 (Page 2 of 2)