summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse2/muse/waveedit/waveview.cpp491
-rw-r--r--muse2/muse/waveedit/waveview.h16
2 files changed, 0 insertions, 507 deletions
diff --git a/muse2/muse/waveedit/waveview.cpp b/muse2/muse/waveedit/waveview.cpp
index df579a43..3e3ea057 100644
--- a/muse2/muse/waveedit/waveview.cpp
+++ b/muse2/muse/waveedit/waveview.cpp
@@ -526,497 +526,6 @@ void WaveView::range(int* s, int *e)
*e = MusEGlobal::tempomap.tick2frame(pe);
}
-//---------------------------------------------------------
-// cmd
-//---------------------------------------------------------
-void WaveView::cmd(int n)
- {
- int modifyoperation = -1;
- double paramA = 0.0;
-
- switch(n) {
- case WaveEdit::CMD_SELECT_ALL:
- if (!editor->parts()->empty()) {
- MusECore::iPart iBeg = editor->parts()->begin();
- MusECore::iPart iEnd = editor->parts()->end();
- iEnd--;
- MusECore::WavePart* beg = (MusECore::WavePart*) iBeg->second;
- MusECore::WavePart* end = (MusECore::WavePart*) iEnd->second;
- selectionStart = beg->frame();
- selectionStop = end->frame() + end->lenFrame();
- redraw();
- }
- break;
-
- case WaveEdit::CMD_EDIT_EXTERNAL:
- modifyoperation = EDIT_EXTERNAL;
- break;
-
- case WaveEdit::CMD_SELECT_NONE:
- selectionStart = selectionStop = 0;
- redraw();
- break;
- case WaveEdit::CMD_EDIT_COPY:
- modifyoperation = COPY;
- break;
- case WaveEdit::CMD_EDIT_CUT:
- modifyoperation = CUT;
- break;
- case WaveEdit::CMD_EDIT_PASTE:
- modifyoperation = PASTE;
- break;
-
- case WaveEdit::CMD_MUTE:
- modifyoperation = MUTE;
- break;
-
- case WaveEdit::CMD_NORMALIZE:
- modifyoperation = NORMALIZE;
- break;
-
- case WaveEdit::CMD_FADE_IN:
- modifyoperation = FADE_IN;
- break;
-
- case WaveEdit::CMD_FADE_OUT:
- modifyoperation = FADE_OUT;
- break;
-
- case WaveEdit::CMD_REVERSE:
- modifyoperation = REVERSE;
- break;
-
- case WaveEdit::CMD_GAIN_FREE: {
- EditGain* editGain = new EditGain(this, lastGainvalue);
- if (editGain->exec() == QDialog::Accepted) {
- lastGainvalue = editGain->getGain();
- modifyoperation = GAIN;
- paramA = (double)lastGainvalue / 100.0;
- }
- delete editGain;
- }
- break;
-
- case WaveEdit::CMD_GAIN_200:
- modifyoperation = GAIN;
- paramA = 2.0;
- break;
-
- case WaveEdit::CMD_GAIN_150:
- modifyoperation = GAIN;
- paramA = 1.5;
- break;
-
- case WaveEdit::CMD_GAIN_75:
- modifyoperation = GAIN;
- paramA = 0.75;
- break;
-
- case WaveEdit::CMD_GAIN_50:
- modifyoperation = GAIN;
- paramA = 0.5;
- break;
-
- case WaveEdit::CMD_GAIN_25:
- modifyoperation = GAIN;
- paramA = 0.25;
- break;
-
- default:
- break;
- }
-
- if (modifyoperation != -1) {
- if (selectionStart == selectionStop && modifyoperation!=PASTE) {
- printf("No selection. Ignoring\n"); //@!TODO: Disable menu options when no selection
- QMessageBox::information(this,
- QString("MusE"),
- QWidget::tr("No selection. Ignoring"));
-
- return;
- }
-
- //if(!modifyWarnedYet)
- //{
- // modifyWarnedYet = true;
- // if(QMessageBox::warning(this, QString("Muse"),
- // tr("Warning! Muse currently operates directly on the sound file.\n"
- // "Undo is supported, but NOT after exit, WITH OR WITHOUT A SAVE!\n"
- // "If you are stuck, try deleting the associated .wca file and reloading."), tr("&Ok"), tr("&Cancel"),
- // QString::null, 0, 1 ) != 0)
- // return;
- //}
- modifySelection(modifyoperation, selectionStart, selectionStop, paramA);
- }
- }
-
-
-//---------------------------------------------------------
-// getSelection
-//---------------------------------------------------------
-MusECore::WaveSelectionList WaveView::getSelection(unsigned startpos, unsigned stoppos)
- {
- MusECore::WaveSelectionList selection;
-
- for (MusECore::iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) {
- MusECore::WavePart* wp = (MusECore::WavePart*)(ip->second);
- unsigned part_offset = wp->frame();
-
- MusECore::EventList* el = wp->events();
- //printf("eventlist length=%d\n",el->size());
-
- for (MusECore::iEvent e = el->begin(); e != el->end(); ++e) {
- MusECore::Event event = e->second;
- if (event.empty())
- continue;
- MusECore::SndFileR file = event.sndFile();
- if (file.isNull())
- continue;
-
- unsigned event_offset = event.frame() + part_offset;
- unsigned event_startpos = event.spos();
- unsigned event_length = event.lenFrame() + event.spos();
- unsigned event_end = event_offset + event_length;
- //printf("startpos=%d stoppos=%d part_offset=%d event_offset=%d event_startpos=%d event_length=%d event_end=%d\n", startpos, stoppos, part_offset, event_offset, event_startpos, event_length, event_end);
-
- if (!(event_end <= startpos || event_offset > stoppos)) {
- int tmp_sx = startpos - event_offset + event_startpos;
- int tmp_ex = stoppos - event_offset + event_startpos;
- unsigned sx;
- unsigned ex;
-
- tmp_sx < (int)event_startpos ? sx = event_startpos : sx = tmp_sx;
- tmp_ex > (int)event_length ? ex = event_length : ex = tmp_ex;
-
- //printf("Event data affected: %d->%d filename:%s\n", sx, ex, file.name().toLatin1().constData());
- MusECore::WaveEventSelection s;
- s.file = file;
- s.startframe = sx;
- s.endframe = ex+1;
- //printf("sx=%d ex=%d\n",sx,ex);
- selection.push_back(s);
- }
- }
- }
-
- return selection;
- }
-
-//---------------------------------------------------------
-// modifySelection
-//---------------------------------------------------------
-void WaveView::modifySelection(int operation, unsigned startpos, unsigned stoppos, double paramA)
- {
- MusEGlobal::song->startUndo();
-
- if (operation == PASTE) {
- // we need to redefine startpos and stoppos
- if (copiedPart =="")
- return;
- MusECore::SndFile pasteFile(copiedPart);
- pasteFile.openRead();
- startpos = pos[0];
- stoppos = startpos+ pasteFile.samples(); // possibly this is wrong if there are tempo changes
- pasteFile.close();
- pos[0]=stoppos;
- }
-
- MusECore::WaveSelectionList selection = getSelection(startpos, stoppos);
- for (MusECore::iWaveSelection i = selection.begin(); i != selection.end(); i++) {
- MusECore::WaveEventSelection w = *i;
- MusECore::SndFileR& file = w.file;
- unsigned sx = w.startframe;
- unsigned ex = w.endframe;
- unsigned file_channels = file.channels();
-
- QString tmpWavFile = QString::null;
- if (!MusEGlobal::getUniqueTmpfileName("tmp_musewav",".wav", tmpWavFile)) {
- break;
- }
-
- MusEGlobal::audio->msgIdle(true); // Not good with playback during operations
- MusECore::SndFile tmpFile(tmpWavFile);
- tmpFile.setFormat(file.format(), file_channels, file.samplerate());
- if (tmpFile.openWrite()) {
- MusEGlobal::audio->msgIdle(false);
- printf("Could not open temporary file...\n");
- break;
- }
-
- //
- // Write out data that will be changed to temp file
- //
- unsigned tmpdatalen = ex - sx;
- off_t tmpdataoffset = sx;
- float* tmpdata[file_channels];
-
- for (unsigned i=0; i<file_channels; i++) {
- tmpdata[i] = new float[tmpdatalen];
- }
- file.seek(tmpdataoffset, 0);
- file.readWithHeap(file_channels, tmpdata, tmpdatalen);
- file.close();
- tmpFile.write(file_channels, tmpdata, tmpdatalen);
- tmpFile.close();
-
- switch(operation)
- {
- case MUTE:
- muteSelection(file_channels, tmpdata, tmpdatalen);
- break;
-
- case NORMALIZE:
- normalizeSelection(file_channels, tmpdata, tmpdatalen);
- break;
-
- case FADE_IN:
- fadeInSelection(file_channels, tmpdata, tmpdatalen);
- break;
-
- case FADE_OUT:
- fadeOutSelection(file_channels, tmpdata, tmpdatalen);
- break;
-
- case REVERSE:
- reverseSelection(file_channels, tmpdata, tmpdatalen);
- break;
-
- case GAIN:
- applyGain(file_channels, tmpdata, tmpdatalen, paramA);
- break;
- case CUT:
- copySelection(file_channels, tmpdata, tmpdatalen, true, file.format(), file.samplerate());
- break;
- case COPY:
- copySelection(file_channels, tmpdata, tmpdatalen, false, file.format(), file.samplerate());
- break;
- case PASTE:
- {
- MusECore::SndFile pasteFile(copiedPart);
- pasteFile.openRead();
- pasteFile.seek(tmpdataoffset, 0);
- pasteFile.readWithHeap(file_channels, tmpdata, tmpdatalen);
- }
- break;
-
- case EDIT_EXTERNAL:
- editExternal(file.format(), file.samplerate(), file_channels, tmpdata, tmpdatalen);
- break;
-
- default:
- printf("Error: Default state reached in modifySelection\n");
- break;
-
- }
-
- file.openWrite();
- file.seek(tmpdataoffset, 0);
- file.write(file_channels, tmpdata, tmpdatalen);
- file.update();
- file.close();
- file.openRead();
-
- for (unsigned i=0; i<file_channels; i++) {
- delete[] tmpdata[i];
- }
-
- // Undo handling
- MusEGlobal::song->cmdChangeWave(file.dirPath() + "/" + file.name(), tmpWavFile, sx, ex);
- MusEGlobal::audio->msgIdle(false); // Not good with playback during operations
- }
- MusEGlobal::song->endUndo(SC_CLIP_MODIFIED);
- redraw();
- }
-
-//---------------------------------------------------------
-// copySelection
-//---------------------------------------------------------
-void WaveView::copySelection(unsigned file_channels, float** tmpdata, unsigned length, bool blankData, unsigned format, unsigned sampleRate)
-{
- if (copiedPart!="") {
- QFile::remove(copiedPart);
- }
- if (!MusEGlobal::getUniqueTmpfileName("tmp_musewav",".wav", copiedPart)) {
- return;
- }
-
- MusECore::SndFile tmpFile(copiedPart);
- tmpFile.setFormat(format, file_channels, sampleRate);
- tmpFile.openWrite();
- tmpFile.write(file_channels, tmpdata, length);
- tmpFile.close();
-
- if (blankData) {
- // Set everything to 0!
- for (unsigned i=0; i<file_channels; i++) {
- for (unsigned j=0; j<length; j++) {
- tmpdata[i][j] = 0;
- }
- }
- }
-}
-
-//---------------------------------------------------------
-// muteSelection
-//---------------------------------------------------------
-void WaveView::muteSelection(unsigned channels, float** data, unsigned length)
- {
- // Set everything to 0!
- for (unsigned i=0; i<channels; i++) {
- for (unsigned j=0; j<length; j++) {
- data[i][j] = 0;
- }
- }
- }
-
-//---------------------------------------------------------
-// normalizeSelection
-//---------------------------------------------------------
-void WaveView::normalizeSelection(unsigned channels, float** data, unsigned length)
- {
- float loudest = 0.0;
- for (unsigned i=0; i<channels; i++) {
- for (unsigned j=0; j<length; j++) {
- if (data[i][j] > loudest)
- loudest = data[i][j];
- }
- }
-
- double scale = 0.99 / (double)loudest;
-
- for (unsigned i=0; i<channels; i++) {
- for (unsigned j=0; j<length; j++) {
- data[i][j] = (float) ((double)data[i][j] * scale);
- }
- }
- }
-
-//---------------------------------------------------------
-// fadeInSelection
-//---------------------------------------------------------
-void WaveView::fadeInSelection(unsigned channels, float** data, unsigned length)
- {
- for (unsigned i=0; i<channels; i++) {
- for (unsigned j=0; j<length; j++) {
- double scale = (double) j / (double)length ;
- data[i][j] = (float) ((double)data[i][j] * scale);
- }
- }
- }
-
-//---------------------------------------------------------
-// fadeOutSelection
-//---------------------------------------------------------
-void WaveView::fadeOutSelection(unsigned channels, float** data, unsigned length)
- {
- for (unsigned i=0; i<channels; i++) {
- for (unsigned j=0; j<length; j++) {
- double scale = (double) (length - j) / (double)length ;
- data[i][j] = (float) ((double)data[i][j] * scale);
- }
- }
- }
-
-//---------------------------------------------------------
-// reverseSelection
-//---------------------------------------------------------
-void WaveView::reverseSelection(unsigned channels, float** data, unsigned length)
- {
- if(length <= 1)
- return;
- for (unsigned i=0; i<channels; i++) {
- for (unsigned j=0; j<length/2; j++) {
- float tmpl = data[i][j];
- float tmpr = data[i][length - j - 1];
- data[i][j] = tmpr;
- data[i][length - j - 1] = tmpl;
- }
- }
- }
-//---------------------------------------------------------
-// applyGain
-//---------------------------------------------------------
-void WaveView::applyGain(unsigned channels, float** data, unsigned length, double gain)
- {
- for (unsigned i=0; i<channels; i++) {
- for (unsigned j=0; j<length; j++) {
- data[i][j] = (float) ((double)data[i][j] * gain);
- }
- }
- }
-
-//---------------------------------------------------------
-// editExternal
-//---------------------------------------------------------
-void WaveView::editExternal(unsigned file_format, unsigned file_samplerate, unsigned file_channels, float** tmpdata, unsigned tmpdatalen)
- {
- // Create yet another tmp-file
- QString exttmpFileName;
- if (!MusEGlobal::getUniqueTmpfileName("tmp_musewav",".wav", exttmpFileName)) {
- printf("Could not create temp file - aborting...\n");
- return;
- }
-
- MusECore::SndFile exttmpFile(exttmpFileName);
- exttmpFile.setFormat(file_format, file_channels, file_samplerate);
- if (exttmpFile.openWrite()) {
- printf("Could not open temporary file...\n");
- return;
- }
- // Write out change-data to this file:
- exttmpFile.write(file_channels, tmpdata, tmpdatalen);
- exttmpFile.close();
-
- // Forkaborkabork
- int pid = fork();
- if (pid == 0) {
- if (execlp(MusEGlobal::config.externalWavEditor.toLatin1().constData(), MusEGlobal::config.externalWavEditor.toLatin1().constData(), exttmpFileName.toLatin1().constData(), NULL) == -1) {
- perror("Failed to launch external editor");
- // Get out of here
-
-
- // cannot report error through gui, we are in another fork!
- //@!TODO: Handle unsuccessful attempts
- exit(99);
- }
- exit(0);
- }
- else if (pid == -1) {
- perror("fork failed");
- }
- else {
- int status;
- waitpid(pid, &status, 0);
- //printf ("status=%d\n",status);
- if( WEXITSTATUS(status) != 0 ){
- QMessageBox::warning(this, tr("MusE - external editor failed"),
- tr("MusE was unable to launch the external editor\ncheck if the editor setting in:\n"
- "Global Settings->Audio:External Waveditor\nis set to a valid editor."));
- }
-
- if (exttmpFile.openRead()) {
- printf("Could not reopen temporary file!\n");
- }
- else {
- // Re-read file again
- exttmpFile.seek(0, 0);
- size_t sz = exttmpFile.readWithHeap(file_channels, tmpdata, tmpdatalen);
- if (sz != tmpdatalen) {
- // File must have been shrunken - not good. Alert user.
- QMessageBox::critical(this, tr("MusE - file size changed"),
- tr("When editing in external editor - you should not change the filesize\nsince it must fit the selected region.\n\nMissing data is muted"));
- for (unsigned i=0; i<file_channels; i++) {
- for (unsigned j=sz; j<tmpdatalen; j++) {
- tmpdata[i][j] = 0;
- }
- }
- }
- }
- QDir dir = exttmpFile.dirPath();
- dir.remove(exttmpFileName);
- dir.remove(exttmpFile.basename() + ".wca");
- }
- }
} // namespace MusECore
diff --git a/muse2/muse/waveedit/waveview.h b/muse2/muse/waveedit/waveview.h
index 6aa55120..68989aca 100644
--- a/muse2/muse/waveedit/waveview.h
+++ b/muse2/muse/waveedit/waveview.h
@@ -86,21 +86,6 @@ class WaveView : public View {
MusECore::WaveSelectionList getSelection(unsigned startpos, unsigned stoppos);
int lastGainvalue; //!< Stores the last used gainvalue when specifiying gain value in the editgain dialog
- void modifySelection(int operation, unsigned startpos, unsigned stoppos, double paramA); //!< Modifies selection
-
- void muteSelection(unsigned channels, float** data, unsigned length); //!< Mutes selection
- void normalizeSelection(unsigned channels, float** data, unsigned length); //!< Normalizes selection
- void fadeInSelection(unsigned channels, float** data, unsigned length); //!< Linear fade in of selection
- void fadeOutSelection(unsigned channels, float** data, unsigned length); //!< Linear fade out of selection
- void reverseSelection(unsigned channels, float** data, unsigned length); //!< Reverse selection
- void applyGain(unsigned channels, float** data, unsigned length, double gain); //!< Apply gain to selection
- void copySelection(unsigned file_channels, float** tmpdata, unsigned tmpdatalen, bool blankData, unsigned format, unsigned sampleRate);
-
- void editExternal(unsigned file_format, unsigned file_samplerate, unsigned channels, float** data, unsigned length);
-
- //void applyLadspa(unsigned channels, float** data, unsigned length); //!< Apply LADSPA plugin on selection
-
-
private slots:
void setPos(int idx, unsigned val, bool adjustScrollbar);
@@ -120,7 +105,6 @@ class WaveView : public View {
WaveView(MidiEditor*, QWidget* parent, int xscale, int yscale);
QString getCaption() const;
void range(int*, int*);
- void cmd(int n);
MusECore::WavePart* part() { return curPart; }
};