Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,13 @@ libcontrol/controlsender_test
libgui/channelselector_test
libgui/midicontrolchannelassigner_test
libgui/slider_test
*.dot
*.tex
*.png
*.html
*.sty
*.svg
*.js
*.css
*.tmp
doxydoc/latex/Makefile
60 changes: 60 additions & 0 deletions INSTALL
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,63 @@ If you run into any other problems don't hesitate to contact me at
arnold@arnoldarts.de or on linux-audio-user@lists.linuxaudio.org.
Problems involving the MIDI control of the mixer are almost certainly
Nick Bailey's fault: nick@n-ism.org is the place to contact him.

Install Scons
$ python3 -m pip install scons

Install Qt environment
$ sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools

Install the jack-audio-connection-kit and compile it.
$ git clone https://github.com/jackaudio/jack2.git
Or download the source code via the link below.
https://github.com/jackaudio/jack2/releases/tag/v1.9.21

Compile and install Jack2 , on linux, using './waf configure', './waf' and './waf install' as root.
On macosx, users can use the xcode project.
On Windows, users can use the Code::Blocks workspace (you also have a small script to make an all in one installer).

Editing the configuration file

If your system has no directory called /etc/security/limits.d then you will need to edit /etc/security/limits.conf.
If /etc/security/limits.d does exist on your machine, then you will need to create and edit a file called /etc/security/limits.d/audio.conf.
The file must contain (at least) the following two lines:
@audio - rtprio 95
@audio - memlock unlimited
Contrary to a lot of misinformation on the web, there is no reason to include a line here that provides enhanced “niceness” control,
which is completely irrelevant for realtime scheduling and low latency audio applications.

Creating an “audio” group
As the super-user (“root”) run the following commands from a terminal window:
$ sudo groupadd audio
$ sudo usermod -a -G audio yourUserID
Users should substitute their actual user id or “login” for “yourUserID”.

Users can carry out these two steps using the graphical tools available under the “System Administration” section of your desktop’s main menu. However, this text-based method is faster and much easier to explain.

Suppose users use a distribution that has already created the group and configured the “limits” file.
In that case, users will need to determine the name of the group (it is likely called “audio” or “jackuser”).
Then they can add themselves to the group with this command (run as the superuser inside a terminal window):
$ usermod -a -G theGroupName yourUserID

Logout and back in
None of the changes users have made above will affect users until they log out and back in.
If that does not work, try rebooting. In either case, users do not need to reinstall any software.

Install alsa, libsound2-dev, linux-lowlatency, pulseaudio-module-jack, qjackctl
$ sudo apt-get install alsa
$ sudo apt-get install libasound2-dev
$ sudo apt-get install linux-lowlatency
$ sudo apt-get install pulseaudio-module-jack
$ sudo apt-get install qjackctl

After completing the above steps, run qjackctl. Qjackctl is the basis for Jackmix to run.
If qjackctl fails to run, Jackmix will not be available.


Complie and run Jackmix
The Jackmix project provides the SConstruct compilation file, so users can compile the entire Jackmix project
by typing scons in the terminal and pressing enter. Once compiled, the executable jackmix file is generated in
the /jackmix directory, and the graphical user interface appears after running jackmix successfully.


32 changes: 26 additions & 6 deletions backend/jack_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,17 +55,37 @@ class JackBackend : public BackendInterface {
JackBackend( GuiServer_Interface* );
/// Ends everything
~JackBackend();


/**
* @brief Adding an output channel and return ture on success.
* @param Qstring The name of the output channel that we want to add.
* @return true or false
*/
bool addOutput( QString );
/**
* @brief Remove an input channel and return true on success.
* @param Qstring The name of the input channel that we want to remove.
* @return true or false
*/
bool removeInput( QString );
/**
* @brief Adding an input channel and return ture on success.
* @param Qstring The name of the input channel that we want to add.
* @return true or false
*/
bool addInput( QString );
/**
* @brief Remove an input channel and return true on success.
* @param Qstring The name of the input channel that we want to remove.
* @return true or false
*/
bool removeOutput( QString );
/**
* Rename a jack port
* @brief Rename a jack port
*
* \param old_name current port name
* \param new_name new port name
* \returns whether a port was renamed
* @param old_name current port name
* @param new_name new port name
* @returns whether a port was renamed
*/
bool rename(const QString old_name, const QString new_name);
bool rename(const QString old_name, const char *new_name);
Expand Down Expand Up @@ -120,7 +140,7 @@ class JackBackend : public BackendInterface {
::jack_port_t *midi_port;

/**
* Handle changes in jack server sample rate
* @brief Handle changes in jack server sample rate
*
* @param rate New sample rate
* @param args Client-supplied args (not used)
Expand Down
36 changes: 36 additions & 0 deletions jackmix/1.jm-xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<jackmix version="0.5">
<ins>
<channel name="in_1" volume="0" midi="0" />
<channel name="in_2" volume="0" midi="0" />
<channel name="in_3" volume="0" midi="0" />
<channel name="in_4" volume="0" midi="0" />
<channel name="in_5" volume="0" midi="0" />
<channel name="in_6" volume="0" midi="0" />
<channel name="in_7" volume="0" midi="0" />
<channel name="in_8" volume="0" midi="0" />
</ins>
<outs>
<channel name="out_1" volume="0" midi="0" />
<channel name="out_2" volume="0" midi="0" />
</outs>
<matrix>
<volume in="in_1" out="out_1" value="0" midi="0" />
<volume in="in_1" out="out_2" value="0" midi="0" />
<volume in="in_2" out="out_1" value="0" midi="0" />
<volume in="in_2" out="out_2" value="0" midi="0" />
<volume in="in_3" out="out_1" value="0" midi="0" />
<volume in="in_3" out="out_2" value="0" midi="0" />
<volume in="in_4" out="out_1" value="0" midi="0" />
<volume in="in_4" out="out_2" value="0" midi="0" />
<volume in="in_5" out="out_1" value="0" midi="0" />
<volume in="in_5" out="out_2" value="0" midi="0" />
<volume in="in_6" out="out_1" value="0" midi="0" />
<volume in="in_6" out="out_2" value="0" midi="0" />
<volume in="in_7" out="out_1" value="0" midi="0" />
<volume in="in_7" out="out_2" value="0" midi="0" />
<volume in="in_8" out="out_1" value="0" midi="0" />
<volume in="in_8" out="out_2" value="0" midi="0" />
</matrix>
<elements>
</elements>
</jackmix>
11 changes: 11 additions & 0 deletions jackmix/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ void MainWindow::init() {
_filemenu->addAction( "Save File...", this, SLOT( saveFile() ), Qt::CTRL+Qt::Key_S );
_filemenu->addSeparator();
_filemenu->addAction( "&Quit", this, SLOT( close() ), Qt::CTRL+Qt::Key_Q );


_editmenu = menuBar()->addMenu( "&Edit" );
_select_action = new QAction( "Select Mode", this );
Expand All @@ -130,24 +131,34 @@ void MainWindow::init() {
//_select_action->addTo( new QToolBar( this ) );
_editmenu->addAction( "&Fill empty spaces", this, SLOT( scheduleAutoFill() ) );
_editmenu->addSeparator();

_add_inchannel_action = new QAction( "Add &Input...", this );
connect( _add_inchannel_action, SIGNAL( triggered() ), this, SLOT( addInput() ) );
_editmenu->addAction( _add_inchannel_action );

_add_outchannel_action = new QAction( "Add &Output...", this );
connect( _add_outchannel_action, SIGNAL( triggered() ), this, SLOT( addOutput() ) );
_editmenu->addAction( _add_outchannel_action );

_rename_input_action = new QAction( "Re&name Inputs...", this);
connect( _rename_input_action, SIGNAL( triggered() ), this, SLOT(renameInput()) );
_editmenu->addAction( _rename_input_action );

_rename_output_action = new QAction( "Ren&ame Outputs...", this);
connect( _rename_output_action, SIGNAL( triggered() ), this, SLOT(renameOutput()) );
_editmenu->addAction( _rename_output_action );

_remove_inchannel_action = new QAction( "&Remove Input...", this );
connect( _remove_inchannel_action, SIGNAL( triggered() ), this, SLOT( removeInput() ) );
_editmenu->addAction( _remove_inchannel_action );

_remove_outchannel_action = new QAction( "R&emove Output...", this );
connect( _remove_outchannel_action, SIGNAL( triggered() ), this, SLOT( removeOutput() ) );
_editmenu->addAction( _remove_outchannel_action );

//_replace_action = new QAction( "Replace elements...", this );
//connect( _replace_action, SIGNAL( triggered() ), this, SLOT( slot_simple_select()));
//_editmenu->addAction(_replace_action);

_viewmenu = menuBar()->addMenu( "&View" );
_togglein_action = new QAction( "Hide &inputcontrols", this );
Expand Down
4 changes: 3 additions & 1 deletion jackmix/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#include <QtCore/QList>
#include <QtCore/QHash>
#include <QtWidgets/QGridLayout>

#include <mixingmatrix.h>
#include "controlsender.h"

class QHBox;
Expand Down Expand Up @@ -100,6 +100,8 @@ private slots:
void removeOutput();
void removeOutput( QString );

//void slot_simple_replace();

void allAutoFill();
void scheduleAutoFill();

Expand Down
23 changes: 18 additions & 5 deletions libelements/aux_elements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@
#include <QtWidgets/QLabel>
#include <QtCore/QList>
#include <QtCore/QStringList>
//#include <QtCore/QDebug>
#include <QtWidgets/QAction>
#include <QShortcut>
#include <QtCore/QDebug>

#include <controlreceiver.h>
#include <controlsender.h>
Expand Down Expand Up @@ -77,12 +79,19 @@ AuxElement::AuxElement( QStringList inchannel, QStringList outchannel, MixingMat
: Element( inchannel, outchannel, p, n )
, dB2VolCalc( -42, 6 )
{

if (p->mode() == Widget::Select) {
menu()->addAction( "Select", this, SLOT( slot_simple_select() ) );
menu()->addAction( "Replace", this, SLOT( slot_simple_replace() ) );

menu()->addAction( "&Replace", this, SLOT( slot_simple_replace() ), Qt::Key_R );

_button = new QRadioButton(this);
connect(_button, SIGNAL(clicked()),this,SLOT(slot_simple_select()));
}
menu()->addAction( "Assign MIDI Parameter", this, SLOT( slot_assign_midi_parameters() ) );

menu()->addAction( "&Assign MIDI Parameter", this, SLOT( slot_assign_midi_parameters() ) );


QVBoxLayout* _layout = new QVBoxLayout( this );

if ( _in[0] == _out[0] ) {
Expand All @@ -93,8 +102,12 @@ AuxElement::AuxElement( QStringList inchannel, QStringList outchannel, MixingMat
_poti = new JackMix::GUI::Knob(
amptodb( backend()->getVolume( _in[0], _out[0] ) ),
dbmin, dbmax, 2, 3, this );
_layout->addWidget( _poti, 100 );


//_button = new QRadioButton(this);

_layout->addWidget( _poti, 2000 );

//connect(_button, SIGNAL(buttonClicked()),this,SLOT(slot_simple_select()));
connect( _poti, SIGNAL( valueChanged( double ) ), this, SLOT( emitvalue( double ) ) );
connect( _poti, SIGNAL( select() ), this, SLOT( slot_simple_select() ) );
connect( _poti, SIGNAL( replace() ), this, SLOT( slot_simple_replace() ) );
Expand Down
9 changes: 7 additions & 2 deletions libelements/aux_elements.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#include <mixingmatrix.h>
#include <dbvolcalc.h>
#include <controlreceiver.h>

#include <QRadioButton>
namespace JackMix {

namespace GUI {
Expand All @@ -53,12 +53,17 @@ Q_OBJECT
int outchannels() const { return 1; }

void setIndicator(const QColor& c);


signals:

public slots:


void emitvalue( double );

private:
JackMix::GUI::Knob *_poti;
QRadioButton *_button;
};

void init_aux_elements();
Expand Down
Loading