summaryrefslogtreecommitdiff
path: root/attic/muse2-oom/muse2/synti/fluidsynth/fluidsynthgui.cpp
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2011-09-15 12:14:55 +0000
committerRobert Jonsson <spamatica@gmail.com>2011-09-15 12:14:55 +0000
commitb0546e5e7f7044019892543c6c82029db8d564a7 (patch)
tree1b96a6260900f3fbf3513fb48a5a72aa89052dc8 /attic/muse2-oom/muse2/synti/fluidsynth/fluidsynthgui.cpp
parent583c73d1a07154d3d2672d65d8cce6495f490454 (diff)
moved attic to a branch of it's own
Diffstat (limited to 'attic/muse2-oom/muse2/synti/fluidsynth/fluidsynthgui.cpp')
-rw-r--r--attic/muse2-oom/muse2/synti/fluidsynth/fluidsynthgui.cpp837
1 files changed, 0 insertions, 837 deletions
diff --git a/attic/muse2-oom/muse2/synti/fluidsynth/fluidsynthgui.cpp b/attic/muse2-oom/muse2/synti/fluidsynth/fluidsynthgui.cpp
deleted file mode 100644
index 343391f8..00000000
--- a/attic/muse2-oom/muse2/synti/fluidsynth/fluidsynthgui.cpp
+++ /dev/null
@@ -1,837 +0,0 @@
-/*
- * MusE FLUID Synth softsynth plugin
- *
- * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net)
- *
- * $Id: fluidsynthgui.cpp,v 1.13.2.2 2009/08/12 20:47:01 spamatica Exp $
- *
- */
-
-#include "fluidsynthgui.h"
-#include "fluidsynti.h"
-
-#include <QFileDialog>
-#include <QIcon>
-#include <QLabel>
-#include <QMenu>
-#include <QSocketNotifier>
-#include <QTableWidgetItem>
-#include <QTreeWidgetItem>
-
-#include "muse/midi.h"
-#include "icons.h"
-
-
- /*
-#include "muse/debug.h"
-#include <iomanip>
-#include <qtooltip.h>
-#include <qapplication.h>
-#include <qlistbox.h>
-#define MUSE_FLUID_DEBUG false
-*/
-
-FluidSynthGui::FluidSynthGui()
- : MessGui()
- {
- setWindowIcon(QIcon(":/fluidsynth0.png"));
- setupUi(this);
- channelListView->setRowCount(FS_MAX_NR_OF_CHANNELS);
- channelListView->setSelectionMode(QAbstractItemView::SingleSelection);
- QLabel *fluidLabel = new QLabel;
- fluidLabel->setPixmap(QIcon(":/fluidsynth1.png").pixmap(124, 45));
- FluidGrid->addWidget(fluidLabel, 2, 1, Qt::AlignHCenter);
-
- ChorusType->setItemIcon(0, QIcon(*sineIcon));
- ChorusType->setItemIcon(1, QIcon(*sawIcon));
-
- //Connect socketnotifier to fifo
- QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read);
- connect(s, SIGNAL(activated(int)), SLOT(readMessage(int)));
- connect (Push, SIGNAL (clicked()), SLOT(loadClicked()));
-
- lastdir = "";
-
- ReverbFrame->setEnabled(true);
- ChorusFrame->setEnabled(true);
-
- if (!FS_DEBUG)
- dumpInfoButton->hide();
-
- //Init reverb sliders:
- /*ReverbRoomSize->setValue((int)(16383*FS_PREDEF_REVERB_ROOMSIZE));
- ReverbDamping->setValue((int)(16383*FS_PREDEF_REVERB_DAMPING));
- ReverbWidth->setValue((int)(16383*FS_PREDEF_REVERB_WIDTH));*/
-
- connect(Gain, SIGNAL(valueChanged(int)), SLOT(changeGain(int)));
- connect(dumpInfoButton , SIGNAL(clicked()), SLOT(dumpInfo()));
- connect(channelListView, SIGNAL(itemClicked(QTableWidgetItem*)),
- this, SLOT(channelItemClicked(QTableWidgetItem*)));
-
- connect(Reverb, SIGNAL (toggled(bool)), SLOT(toggleReverb(bool)));
- connect(ReverbLevel, SIGNAL (valueChanged (int)), SLOT(changeReverbLevel(int)));
- connect(ReverbRoomSize, SIGNAL (valueChanged (int)), SLOT(changeReverbRoomSize(int)));
- connect(ReverbDamping, SIGNAL (valueChanged (int)), SLOT(changeReverbDamping(int)));
- connect(ReverbWidth, SIGNAL (valueChanged (int)), SLOT(changeReverbWidth(int)));
-
- connect (Pop, SIGNAL (clicked()), SLOT(popClicked()));
- connect(sfListView, SIGNAL(itemClicked(QTreeWidgetItem*, int)),
- this, SLOT(sfItemClicked(QTreeWidgetItem*, int)));
- connect(Chorus, SIGNAL (toggled (bool)), SLOT(toggleChorus (bool)));
- connect(ChorusNumber, SIGNAL (valueChanged (int)), SLOT(changeChorusNumber (int)));
- connect(ChorusType, SIGNAL (activated (int)), SLOT(changeChorusType (int)));
- connect(ChorusSpeed, SIGNAL (valueChanged (int)), SLOT(changeChorusSpeed (int)));
- connect(ChorusDepth, SIGNAL (valueChanged (int)), SLOT(changeChorusDepth (int)));
- connect(ChorusLevel, SIGNAL (valueChanged (int)), SLOT(changeChorusLevel (int)));
-/*
- _notifier = new QSocketNotifier(0, QSocketNotifier::Read);
- connect(_notifier, SIGNAL(activated(int)), SLOT(readData(int)));
-
- //Setup the ListView
- sfListView->setColumnWidthMode(MUSE_FLUID_ID_COL,QListView::Maximum);
- sfListView->setColumnWidthMode(MUSE_FLUID_SFNAME_COL,QListView::Maximum);
-
- sfListView->setColumnAlignment(MUSE_FLUID_ID_COL,AlignHCenter);
- sfListView->setSorting(MUSE_FLUID_ID_COL,true);
- channelListView->setColumnAlignment(MUSE_FLUID_CHANNEL_COL,AlignHCenter);
-
- _currentlySelectedFont = -1; //No selected font to start with
- // The GUI-process is killed every time the window is shut,
- // need to get all parameters from the synth
-
- requestAllParameters();
-
- */
-
- //Clear channels
- for (int i=0; i<FS_MAX_NR_OF_CHANNELS; i++)
- channels[i] = FS_UNSPECIFIED_ID;
-
- // work around for probable QT/WM interaction bug.
- // for certain window managers, e.g xfce, this window is
- // is displayed although not specifically set to show();
- // bug: 2811156 Softsynth GUI unclosable with XFCE4 (and a few others)
- show();
- hide();
- }
-
-FluidSynthGui::~FluidSynthGui()
- {
- /*
- delete _notifier;
- */
- }
-
-void FluidSynthGui::toggleReverb(bool on) { sendController(0, FS_REVERB_ON, on); }
-void FluidSynthGui::changeReverbLevel(int val) { sendController(0, FS_REVERB_LEVEL, val); }
-void FluidSynthGui::changeReverbRoomSize(int val) { sendController(0, FS_REVERB_ROOMSIZE, val); }
-void FluidSynthGui::changeReverbWidth(int val) { sendController(0, FS_REVERB_WIDTH, val); }
-void FluidSynthGui::changeReverbDamping(int val) { sendController(0, FS_REVERB_DAMPING, val); }
-
-void FluidSynthGui::toggleChorus(bool val) { sendController(0, FS_CHORUS_ON, val); }
-void FluidSynthGui::changeChorusNumber(int val) { sendController(0, FS_CHORUS_NUM, val); }
-void FluidSynthGui::changeChorusType(int val) { sendController(0, FS_CHORUS_TYPE, val); }
-void FluidSynthGui::changeChorusSpeed(int val) { sendController(0, FS_CHORUS_SPEED, val); }
-void FluidSynthGui::changeChorusDepth(int val) { sendController(0, FS_CHORUS_DEPTH, val); }
-void FluidSynthGui::changeChorusLevel(int val) { sendController(0, FS_CHORUS_LEVEL, val); }
-
- /*
-
-void FluidSynthGui::pushClicked()
- {
- const QString& fns = Filename->text();
- if (fns.isEmpty())
- return;
- const char * fn = fns.toLatin1();
-
- int datalen = strlen(fn) + 3;
- unsigned char data [datalen];
- data[0] = MUSE_FLUID_SOUNDFONT_PUSH;
- data[1] = MUSE_FLUID_UNSPECIFIED_ID; //This makes the client choose next available external id
- memcpy(data + 2, fn, strlen(fn) + 1 ); //Store filename
- sendSysex(data, datalen);
- data[0] = MUSE_FLUID_GUI_REQ_SOUNDFONTS; //For simplicity's sake, just get all the soundfont data again.
- sendSysex(data, 1);
- printf("Gui sent Sysex.\n");
-
- return;
- }
- */
-
-void FluidSynthGui::loadClicked()
- {
- QString filename = QFileDialog::getOpenFileName(this,
- tr("Choose soundfont"),
- lastdir,
- QString("*.[Ss][Ff]2"));
-
- if (filename != QString::null) {
- int lastslash = filename.lastIndexOf('/');
- lastdir = filename.left(lastslash);
-
- sendLastdir(lastdir);
- sendLoadFont(filename);
- }
- }
-
-//---------------------------------------------------------
-// sendLastdir
-// Send the last dir-value to the client
-//---------------------------------------------------------
-
-void FluidSynthGui::sendLastdir(QString dir)
- {
- int l = dir.length()+2;
- byte data[l];
- data[0] = FS_LASTDIR_CHANGE;
- memcpy(data+1, dir.toLatin1(), dir.length()+1);
- sendSysex(data,l);
- }
-
-//---------------------------------------------------------
-// sendLoadFont
-// Tell the client to load a font with first available id
-//---------------------------------------------------------
-
-void FluidSynthGui::sendLoadFont(QString filename)
- {
- int l = filename.length()+3;
- byte data[l];
- data[0] = FS_PUSH_FONT;
- data[1] = FS_UNSPECIFIED_ID;
- memcpy(data+2, filename.toLatin1(), filename.length()+1);
- sendSysex(data,l);
- }
-
-//---------------------------------------------------------
-// processEvent
-//---------------------------------------------------------
-
-void FluidSynthGui::processEvent(const MidiPlayEvent& ev)
- {
- //Sysexes sent from the client
- if (ev.type() == ME_SYSEX) {
- byte* data = ev.data();
- switch (*data) {
- case FS_LASTDIR_CHANGE:
- lastdir = QString((const char*)data+1);
- break;
- case FS_ERROR: {
- char* msg = (char*) (data+1);
-
- printf("Muse: fluidsynth error: %s\n", msg);
-
- break;
- }
- case FS_SEND_SOUNDFONTDATA: {
- int chunk_len;
- int filename_len;
-
- int count = (int)*(data+1); //Number of elements
- byte* cp = data+2; //Point to beginning of first chunk
- sfListView->clear(); //Clear the listview
- stack.clear(); //Clear the stack since we're starting over again
-
- while (count) {
- FluidGuiSoundFont font;
- filename_len = strlen((const char*)cp) + 1;
- font.name = (const char*)cp;
- font.id = *(cp + filename_len);
- chunk_len = filename_len + FS_SFDATALEN;
- stack.push_front(font);
- cp += chunk_len; //Move to next chunk
- count--;
- }
- updateSoundfontListView();
- updateChannelListView();
- break;
- }
- case FS_SEND_CHANNELINFO: {
- byte* chptr = (data+1);
- for (int i=0; i< FS_MAX_NR_OF_CHANNELS; i++) {
- byte id = *chptr;
- byte channel = *(chptr+1);
- channels[channel] = id;
- chptr+=2;
- }
- updateChannelListView();
-
- break;
- }
- case FS_SEND_DRUMCHANNELINFO: {
- byte* drumchptr = (data+1);
- for (int i=0; i<FS_MAX_NR_OF_CHANNELS; i++) {
- drumchannels[i] = *drumchptr;
- drumchptr++;
- }
- updateChannelListView();
- break;
- }
- default:
- if (FS_DEBUG)
- printf("FluidSynthGui::processEvent() : Unknown Sysex received: %d\n", ev.type());
- break;
- }
- }
- //Controllers sent from the client:
- else
- if(ev.type() == ME_CONTROLLER) {
- int id = ev.dataA();
- int val = ev.dataB();
- switch (id) {
- case FS_GAIN: {
- bool sb = Gain->signalsBlocked();
- Gain->blockSignals(true);
- // Update Gain-slider without causing it to respond to it's own signal (and send another msg to the synth)
- Gain->setValue(val);
- Gain->blockSignals(sb);
- break;
- }
- case FS_REVERB_ON: {
- bool sb = Reverb->signalsBlocked();
- Reverb->blockSignals(true);
- Reverb->setChecked(val);
- Reverb->blockSignals(sb);
- break;
- }
- case FS_REVERB_LEVEL: {
- bool sb = ReverbLevel->signalsBlocked();
- ReverbLevel->blockSignals(true);
- ReverbLevel->setValue(val);
- ReverbLevel->blockSignals(sb);
- break;
- }
- case FS_REVERB_DAMPING: {
- bool sb = ReverbDamping->signalsBlocked();
- ReverbDamping->blockSignals(true);
- ReverbDamping->setValue(val);
- ReverbDamping->blockSignals(sb);
- break;
- }
- case FS_REVERB_ROOMSIZE: {
- bool sb = ReverbRoomSize->signalsBlocked();
- ReverbRoomSize->blockSignals(true);
- ReverbRoomSize->setValue(val);
- ReverbRoomSize->blockSignals(sb);
- break;
- }
- case FS_REVERB_WIDTH: {
- bool sb = ReverbWidth->signalsBlocked();
- ReverbWidth->blockSignals(true);
- ReverbWidth->setValue(val);
- ReverbWidth->blockSignals(sb);
- break;
- }
- case FS_CHORUS_ON: {
- Chorus->blockSignals(true);
- Chorus->setChecked(val);
- Chorus->blockSignals(false);
- break;
- }
- case FS_CHORUS_SPEED: {
- ChorusSpeed->blockSignals(true);
- ChorusSpeed->setValue(val);
- ChorusSpeed->blockSignals(false);
- break;
- }
- case FS_CHORUS_NUM: {
- ChorusNumber->blockSignals(true);
- ChorusNumber->setValue(val);
- ChorusNumber->blockSignals(false);
- break;
- }
- case FS_CHORUS_TYPE: {
- ChorusType->blockSignals(true);
- ChorusType->setCurrentIndex(val);
- ChorusType->blockSignals(false);
- break;
- }
- case FS_CHORUS_DEPTH: {
- ChorusDepth->blockSignals(true);
- ChorusDepth->setValue(val);
- ChorusDepth->blockSignals(false);
- break;
- }
- case FS_CHORUS_LEVEL: {
- ChorusLevel->blockSignals(true);
- ChorusLevel->setValue(val);
- ChorusLevel->blockSignals(false);
- break;
- }
- default:
- if (FS_DEBUG)
- printf("FluidSynthGui::processEvent() : Unknown controller sent to gui: %x\n",id);
- break;
- }
- }
- else
- if (FS_DEBUG)
- printf("FluidSynthGui::processEvent - unknown event of type %dreceived from synth.\n", ev.type());
- }
-
-//---------------------------------------------------------
-// readMessage
-//---------------------------------------------------------
-void FluidSynthGui::readMessage(int)
- {
- MessGui::readMessage();
- }
-
-//---------------------------------------------------------
-// updateChannels
-//---------------------------------------------------------
-void FluidSynthGui::updateChannelListView()
- {
- if (FS_DEBUG)
- printf("FluidSynthGui::updateChannelListView\n");
- channelListView->clearContents();
- for (int i=0; i<FS_MAX_NR_OF_CHANNELS; i++) {
- QString chanstr, sfidstr, drumchanstr;
-
- //Soundfont id string:
- if (channels[i] == FS_UNSPECIFIED_ID)
- sfidstr = "unspecified";
- else
- sfidstr = getSoundFontName(channels[i]);
- //Channel string:
- chanstr = QString::number(i+1);
- if (chanstr.length()==1)
- chanstr = "0" + chanstr;
-
- //Drumchan string:
- if (drumchannels[i])
- drumchanstr = "Yes";
- else
- drumchanstr = "No";
-
- QTableWidgetItem* chan_ = new QTableWidgetItem(chanstr);
- channelListView->setItem(i, FS_CHANNEL_COL, chan_);
- QTableWidgetItem* sfid_ = new QTableWidgetItem(QIcon(*buttondownIcon), sfidstr);
- channelListView->setItem(i, FS_SF_ID_COL, sfid_);
- QTableWidgetItem* drum_ = new QTableWidgetItem(QIcon(*buttondownIcon), drumchanstr);
- channelListView->setItem(i, FS_DRUM_CHANNEL_COL, drum_);
- }
- channelListView->resizeColumnsToContents();
- }
-
-//---------------------------------------------------------
-// updateSoundfontListView
-//---------------------------------------------------------
-void FluidSynthGui::updateSoundfontListView()
- {
- sfListView->clear(); //Clear the listview
- for (std::list<FluidGuiSoundFont>::iterator it = stack.begin(); it != stack.end(); it++) {
- QTreeWidgetItem* qlvNewItem = new QTreeWidgetItem(sfListView);
- QString qsid = QString("%1").arg(it->id);
- qlvNewItem->setText(FS_ID_COL, qsid);
- qlvNewItem->setText(FS_SFNAME_COL, QString(it->name));
- sfListView->addTopLevelItem(qlvNewItem);
- }
- sfListView->sortItems(1, Qt::AscendingOrder);
- }
-
-//---------------------------------------------------------
-// changeGain
-//---------------------------------------------------------
-void FluidSynthGui::changeGain(int value)
- {
- sendController(0, FS_GAIN, value);
- }
-
-
-//---------------------------------------------------------
-// dumpInfoButton
-//---------------------------------------------------------
-void FluidSynthGui::dumpInfo()
- {
- byte data[1];
- data[0] = FS_DUMP_INFO;
- sendSysex(data, 1);
- }
-
-//---------------------------------------------------------
-// getSoundFontName
-//---------------------------------------------------------
-
-QString FluidSynthGui::getSoundFontName(int id)
- {
- QString name = NULL;
- for (std::list<FluidGuiSoundFont>::iterator it = stack.begin(); it != stack.end(); it++) {
- if (id == it->id) {
- name = it->name;
- continue;
- }
- }
- return name;
- }
-
-//---------------------------------------------------------
-// channelItemClicked
-// change channel parameters like soundfont / drumchannel on/off
-//---------------------------------------------------------
-
-void FluidSynthGui::channelItemClicked(QTableWidgetItem* item)
- {
- int col = item->column();
- int row = item->row();
-
- if (col == FS_SF_ID_COL) {
- QMenu* popup = new QMenu(this);
- QPoint ppt = channelListView->visualItemRect(item).bottomLeft();
- QTableWidget* listView = item->tableWidget();
- ppt += QPoint(listView->horizontalHeader()->sectionPosition(col), listView->horizontalHeader()->height());
- ppt = listView->mapToGlobal(ppt);
-
- int i = 0;
- for (std::list<FluidGuiSoundFont>::reverse_iterator it = stack.rbegin(); it != stack.rend(); it++) {
- i++;
- /*byte* d = (byte*) it->name.toLatin1();
- for (int i=0; i<96; i++) {
- if (i%16 == 0)
- printf("%x:",(i+d));
-
- printf("%x ",*(d-48+i));
-
- if (i%16 == 15)
- printf("\n");
- }
- for (int i=0; i<96; i++) {
- if (i%16 == 0)
- printf("%x:",(i+d-48));
-
- printf("%c ",*(d-48+i));
-
- if (i%16 == 15)
- printf("\n");
- }
- printf("\n\n");*/
- QAction* act1 = popup->addAction(it->name);
- act1->setData(i);
- }
- int lastindex = i+1;
- QAction *lastaction = popup->addAction("unspecified");
- lastaction->setData(lastindex);
- QAction * act = popup->exec(ppt, 0);
- if (act) {
- int index = act->data().toInt();
- byte sfid;
- QString fontname;
- if (index == lastindex) {
- sfid = FS_UNSPECIFIED_ID;
- fontname = "unspecified"; //Actually, it's not possible to reset fluid-channels as for now,
- } //so this is just a dummy that makes the synth block any events for the channel
- else {
- sfid = getSoundFontId(act->text());
- fontname = getSoundFontName(sfid);
- }
- //byte channel = atoi(item->text().toLatin1()) - 1;
- byte channel = row;
- sendChannelChange(sfid, channel);
- item->setText(fontname);
- }
- delete popup;
- }
- // Drumchannel column:
- else if (col == FS_DRUM_CHANNEL_COL) {
- QMenu* popup = new QMenu(this);
- QPoint ppt = channelListView->visualItemRect(item).bottomLeft();
- QTableWidget* listView = item->tableWidget();
- ppt += QPoint(listView->horizontalHeader()->sectionPosition(col), listView->horizontalHeader()->height());
- ppt = listView->mapToGlobal(ppt);
- QAction * yes = popup->addAction("Yes");
- yes->setData(1);
- QAction * no = popup->addAction("No");
- no->setData(0);
- //byte channel = atoi(item->text().toLatin1()) - 1;
- byte channel = row;
-
- QAction * act2 = popup->exec(ppt, 0);
- if (act2) {
- int index = act2->data().toInt();
- if (index != drumchannels[channel]) {
- sendDrumChannelChange(index, channel);
- drumchannels[channel] = index;
- item->setText(index == 0 ? "No" : "Yes" );
- }
- }
- delete popup;
- }
- }
-
-//---------------------------------------------------------
-// getSoundFontId
-//---------------------------------------------------------
-
-int FluidSynthGui::getSoundFontId(QString q)
- {
- int id = -1;
- for (std::list<FluidGuiSoundFont>::iterator it = stack.begin(); it != stack.end(); it++) {
- if (q == it->name)
- id = it->id;
- }
- return id;
- }
-
-//---------------------------------------------------------
-// sendChannelChange
-// Tell the client to set a soundfont to a specific fluid channel
-//---------------------------------------------------------
-
-void FluidSynthGui::sendChannelChange(byte font_id, byte channel)
- {
- byte data[3];
- data[0] = FS_SOUNDFONT_CHANNEL_SET;
- data[1] = font_id;
- data[2] = channel;
- sendSysex(data, 3);
- }
-
-//---------------------------------------------------------
-// sendDrumChannelChange
-// Tell the client to set a specific channel to drum channel (equiv to midichan 10)
-//---------------------------------------------------------
-void FluidSynthGui::sendDrumChannelChange(byte onoff, byte channel)
- {
- byte data[3];
- data[0] = FS_DRUMCHANNEL_SET;
- data[1] = onoff;
- data[2] = channel;
- sendSysex(data, 3);
- if (FS_DEBUG)
- printf("Sent FS_DRUMCHANNEL_SET for channel %d, status: %d\n", channel, onoff);
- }
-
-void FluidSynthGui::popClicked()
- {
- byte data[2];
- data[0] = FS_SOUNDFONT_POP;
- data[1] = currentlySelectedFont;
- sendSysex(data,2);
- }
-
-void FluidSynthGui::sfItemClicked(QTreeWidgetItem* item, int /*col*/)
- {
- if (item != 0) {
- currentlySelectedFont = atoi(item->text(FS_ID_COL).toLatin1().constData());
- Pop->setEnabled(true);
- }
- else {
- currentlySelectedFont = -1;
- Pop->setEnabled(false);
- }
- }
-
-#if 0
-
-
-
-void FluidSynthGui::readData (int fd)
- {
- unsigned char buffer[512];
- int n = ::read(fd, buffer, 512);
-// dataInput(buffer, n);
- }
-
-
-
-void FluidSynthGui::changeReverbRoomSize (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_REVERB,
- "roomsize", value);
-}
-
-void FluidSynthGui::changeReverbDamping (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_REVERB,
- "damping", value);
-}
-
-void FluidSynthGui::changeReverbWidth (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_REVERB,
- "width", value);
-}
-
-
-void FluidSynthGui::changeChorusNumber (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS,
- "number", value);
-}
-
-void FluidSynthGui::changeChorusType (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS,
- "type", value);
-}
-
-void FluidSynthGui::changeChorusSpeed (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS,
- "speed", value); //TODO: Right now illegal values may be sent.
- //Make sure they stay within fluidsynths legal boundaries (0.29-5Hz) dunno what that is in doubles
- //This might be the case for the other chorus parameters as well
-}
-
-void FluidSynthGui::changeChorusDepth (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS,
- "depth", value);
-}
-
-void FluidSynthGui::changeChorusLevel (int value) {
- sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS,
- "level", value);
-}
-
-
-void FluidSynthGui::sysexReceived(unsigned char const * data, int len)
- {
- char * cp;
- double * dp;
- //std::cerr << "FluidSynthGui, sysexReceived: " << (int) *data << std::endl;
- switch (*data) {
- case MUSE_FLUID_CLIENT_SEND_PARAMETER:
- cp = (char *) (data + 2);
- dp = (double *) (data + strlen (cp) + 3);
- setParameter ((int) *(data+1), cp, *dp);
- break;
-
- case MUSE_FLUID_GAIN_GET:
- dp = (double *) (data + 1);
- Gain->setValue ((int) (*dp * 12.8));
- break;
-
- case MUSE_FLUID_CLIENT_LASTDIR_CHANGE: {
- if (*(char*)(data+1) != MUSE_FLUID_UNSPECIFIED_LASTDIR)
- _lastDir = QString((char*)(data+1));
- else
- _lastDir="";
- }
-
- default:
- break;
- }
- }
-
-
-
-
-
-
-
-void FluidSynthGui::requestAllParameters () {
- unsigned char data[1];
-
- //data[0] = MUSE_FLUID_ADVGUI_GET;
- //sendSysex (data, 1);
- dbgMsg("Requesting all parameters!\n");
- sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "on");
- sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "roomsize");
- sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "damping");
- sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "width");
- sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "level");
- sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "on");
- sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "number");
- sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "type");
- sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "speed");
- sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "depth");
- sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "level");
- data[0] = MUSE_FLUID_GAIN_GET;
- sendSysex (data, 1);
- data[0] = MUSE_FLUID_GUI_REQ_SOUNDFONTS;
- sendSysex (data, 1);
-}
-
-bool FluidSynthGui::sendParameterRequest (int parameterSet, const char * parameter) {
- size_t parameterMem = strlen (parameter) + 1;
- int datalen = 2 + parameterMem;
- unsigned char * data = new unsigned char [datalen];
- *data = MUSE_FLUID_GUI_REQ_FXPARAMETER_GET;
- *(data + 1) = (char) parameterSet;
- memcpy (data + 2, parameter, parameterMem);
- sendSysex (data, datalen);
- delete data;
- return true;
-}
-
-void FluidSynthGui::setParameter (int parameterSet, const char * parameter, double value) {
- int ival = (int) (value * 128);
- std::string ps (parameter);
- if (parameterSet == MUSE_FLUID_PARAMETER_REVERB) {
- if (ps == "roomsize") {
- ReverbRoomSize->setValue (ival);
- } else if (ps == "damping") {
- ReverbDamping->setValue (ival);
- } else if (ps == "width") {
- ReverbWidth->setValue (ival);
- } else if (ps == "level") {
- ReverbLevel->setValue (ival);
- } else if (ps == "on") {
- Reverb->setChecked (ival);
- }
- } else {
- if (ps == "number") {
- ChorusNumber->setValue (ival);
- } else if (ps == "type") {
- ChorusType->setCurrentItem (ival);
- } else if (ps == "speed") {
- ChorusSpeed->setValue (ival);
- } else if (ps == "depth") {
- ChorusDepth->setValue (ival);
- } else if (ps == "level") {
- ChorusLevel->setValue (ival);
- } else if (ps == "on") {
- Chorus->setChecked (ival);
- }
- }
-}
-
-//Sends parameter to reverb or chorus
-bool FluidSynthGui::sendParameterChange (int parameterSet, const char * parameter, int value) {
- size_t parameterMem = strlen (parameter) + 1;
- int datalen = 2 + parameterMem + sizeof (double);
- unsigned char * data = new unsigned char [datalen];
- *data = (unsigned char) MUSE_FLUID_GUI_REQ_FXPARAMETER_SET;
- *(data + 1) = (unsigned char) parameterSet;
- memcpy (data + 2, parameter, parameterMem);
- double * dp = (double *) (data + 2 + parameterMem);
- *dp = ((double) value) / ((double) 128.0);
- sendSysex (data, datalen);
- delete data;
- return true;
-}
-
-void FluidSynthGui::dbgMsg(const char* msg)
- {
- if (MUSE_FLUID_DEBUG)
- std::cerr << msg << std::endl;
- }
-//---------------------------------------------------------
-// main
-//---------------------------------------------------------
-
-/*QString museProject;
-QString museGlobalShare;
-QString museUser;*/
-
-
-int main(int argc, char* argv[])
-{
-/*
- museUser = getenv("MUSEHOME");
- if (museUser == 0)
- museUser = getenv("HOME");
- museGlobalShare = getenv("MUSE");
- if (museGlobalShare == 0) {
- museGlobalShare = "/usr/muse";
- if (access(museGlobalShare.toLatin1(), R_OK) != 0) {
- museGlobalShare = "/usr/local/muse";
- if (access(museGlobalShare.toLatin1(), R_OK) != 0)
- museGlobalShare = museUser;
- }
- }*/
- char * instanceName = argv[1];
- QApplication app (argc, argv, true);
- QWidget* w = new FluidSynthGui ();
- if (argc > 1)
- w->setCaption(QString(instanceName));
- w->show();
- app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
- qApp->exec();
-}
-
-#endif