From: werner s. <wsc...@us...> - 2004-08-14 07:42:34
|
Update of /cvsroot/lmuse/muse/muse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1612/muse Modified Files: app.cpp audio.cpp audio.h audioprefetch.cpp conf.cpp gconfig.cpp gconfig.h midi.cpp node.cpp song.cpp sync.cpp track.h Log Message: more fixes Index: gconfig.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/gconfig.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** gconfig.cpp 1 Jun 2004 14:25:47 -0000 1.15 --- gconfig.cpp 14 Aug 2004 07:42:23 -0000 1.16 *************** *** 101,104 **** --- 101,105 ---- QString(""), // canvasBgPixmap; QString(""), // style + false, // use JACK freewheel mode }; Index: audio.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/audio.h,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** audio.h 12 Aug 2004 12:55:27 -0000 1.28 --- audio.h 14 Aug 2004 07:42:23 -0000 1.29 *************** *** 32,35 **** --- 32,52 ---- class MidiTrack; + + //--------------------------------------------------------- + // GuiMessages + // messages from sequencer to GUI + // used in Audio::sendMsgToGui(char c) + //--------------------------------------------------------- + + #define MSG_STOP '0' + #define MSG_PLAY '1' + #define MSG_RECORD '2' + #define MSG_SEEK 'G' + #define MSG_JACK_SHUTDOWN 'S' + #define MSG_START_BOUNCE 'f' + #define MSG_STOP_BOUNCE 'F' + #define MSG_GRAPH_CHANGED 'C' + #define MSG_ALSA_CHANGED 'P' + //--------------------------------------------------------- // AudioMsgId *************** *** 155,160 **** void panic(); void processMsg(AudioMsg* msg); - void process1(unsigned samples); - void collectEvents(MidiTrack*, int startTick, int endTick); --- 172,175 ---- Index: node.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/node.cpp,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** node.cpp 12 Aug 2004 14:39:02 -0000 1.39 --- node.cpp 14 Aug 2004 07:42:24 -0000 1.40 *************** *** 715,760 **** //--------------------------------------------------------- ! // processInit //--------------------------------------------------------- ! void AudioOutput::processInit(unsigned nframes) { - _nframes = nframes; for (int i = 0; i < channels(); ++i) { if (jackPorts[i]) ! buffer[i] = audioDevice->getBuffer(jackPorts[i], nframes); else printf("PANIC: processInit: no buffer from audio driver\n"); } - } - - //--------------------------------------------------------- - // process - // synthesize "n" frames at buffer offset "offset" - // current frame position is "pos" - //--------------------------------------------------------- - - void AudioOutput::process(unsigned pos, unsigned n) - { copyData(pos, _channels, n, buffer); - } - - //--------------------------------------------------------- - // silence - //--------------------------------------------------------- - - void AudioOutput::silence(unsigned n) - { - processInit(n); - for (int i = 0; i < channels(); ++i) - memset(buffer[i], 0, n * sizeof(float)); - } - - //--------------------------------------------------------- - // processWrite - //--------------------------------------------------------- - - void AudioOutput::processWrite() - { if (audio->isRecording()) { if (audio->freewheel()) { --- 715,732 ---- //--------------------------------------------------------- ! // process ! // synthesize "n" frames at buffer offset "offset" ! // current frame position is "pos" //--------------------------------------------------------- ! void AudioOutput::process(unsigned pos, unsigned n) { for (int i = 0; i < channels(); ++i) { if (jackPorts[i]) ! buffer[i] = audioDevice->getBuffer(jackPorts[i], n); else printf("PANIC: processInit: no buffer from audio driver\n"); } copyData(pos, _channels, n, buffer); if (audio->isRecording()) { if (audio->freewheel()) { *************** *** 762,769 **** WaveTrack* track = song->bounceTrack; if (track && track->recordFlag() && track->recFile()) ! track->recFile()->write(_channels, buffer, _nframes); // bounce to File: if (recordFlag() && recFile()) ! _recFile->write(_channels, buffer, _nframes); } else { --- 734,741 ---- WaveTrack* track = song->bounceTrack; if (track && track->recordFlag() && track->recFile()) ! track->recFile()->write(_channels, buffer, n); // bounce to File: if (recordFlag() && recFile()) ! _recFile->write(_channels, buffer, n); } else { *************** *** 771,786 **** WaveTrack* track = song->bounceTrack; if (track && track->recordFlag() && track->recFile()) ! track->putFifo(_channels, _nframes, buffer); // bounce to File: ! if (recordFlag() && recFile()) ! putFifo(_channels, _nframes, buffer); } } if (audioClickFlag && song->click()) { ! metronome->addData(audio->pos().frame(), _channels, _nframes, buffer); } } //--------------------------------------------------------- // setName //--------------------------------------------------------- --- 743,775 ---- WaveTrack* track = song->bounceTrack; if (track && track->recordFlag() && track->recFile()) ! track->putFifo(_channels, n, buffer); // bounce to File: ! if (recordFlag() && recFile()) { ! putFifo(_channels, n, buffer); ! } } } if (audioClickFlag && song->click()) { ! metronome->addData(audio->pos().frame(), _channels, n, buffer); } } //--------------------------------------------------------- + // silence + //--------------------------------------------------------- + + void AudioOutput::silence(unsigned n) + { + for (int i = 0; i < channels(); ++i) { + if (jackPorts[i]) + buffer[i] = audioDevice->getBuffer(jackPorts[i], n); + else + printf("PANIC: processInit: no buffer from audio driver\n"); + } + for (int i = 0; i < channels(); ++i) + memset(buffer[i], 0, n * sizeof(float)); + } + + //--------------------------------------------------------- // setName //--------------------------------------------------------- Index: app.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/app.cpp,v retrieving revision 1.116 retrieving revision 1.117 diff -C2 -d -r1.116 -r1.117 *** app.cpp 12 Aug 2004 14:39:02 -0000 1.116 --- app.cpp 14 Aug 2004 07:42:23 -0000 1.117 *************** *** 2429,2432 **** --- 2429,2450 ---- //--------------------------------------------------------- + // resetAllRecordFlags + //--------------------------------------------------------- + + static void resetAllRecordFlags() + { + WaveTrackList* wtl = song->waves(); + for (iWaveTrack i = wtl->begin(); i != wtl->end(); ++i) { + if((*i)->recordFlag()) + song->setRecordFlag(*i, false); + } + MidiTrackList* mtl = song->midis(); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) { + if((*i)->recordFlag()) + song->setRecordFlag(*i, false); + } + } + + //--------------------------------------------------------- // bounceToTrack //--------------------------------------------------------- *************** *** 2468,2471 **** --- 2486,2490 ---- song->bounceTrack = track; song->setRecord(true); + resetAllRecordFlags(); song->setRecordFlag(track, true); audio->msgBounce(); *************** *** 2494,2497 **** --- 2513,2517 ---- ao->setRecFile(sf); song->setRecord(true); + resetAllRecordFlags(); song->setRecordFlag(ao, true); audio->msgBounce(); Index: gconfig.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/gconfig.h,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** gconfig.h 1 Jun 2004 14:25:47 -0000 1.12 --- gconfig.h 14 Aug 2004 07:42:23 -0000 1.13 *************** *** 77,80 **** --- 77,82 ---- QString canvasBgPixmap; QString style; + + bool useJackFreewheelMode; }; Index: conf.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/conf.cpp,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** conf.cpp 14 Jul 2004 18:32:48 -0000 1.33 --- conf.cpp 14 Aug 2004 07:42:23 -0000 1.34 *************** *** 503,506 **** --- 503,508 ---- else if (tag == "transportHandleColor") config.transportHandleColor = readColor(xml); + else if (tag == "freewheelMode") + config.useJackFreewheelMode = xml.parseInt(); else if (tag == "txDeviceId") txDeviceId = xml.parseInt(); *************** *** 815,818 **** --- 817,821 ---- xml.intTag(level, "startMode", config.startMode); xml.strTag(level, "startSong", config.startSong); + xml.intTag(level, "freewheelMode", config.useJackFreewheelMode); xml.intTag(level, "midiInputDevice", midiInputPorts); Index: midi.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midi.cpp,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** midi.cpp 21 Jul 2004 18:26:19 -0000 1.44 --- midi.cpp 14 Aug 2004 07:42:23 -0000 1.45 *************** *** 490,494 **** void Audio::midiPortsChanged() { ! write(sigFd, "P", 1); } --- 490,494 ---- void Audio::midiPortsChanged() { ! sendMsgToGui(MSG_ALSA_CHANGED); } Index: sync.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/sync.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** sync.cpp 1 Jun 2004 14:25:47 -0000 1.6 --- sync.cpp 14 Aug 2004 07:42:24 -0000 1.7 *************** *** 110,114 **** printf("\n"); } ! write(sigFd, "G", 1); break; } --- 110,114 ---- printf("\n"); } ! sendMsgToGui(MSG_SEEK); break; } *************** *** 366,370 **** // int tick = tempomap.time2tick(time); state = PLAY; ! write(sigFd, "1", 1); // say PLAY to gui return; } --- 366,370 ---- // int tick = tempomap.time2tick(time); state = PLAY; ! sendMsgToGui(MSG_PLAY); return; } Index: track.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/track.h,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** track.h 28 Jul 2004 10:17:17 -0000 1.41 --- track.h 14 Aug 2004 07:42:24 -0000 1.42 *************** *** 361,367 **** virtual void setChannels(int n); - void processInit(unsigned); void process(unsigned pos, unsigned frames); - void processWrite(); void silence(unsigned); virtual bool canRecord() const { return true; } --- 361,365 ---- Index: song.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/song.cpp,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** song.cpp 9 Aug 2004 21:28:43 -0000 1.65 --- song.cpp 14 Aug 2004 07:42:24 -0000 1.66 *************** *** 484,488 **** //--------------------------------------------------------- // setRecord ! // set transport loop flag //--------------------------------------------------------- --- 484,488 ---- //--------------------------------------------------------- // setRecord ! // set record flag //--------------------------------------------------------- *************** *** 492,498 **** if (f) { bool alreadyRecEnabled = false; ! Track *selectedTrack = NULL; // loop through list and check if any track is rec enabled ! // if not rec enable the selected track WaveTrackList* wtl = waves(); for (iWaveTrack i = wtl->begin(); i != wtl->end(); ++i) { --- 492,498 ---- if (f) { bool alreadyRecEnabled = false; ! Track *selectedTrack = 0; // loop through list and check if any track is rec enabled ! // if not then rec enable the selected track WaveTrackList* wtl = waves(); for (iWaveTrack i = wtl->begin(); i != wtl->end(); ++i) { *************** *** 502,506 **** break; } ! if((*i)->selected()) selectedTrack = (*i); } --- 502,506 ---- break; } ! if((*i)->selected()) selectedTrack = (*i); } *************** *** 513,521 **** break; } ! if((*it)->selected()) selectedTrack = (*it); } } ! if(!alreadyRecEnabled && selectedTrack != NULL) { setRecordFlag(selectedTrack, true); } --- 513,521 ---- break; } ! if((*it)->selected()) selectedTrack = (*it); } } ! if (!alreadyRecEnabled && selectedTrack) { setRecordFlag(selectedTrack, true); } *************** *** 549,558 **** bounceTrack = 0; } ! if (audio->isPlaying() && f) f = false; ! recordFlag = f; ! ! recordAction->setOn(recordFlag); ! emit recordChanged(recordFlag); } } --- 549,559 ---- bounceTrack = 0; } ! if (audio->isPlaying()) f = false; ! recordAction->setOn(f); ! if (recordFlag != f) { ! recordFlag = f; ! emit recordChanged(recordFlag); ! } } } *************** *** 1092,1096 **** track->setRecordFlag2(val); } - // updateFlags |= SC_RECFLAG; update(SC_RECFLAG); } --- 1093,1096 ---- *************** *** 1356,1374 **** // printf("seqSignal to gui:<%c>\n", buffer[i]); switch(buffer[i]) { ! case '0': // STOP stopRolling(); break; ! case '1': // PLAY setStopPlay(true); break; ! case '2': // record setRecord(true); ! case 'P': // alsa ports changed rescanAlsaPorts(); break; ! case 'G': setPos(0, audio->tickPos(), true, false, true); break; ! case 'S': // shutdown audio muse->seqStop(); --- 1356,1374 ---- // printf("seqSignal to gui:<%c>\n", buffer[i]); switch(buffer[i]) { ! case MSG_STOP: stopRolling(); break; ! case MSG_PLAY: setStopPlay(true); break; ! case MSG_RECORD: setRecord(true); ! case MSG_ALSA_CHANGED: // alsa ports changed rescanAlsaPorts(); break; ! case MSG_SEEK: setPos(0, audio->tickPos(), true, false, true); break; ! case MSG_JACK_SHUTDOWN: muse->seqStop(); *************** *** 1390,1408 **** break; ! case 'f': // start freewheel ! audioDevice->setFreewheel(true); break; ! case 'F': // stop freewheel ! audioDevice->setFreewheel(false); audio->msgPlay(false); - #if 0 - if (record()) - audio->recordStop(); - setStopPlay(false); - #endif break; ! case 'C': audioDevice->graphChanged(); break; --- 1390,1422 ---- break; ! case MSG_START_BOUNCE: ! { ! bool useFreewheel = config.useJackFreewheelMode; ! if (useFreewheel) { ! // check: ! // we cannot use freewheel, if there are active audio input ! // strips ! ! InputList* il = &_inputs; ! for (iAudioInput ii = _inputs.begin(); ii != _inputs.end(); ++i) { ! AudioInput* ai = *ii; ! if (!(ai->mute() || ai->off())) { ! useFreewheel = false; ! break; ! } ! } ! if (useFreewheel) ! audioDevice->setFreewheel(true); ! } ! } break; ! case MSG_STOP_BOUNCE: ! if (audio->freewheel()) ! audioDevice->setFreewheel(false); audio->msgPlay(false); break; ! case MSG_GRAPH_CHANGED: audioDevice->graphChanged(); break; Index: audioprefetch.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/audioprefetch.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** audioprefetch.cpp 12 Aug 2004 14:39:02 -0000 1.15 --- audioprefetch.cpp 14 Aug 2004 07:42:23 -0000 1.16 *************** *** 148,152 **** if (n > lpos) n = 0; - // printf("prefetch seek %d\n", writePos); writePos = lpos - n; } --- 148,151 ---- *************** *** 157,164 **** if ((song->bounceTrack != track) && !track->noInRoute() && track->recordFlag()) continue; - int ch = track->channels(); float* bp[ch]; - // printf("prefetch %d\n", writePos); if (track->prefetchFifo()->getWriteBuffer(ch, segmentSize, bp, writePos)) { printf("Prefetch: NO BUFFER\n"); --- 156,161 ---- Index: audio.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/audio.cpp,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -d -r1.62 -r1.63 *** audio.cpp 12 Aug 2004 12:55:27 -0000 1.62 --- audio.cpp 14 Aug 2004 07:42:23 -0000 1.63 *************** *** 198,203 **** { _running = false; ! printf("JACK shutdown callback\n"); ! write(sigFd, "S", 1); } --- 198,202 ---- { _running = false; ! sendMsgToGui(MSG_JACK_SHUTDOWN); } *************** *** 244,248 **** startRolling(); if (_bounce) ! write(sigFd, "f", 1); } else if (state == LOOP2 && jackState == PLAY) { --- 243,247 ---- startRolling(); if (_bounce) ! sendMsgToGui(MSG_START_BOUNCE); } else if (state == LOOP2 && jackState == PLAY) { *************** *** 257,264 **** state = STOP; if (_bounce) { audioDevice->startTransport(); } else ! write(sigFd, "0", 1); // STOP } else if (state == STOP && jackState == PLAY) { --- 256,264 ---- state = STOP; if (_bounce) { + printf("bounce: start transport\n"); audioDevice->startTransport(); } else ! sendMsgToGui(MSG_STOP); } else if (state == STOP && jackState == PLAY) { *************** *** 286,292 **** } ! for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) ! (*i)->processInit(frames); ! int samplePos = _pos.frame(); if (isPlaying()) { --- 286,290 ---- } ! unsigned samplePos = _pos.frame(); if (isPlaying()) { *************** *** 296,300 **** if (_bounce && _pos >= song->rPos()) { _bounce = false; ! write(sigFd, "F", 1); return; } --- 294,298 ---- if (_bounce && _pos >= song->rPos()) { _bounce = false; ! sendMsgToGui(MSG_STOP_BOUNCE); return; } *************** *** 340,365 **** frameOffset = syncFrame - samplePos; - process1(frames); - for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) - (*i)->processWrite(); - if (isPlaying()) { - _pos += frames; - curTickPos = nextTickPos; - } - } - - //--------------------------------------------------------- - // process1 - //--------------------------------------------------------- - - void Audio::process1(unsigned frames) - { - unsigned samplePos = _pos.frame(); - midiSeq->msgProcess(); ! OutputList* ol = song->outputs(); ! for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) { (*i)->process(samplePos, frames); - } // --- 338,344 ---- frameOffset = syncFrame - samplePos; midiSeq->msgProcess(); ! for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) (*i)->process(samplePos, frames); // *************** *** 381,384 **** --- 360,367 ---- } } + if (isPlaying()) { + _pos += frames; + curTickPos = nextTickPos; + } } *************** *** 500,504 **** if (state != LOOP2 && !freewheel()) audioPrefetch->msgSeek(_pos.frame()); ! write(sigFd, "G", 1); // signal seek to gui } --- 483,487 ---- if (state != LOOP2 && !freewheel()) audioPrefetch->msgSeek(_pos.frame()); ! sendMsgToGui(MSG_SEEK); } *************** *** 545,549 **** } state = PLAY; ! write(sigFd, "1", 1); // Play if (genMMC) --- 528,532 ---- } state = PLAY; ! sendMsgToGui(MSG_PLAY); if (genMMC) *************** *** 640,644 **** recording = false; endRecordPos = _pos; ! write(sigFd, "0", 1); // STOP } --- 623,627 ---- recording = false; endRecordPos = _pos; ! sendMsgToGui(MSG_STOP); } *************** *** 690,693 **** --- 673,677 ---- delete sf; // close ao->setRecFile(0); + printf("recordStop(): close bounce output file\n"); ao->setRecordFlag1(false); msgSetRecord(ao, false); |