account for non-beginning loop point location
Ig I will optimize some of the calculations later when account for fadeout is added
This commit is contained in:
parent
481a5710df
commit
17f6ea5c6a
|
@ -2582,12 +2582,21 @@ int FurnaceGUI::loadStream(String path) {
|
|||
|
||||
|
||||
void FurnaceGUI::exportAudio(String path, DivAudioExportModes mode) {
|
||||
songOrdersLengths.clear();
|
||||
|
||||
int loopOrder=0;
|
||||
int loopRow=0;
|
||||
int loopEnd=0;
|
||||
e->walkSong(loopOrder,loopRow,loopEnd);
|
||||
e->findSongLength(songHasSongEndCommand, songOrdersLengths, songLength, loopOrder, loopRow, loopEnd); //for progress estimation
|
||||
|
||||
songLoopedSectionLength = songLength;
|
||||
for(int i = 0; i < loopOrder; i++)
|
||||
{
|
||||
songLoopedSectionLength -= songOrdersLengths[i];
|
||||
}
|
||||
songLoopedSectionLength -= loopRow;
|
||||
|
||||
e->saveAudio(path.c_str(),audioExportOptions);
|
||||
displayExporting=true;
|
||||
}
|
||||
|
@ -5839,24 +5848,36 @@ bool FurnaceGUI::loop() {
|
|||
int loopsLeft = 0;
|
||||
int totalLoops = 0;
|
||||
|
||||
if(!songHasSongEndCommand)
|
||||
{
|
||||
e->getLoopsLeft(loopsLeft);
|
||||
e->getTotalLoops(totalLoops);
|
||||
}
|
||||
int curRow = 0;
|
||||
int curOrder = 0;
|
||||
e->getCurSongPos(curRow, curOrder);
|
||||
int curFile = 0;
|
||||
e->getCurFileIndex(curFile);
|
||||
|
||||
int lengthOfOneFile = songLength;
|
||||
|
||||
int curPosInRows = curRow;
|
||||
|
||||
for(int i = 0; i < curOrder; i++)
|
||||
{
|
||||
curPosInRows += songOrdersLengths[i];
|
||||
}
|
||||
int lengthOfOneFile = songLength * (totalLoops + 1);
|
||||
|
||||
if(!songHasSongEndCommand)
|
||||
{
|
||||
e->getLoopsLeft(loopsLeft);
|
||||
e->getTotalLoops(totalLoops);
|
||||
|
||||
lengthOfOneFile += songLoopedSectionLength * totalLoops;
|
||||
|
||||
if(totalLoops != loopsLeft) //we are going 2nd, 3rd, etc. time through the song
|
||||
{
|
||||
curPosInRows -= (songLength - songLoopedSectionLength); //a hack so progress bar does not jump?
|
||||
}
|
||||
}
|
||||
|
||||
//int lengthOfOneFile = songLength * (totalLoops + 1);
|
||||
//songLoopedSectionLength
|
||||
int totalLength = lengthOfOneFile * totalFiles;
|
||||
|
||||
*progressLambda = (float)(curPosInRows +
|
||||
|
|
|
@ -1725,6 +1725,7 @@ class FurnaceGUI {
|
|||
|
||||
std::vector<int> songOrdersLengths; //lengths of all orders (for drawing song export progress)
|
||||
int songLength; //length of all the song in rows
|
||||
int songLoopedSectionLength; //length of looped part of the song
|
||||
bool songHasSongEndCommand; //song has "Song end" command (FFxx)
|
||||
|
||||
struct Settings {
|
||||
|
|
Loading…
Reference in a new issue