ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/s10k/Vago/soundWizard/soundpagefinal.cpp
Revision: 1059
Committed: Sun Oct 30 16:01:17 2016 UTC (8 years, 11 months ago) by s10k
Content type: text/x-c++src
Original Path: Vago/trunk/Vago/soundWizard/soundpagefinal.cpp
File size: 16215 byte(s)
Log Message:
Vago 1.2 - fixes for MacOS

File Contents

# Content
1 #include "soundpagefinal.h"
2 #include "ui_soundpagefinal.h"
3
4 SoundPageFinal::SoundPageFinal(QString AppDir, QString soundsLocation, DropTableWidget *page2Table, Logger *myLogger, QHash<QString, QString> *commandMap, QWidget *parent) :
5 QWizardPage(parent),
6 ui(new Ui::soundpagefinal)
7 {
8 ui->setupUi(this);
9 this->soundsLocation=soundsLocation;
10 this->page2Table=page2Table;
11 this->myLogger=myLogger;
12 this->commandMap=commandMap;
13
14 this->xmlCommands = new QStringList();
15 this->oniSplitCommands = new QStringList();
16 this->myXmlProcessor = new XmlProcessor(AppDir, this->myLogger,this->xmlCommands);
17 this->myConverter = new Converter(AppDir, this->myLogger,this->oniSplitCommands);
18
19 ui->lbComplete->setText("<html>The wizard is now complete. The sounds have been converted. "
20 "You can view all converted files clicking <a href=' '>here.</a><br />"
21 "<br />Click restart to create more sounds from the wizard beggining, "
22 "otherwise click finish.</html>"); // Don't use rich text in qtdesigner because it generates platform dependent code
23
24 connectSlots();
25 }
26
27 void SoundPageFinal::openSoundsFolder(){
28 QString outputFolder;
29
30 if(field("rbOther").toBool()){
31 outputFolder=field("leOtherLocation").toString();
32 }
33 else{
34 outputFolder=this->soundsLocation;
35 }
36
37 QDesktopServices::openUrl(QUrl("file:///"+outputFolder));
38 }
39
40 void SoundPageFinal::initializePage(){
41 startProcessing();
42 }
43
44 void SoundPageFinal::startProcessing(){
45 // Sample files names
46 QString ambFile="OSBDsample_file.amb.xml";
47 QString grpFile="OSBDsample_file.grp.xml";
48 QString impFile="OSBDsample_file.imp.xml";
49 QString ambFileLocation=GlobalVars::VagoTemporaryDir+"/"+ambFile;
50 QString grpFileLocation=GlobalVars::VagoTemporaryDir+"/"+grpFile;
51 QString impFileLocation=GlobalVars::VagoTemporaryDir+"/"+impFile;
52
53 // Page 2 variables
54 QString outputFolder;
55
56 // Page 3 variables
57 QString sphereRadious, minElapsedTime, maxElapsedTime, minVolumeDistance,
58 maxVolumeDistance, minOcclusion, treshold, priority;
59 QStringList flags;
60 bool priorityLow = false, priorityNormal = false,
61 priorityHigh = false, priorityHighest = false;
62
63 bool interruptOnStop=false;
64 bool playOnce=false;
65 bool canPan=false;
66
67 // Page 4 variables
68 QString volume, minVolume, maxVolume, pitch, minPitch, weight, maxPitch,
69 numberChannels;
70 bool preventRepeat=false;
71 bool stereo22=false, mono22=false, mono44Pc=false;
72
73 // Page 5 variables
74 QString minVolumeDistanceImp, maxVolumeDistanceImp, minAngleImp,
75 maxAngleImp, minAttenuationImp, impactVelocityImp,
76 minOcclusionImp, priorityImp;
77 bool priorityLowImp = false, priorityNormalImp = false,
78 priorityHighImp = false, priorityHighestImp = false;
79
80 // Create temp folder if it doesn't exist
81 if(!QDir(GlobalVars::VagoTemporaryDir).exists()){
82 QDir().mkdir(GlobalVars::VagoTemporaryDir);
83 }
84
85 // Get data page 2
86 if(field("rbOther").toBool()){
87 outputFolder=field("leOtherLocation").toString();
88 }
89 else{
90 outputFolder=this->soundsLocation;
91 }
92
93 // Get data page 3
94
95 priorityLow=field("rbPriorityLow").toBool();
96 priorityNormal=field("rbPriorityNormal").toBool();
97 priorityHigh=field("rbPriorityHigh").toBool();
98 priorityHighest=field("rbPriorityHighest").toBool();
99
100 if(priorityNormal){
101 priority="Normal";
102 }
103 else if(priorityLow){
104 priority="Low";
105 }
106 else if(priorityHigh){
107 priority="High";
108 }
109 else if(priorityHighest){
110 priority="Highest";
111 }
112
113 if(interruptOnStop){
114 flags << "InterruptTracksOnStop";
115 }
116
117 if(playOnce){
118 flags << "PlayOnce";
119 }
120
121 if(canPan){
122 flags << "CanPan";
123 }
124
125 interruptOnStop=field("cbInterruptOnStop").toBool();
126 playOnce=field("cbPlayOnce").toBool();
127 canPan=field("cbCanPan").toBool();
128
129 sphereRadious=Util::normalizeDecimalSeparator(field("leSphereRadious").toString());
130 minElapsedTime=Util::normalizeDecimalSeparator(field("leMinElapsedTime").toString());
131 maxElapsedTime=Util::normalizeDecimalSeparator(field("leMaxElapsedTime").toString());
132 minVolumeDistance=Util::normalizeDecimalSeparator(field("leMinVolumeDistance").toString());
133 maxVolumeDistance=Util::normalizeDecimalSeparator(field("leMaxVolumeDistance").toString());
134 minOcclusion=Util::normalizeDecimalSeparator(field("leMinOcclusion").toString());
135 treshold=Util::normalizeDecimalSeparator(field("leTreshold").toString());
136
137 // Get data page 4
138
139 volume=Util::normalizeDecimalSeparator(field("leVolume").toString());
140 minVolume=Util::normalizeDecimalSeparator(field("leMinVolume").toString());
141 maxVolume=Util::normalizeDecimalSeparator(field("leMaxVolume").toString());
142 pitch=Util::normalizeDecimalSeparator(field("lePitch").toString());
143 minPitch=Util::normalizeDecimalSeparator(field("leMinPitch").toString());
144 maxPitch=Util::normalizeDecimalSeparator(field("leMaxPitch").toString());
145 weight=Util::normalizeDecimalSeparator(field("leWeight").toString());
146
147 preventRepeat=field("cbPreventRepeat").toBool();
148
149 stereo22=field("rbStereo22").toBool();
150 mono22=field("rbMono22").toBool();
151 mono44Pc=field("rbMono44Pc").toBool();
152
153 if(stereo22 || mono44Pc){
154 numberChannels="2";
155 }
156 else if(mono22){
157 numberChannels="1";
158 }
159
160 // Get data page 5
161 priorityLowImp=field("rbPriorityLowImp").toBool();
162 priorityNormalImp=field("rbPriorityNormalImp").toBool();
163 priorityHighImp=field("rbPriorityHighImp").toBool();
164 priorityHighestImp=field("rbPriorityHighestImp").toBool();
165
166 if(priorityNormalImp){
167 priorityImp="Normal";
168 }
169 else if(priorityLowImp){
170 priorityImp="Low";
171 }
172 else if(priorityHighImp){
173 priorityImp="High";
174 }
175 else if(priorityHighestImp){
176 priorityImp="Highest";
177 }
178
179 minVolumeDistanceImp=Util::normalizeDecimalSeparator(field("leMinVolumeDistanceImp").toString());
180 maxVolumeDistanceImp=Util::normalizeDecimalSeparator(field("leMaxVolumeDistanceImp").toString());
181 minAngleImp=Util::normalizeDecimalSeparator(field("leMinAngleImp").toString());
182 maxAngleImp=Util::normalizeDecimalSeparator(field("leMaxAngleImp").toString());
183 minAttenuationImp=Util::normalizeDecimalSeparator(field("leMinAttenuationImp").toString());
184 impactVelocityImp=Util::normalizeDecimalSeparator(field("leImpactVelocityImp").toString());
185 minOcclusionImp=Util::normalizeDecimalSeparator(field("leMinOcclusionImp").toString());
186
187 //######################################################### Starting xml processing
188
189 // Clean tmp dir
190 if(!Util::rmDir(GlobalVars::VagoTemporaryDir)){
191 UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "Couldn't clean vago temp dir for complete sound wizard. Aborting.\n"+GlobalVars::VagoTemporaryDir);
192 return;
193 }
194
195 if(!QDir(QDir::tempPath()).mkpath("VagoTemp")){
196 UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "Couldn't reconstruct vago temp dir for complete sound wizard. Aborting.\n"+GlobalVars::VagoTemporaryDir);
197 }
198
199 // Copy sample xml files to tmp dir
200 QFile::copy(":/new/sampleFiles/"+ambFile , ambFileLocation);
201 QFile::copy(":/new/sampleFiles/"+grpFile , grpFileLocation);
202 QFile::copy(":/new/sampleFiles/"+impFile , impFileLocation);
203 QFile::setPermissions(ambFileLocation, QFile::ReadOwner | QFile::WriteOwner); //remove read only attribute that come from resources
204 QFile::setPermissions(grpFileLocation, QFile::ReadOwner | QFile::WriteOwner);
205 QFile::setPermissions(impFileLocation, QFile::ReadOwner | QFile::WriteOwner);
206
207 (*this->xmlCommands)
208 << "--replace-all-values -e Priority -n "+Util::insertQuotes(priority)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
209 << "--replace-all-values -e Flags -n "+(flags.join(" ").isEmpty() ? "\" \"" : Util::insertQuotes(flags.join(" ")))+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
210 << "--replace-all-values -e SphereRadius -n "+Util::insertQuotes(sphereRadious)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
211 << "--replace-all-values -e Treshold -n "+Util::insertQuotes(treshold)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
212 << "--replace-all-values -e MinOcclusion -n "+Util::insertQuotes(minOcclusion)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
213 << "--replace-all-values --parent-element-name ElapsedTime -e Max -n "+Util::insertQuotes(maxElapsedTime)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
214 << "--replace-all-values --parent-element-name ElapsedTime -e Min -n "+Util::insertQuotes(minElapsedTime)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
215 << "--replace-all-values --parent-element-name Distance -e Max -n "+Util::insertQuotes(maxVolumeDistance)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
216 << "--replace-all-values --parent-element-name Distance -e Min -n "+Util::insertQuotes(minVolumeDistance)+" -f "+Util::insertQuotes(ambFileLocation)+" --no-backups --no-verbose"
217 << "--replace-all-values --parent-element-name SoundGroup -e Volume -n "+Util::insertQuotes(volume)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
218 << "--replace-all-values --parent-element-name SoundGroup -e Pitch -n "+Util::insertQuotes(pitch)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
219 << "--replace-all-values --parent-element-name SoundGroup -e NumberOfChannels -n "+Util::insertQuotes(numberChannels)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
220 << "--replace-all-values --parent-element-name Volume -e Min -n "+Util::insertQuotes(minVolume)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
221 << "--replace-all-values --parent-element-name Volume -e Max -n "+Util::insertQuotes(maxVolume)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
222 << "--replace-all-values --parent-element-name Pitch -e Min -n "+Util::insertQuotes(minPitch)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
223 << "--replace-all-values --parent-element-name Pitch -e Max -n "+Util::insertQuotes(maxPitch)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
224 << "--replace-all-values -e Weight -n "+Util::insertQuotes(weight)+" -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose"
225 << "--replace-all-values -e Priority -n "+Util::insertQuotes(priorityImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
226 << "--replace-all-values --parent-element-name Distance -e Min -n "+Util::insertQuotes(minVolumeDistanceImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
227 << "--replace-all-values --parent-element-name Distance -e Max -n "+Util::insertQuotes(maxVolumeDistanceImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
228 << "--replace-all-values --parent-element-name Angle -e Min -n "+Util::insertQuotes(minAngleImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
229 << "--replace-all-values --parent-element-name Angle -e Max -n "+Util::insertQuotes(maxAngleImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
230 << "--replace-all-values -e MinAttenuation -n "+Util::insertQuotes(minAttenuationImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
231 << "--replace-all-values -e ImpactVelocity -n "+Util::insertQuotes(impactVelocityImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose"
232 << "--replace-all-values -e MinOcclusion -n "+Util::insertQuotes(minOcclusionImp)+" -f "+Util::insertQuotes(impFileLocation)+" --no-backups --no-verbose";
233
234 if(preventRepeat){
235 (*this->xmlCommands) << "--replace-all-values --parent-element-name SoundGroup -e Flags -n PreventRepeat -f "+Util::insertQuotes(grpFileLocation)+" --no-backups --no-verbose";
236 }
237
238 myXmlProcessor->start();
239 myXmlProcessor->wait(); // Wait until all xml is edited
240
241 QString currFileName;
242 QString currGrpFileLocation;
243 QString currAmbFileLocation;
244 QString currImpFileLocation;
245
246 for(int i=0; i<this->page2Table->rowCount(); i++){
247
248 (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(this->page2Table->item(i,1)->text()); // add location of sound file to convert
249
250 currFileName=this->page2Table->item(i,0)->text(); // get current file name
251 currAmbFileLocation = outputFolder + "/" + QString(ambFile).replace("sample_file",currFileName); // get the new files, filenames
252 currGrpFileLocation = outputFolder + "/" + QString(grpFile).replace("sample_file",currFileName);
253 currImpFileLocation = outputFolder + "/" + QString(impFile).replace("sample_file",currFileName);
254
255 QFile::copy(ambFileLocation, currAmbFileLocation); // make a copy of the sample files that will be the real files
256 QFile::copy(grpFileLocation, currGrpFileLocation);
257 QFile::copy(impFileLocation, currImpFileLocation);
258
259 (*this->xmlCommands) << "--replace-all-values -e BaseTrack1 -n "+Util::insertQuotes(currFileName)+" -f "+Util::insertQuotes(currAmbFileLocation)+" --no-backups --no-verbose" // process the xml
260 << "--replace-all-values -e Sound -n "+Util::insertQuotes(currFileName)+" -f "+Util::insertQuotes(currGrpFileLocation)+" --no-backups --no-verbose"
261 << "--replace-all-values -e Group -n "+Util::insertQuotes(currFileName)+" -f "+Util::insertQuotes(currImpFileLocation)+" --no-backups --no-verbose";
262
263 myXmlProcessor->start();
264 myXmlProcessor->wait(); // Wait until all xml is edited
265
266 (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(currAmbFileLocation);
267 (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(currGrpFileLocation);
268 (*this->oniSplitCommands) << this->commandMap->value("xml->XML->ONI")+" "+Util::insertQuotes(outputFolder)+" "+Util::insertQuotes(currImpFileLocation);
269 }
270
271 this->myConverter->start(); // finally process the onisplit commands
272 this->myConverter->wait(); // wait for it to complete
273 }
274
275 void SoundPageFinal::catchXmlAndOSplitProcessingError(QString result, int numErrors){
276
277 if(numErrors!=0){
278 QString sNumErrors=QString::number(numErrors);
279 if(numErrors>1){
280 UtilVago::showErrorPopUpLogButton(result+"\n This is the last of " + sNumErrors + " errors.");
281 }
282 else{
283 UtilVago::showErrorPopUpLogButton(result);
284 }
285 }
286 }
287
288 void SoundPageFinal::connectSlots(){
289 //This signal is for thread that is working setup the progress bar (make it visible and set it's min-max)
290 connect(this->myXmlProcessor, SIGNAL(resultConversion(QString, int)), this, SLOT(catchXmlAndOSplitProcessingError(QString, int)));
291 connect(this->myConverter, SIGNAL(resultConversion(QString, int)), this, SLOT(catchXmlAndOSplitProcessingError(QString, int)));
292 connect(ui->lbComplete, SIGNAL(linkActivated(const QString & )), this, SLOT(openSoundsFolder()));
293 }
294
295 SoundPageFinal::~SoundPageFinal()
296 {
297 delete this->xmlCommands;
298 delete this->oniSplitCommands;
299 delete this->myXmlProcessor;
300 delete this->myConverter;
301 delete ui;
302 }