Browse code

Silence various Visual Studio warnings:

* Fix the ones in my code where I could use a proper type or valid casts.
* Ignore the designer-time and compiler-time warnings in vendor code or in my code where I am unable to suppress them via casting.
(Most of these were ignored already before introducing the CMake scripts, because they were in vendor code or were annoying to deal with.)

Naram Qashat authored on 2021/03/29 00:10:11
Showing 1 changed files
... ...
@@ -13,7 +13,7 @@
13 13
 #include "SBNK.h"
14 14
 #include "common.h"
15 15
 
16
-SBNKInstrument::SBNKInstrument(std::uint8_t lowerNote, std::uint8_t upperNote, int recordType) : lowNote(lowerNote), highNote(upperNote),
16
+SBNKInstrument::SBNKInstrument(std::uint8_t lowerNote, std::uint8_t upperNote, std::uint16_t recordType) : lowNote(lowerNote), highNote(upperNote),
17 17
 	record(recordType), swav(0), swar(0), noteNumber(0), attackRate(0), decayRate(0), sustainLevel(0), releaseRate(0), pan(0)
18 18
 {
19 19
 }
Browse code

Rename SBNKInstrument(Range) to SBNKInstrument(Entry).

(SBNKInstrument -> SBNKInstrumentEntry and SBNKIntrumentRange -> SBNKInstrument)
The old names didn't really make much sense when I started porting the creation tools code to C#, so might as well fix them here too.

Naram Qashat authored on 2021/03/21 03:26:56
Showing 1 changed files
... ...
@@ -13,12 +13,12 @@
13 13
 #include "SBNK.h"
14 14
 #include "common.h"
15 15
 
16
-SBNKInstrumentRange::SBNKInstrumentRange(std::uint8_t lowerNote, std::uint8_t upperNote, int recordType) : lowNote(lowerNote), highNote(upperNote),
16
+SBNKInstrument::SBNKInstrument(std::uint8_t lowerNote, std::uint8_t upperNote, int recordType) : lowNote(lowerNote), highNote(upperNote),
17 17
 	record(recordType), swav(0), swar(0), noteNumber(0), attackRate(0), decayRate(0), sustainLevel(0), releaseRate(0), pan(0)
18 18
 {
19 19
 }
20 20
 
21
-void SBNKInstrumentRange::Read(PseudoFile &file)
21
+void SBNKInstrument::Read(PseudoFile &file)
22 22
 {
23 23
 	this->swav = file.ReadLE<std::uint16_t>();
24 24
 	this->swar = file.ReadLE<std::uint16_t>();
... ...
@@ -30,11 +30,11 @@ void SBNKInstrumentRange::Read(PseudoFile &file)
30 30
 	this->pan = file.ReadLE<std::uint8_t>();
31 31
 }
32 32
 
33
-SBNKInstrument::SBNKInstrument() : record(0), ranges()
33
+SBNKInstrumentEntry::SBNKInstrumentEntry() : record(0), instruments()
34 34
 {
35 35
 }
36 36
 
37
-void SBNKInstrument::Read(PseudoFile &file, std::uint32_t startOffset)
37
+void SBNKInstrumentEntry::Read(PseudoFile &file, std::uint32_t startOffset)
38 38
 {
39 39
 	this->record = file.ReadLE<std::uint8_t>();
40 40
 	std::uint16_t offset = file.ReadLE<std::uint16_t>();
... ...
@@ -51,9 +51,9 @@ void SBNKInstrument::Read(PseudoFile &file, std::uint32_t startOffset)
51 51
 			for (std::uint8_t i = 0; i < num; ++i)
52 52
 			{
53 53
 				std::uint16_t thisRecord = file.ReadLE<std::uint16_t>();
54
-				auto range = SBNKInstrumentRange(lowNote + i, lowNote + i, thisRecord);
55
-				range.Read(file);
56
-				this->ranges.push_back(range);
54
+				auto instrument = SBNKInstrument(lowNote + i, lowNote + i, thisRecord);
55
+				instrument.Read(file);
56
+				this->instruments.push_back(instrument);
57 57
 			}
58 58
 		}
59 59
 		else if (this->record == 17)
... ...
@@ -66,23 +66,23 @@ void SBNKInstrument::Read(PseudoFile &file, std::uint32_t startOffset)
66 66
 				std::uint16_t thisRecord = file.ReadLE<std::uint16_t>();
67 67
 				std::uint8_t lowNote = i ? thisRanges[i - 1] + 1 : 0;
68 68
 				std::uint8_t highNote = thisRanges[i];
69
-				auto range = SBNKInstrumentRange(lowNote, highNote, thisRecord);
70
-				range.Read(file);
71
-				this->ranges.push_back(range);
69
+				auto instrument = SBNKInstrument(lowNote, highNote, thisRecord);
70
+				instrument.Read(file);
71
+				this->instruments.push_back(instrument);
72 72
 				++i;
73 73
 			}
74 74
 		}
75 75
 		else
76 76
 		{
77
-			auto range = SBNKInstrumentRange(0, 127, this->record);
78
-			range.Read(file);
79
-			this->ranges.push_back(range);
77
+			auto instrument = SBNKInstrument(0, 127, this->record);
78
+			instrument.Read(file);
79
+			this->instruments.push_back(instrument);
80 80
 		}
81 81
 	}
82 82
 	file.pos = endOfInst;
83 83
 }
84 84
 
85
-SBNK::SBNK(const std::string &fn) : filename(fn), instruments(), info()
85
+SBNK::SBNK(const std::string &fn) : filename(fn), entries(), info()
86 86
 {
87 87
 	std::fill_n(&this->waveArc[0], 4, nullptr);
88 88
 }
... ...
@@ -101,7 +101,7 @@ void SBNK::Read(PseudoFile &file)
101 101
 	std::uint32_t reserved[8];
102 102
 	file.ReadLE(reserved);
103 103
 	std::uint32_t count = file.ReadLE<std::uint32_t>();
104
-	this->instruments.resize(count);
104
+	this->entries.resize(count);
105 105
 	for (std::uint32_t i = 0; i < count; ++i)
106
-		this->instruments[i].Read(file, startOfSBNK);
106
+		this->entries[i].Read(file, startOfSBNK);
107 107
 }
Browse code

Various changes:

* Use enum class instead of enum (except for the enums for the resource IDs, not really necessary there).
* For NCSF specifically, included a function to convert an enum class to its underlying integral type (as this is needed for use with the std::bitset class).
* Cleanup headers so all the ones needed in a file are explicitly included even if they may possibly be included in another header.
* Used forward declarations in a few spots.
* Explicitly namespaced all (u)int*_t uses (this might seem like overkill, but it helps me see when the standard types are being used with a simple search for std::).
* Made sure it all builds with MinGW-w64 as well (both gcc and clang).
* Removed some std::move from DialogBuilder.cpp based on clang's warnings for that.
* Replaced use of std::copy_n on strings in DialogBuilder.cpp with my CopyToString functions that use wcscpy.
* Replaced CHAR_MIN/CHAR_MAX in eqstr.h and ltstr.h with std::numeric_limits<char>::min/max().

Naram Qashat authored on 2021/03/21 03:16:45
Showing 1 changed files
... ...
@@ -6,48 +6,51 @@
6 6
  * http://www.feshrine.net/hacking/doc/nds-sdat.html
7 7
  */
8 8
 
9
+#include <algorithm>
9 10
 #include <stdexcept>
10
-#include "SBNK.h"
11
+#include <cstdint>
11 12
 #include "NDSStdHeader.h"
13
+#include "SBNK.h"
14
+#include "common.h"
12 15
 
13
-SBNKInstrumentRange::SBNKInstrumentRange(uint8_t lowerNote, uint8_t upperNote, int recordType) : lowNote(lowerNote), highNote(upperNote),
16
+SBNKInstrumentRange::SBNKInstrumentRange(std::uint8_t lowerNote, std::uint8_t upperNote, int recordType) : lowNote(lowerNote), highNote(upperNote),
14 17
 	record(recordType), swav(0), swar(0), noteNumber(0), attackRate(0), decayRate(0), sustainLevel(0), releaseRate(0), pan(0)
15 18
 {
16 19
 }
17 20
 
18 21
 void SBNKInstrumentRange::Read(PseudoFile &file)
19 22
 {
20
-	this->swav = file.ReadLE<uint16_t>();
21
-	this->swar = file.ReadLE<uint16_t>();
22
-	this->noteNumber = file.ReadLE<uint8_t>();
23
-	this->attackRate = file.ReadLE<uint8_t>();
24
-	this->decayRate = file.ReadLE<uint8_t>();
25
-	this->sustainLevel = file.ReadLE<uint8_t>();
26
-	this->releaseRate = file.ReadLE<uint8_t>();
27
-	this->pan = file.ReadLE<uint8_t>();
23
+	this->swav = file.ReadLE<std::uint16_t>();
24
+	this->swar = file.ReadLE<std::uint16_t>();
25
+	this->noteNumber = file.ReadLE<std::uint8_t>();
26
+	this->attackRate = file.ReadLE<std::uint8_t>();
27
+	this->decayRate = file.ReadLE<std::uint8_t>();
28
+	this->sustainLevel = file.ReadLE<std::uint8_t>();
29
+	this->releaseRate = file.ReadLE<std::uint8_t>();
30
+	this->pan = file.ReadLE<std::uint8_t>();
28 31
 }
29 32
 
30 33
 SBNKInstrument::SBNKInstrument() : record(0), ranges()
31 34
 {
32 35
 }
33 36
 
34
-void SBNKInstrument::Read(PseudoFile &file, uint32_t startOffset)
37
+void SBNKInstrument::Read(PseudoFile &file, std::uint32_t startOffset)
35 38
 {
36
-	this->record = file.ReadLE<uint8_t>();
37
-	uint16_t offset = file.ReadLE<uint16_t>();
38
-	file.ReadLE<uint8_t>();
39
-	uint32_t endOfInst = file.pos;
39
+	this->record = file.ReadLE<std::uint8_t>();
40
+	std::uint16_t offset = file.ReadLE<std::uint16_t>();
41
+	file.ReadLE<std::uint8_t>();
42
+	std::uint32_t endOfInst = file.pos;
40 43
 	file.pos = startOffset + offset;
41 44
 	if (this->record)
42 45
 	{
43 46
 		if (this->record == 16)
44 47
 		{
45
-			uint8_t lowNote = file.ReadLE<uint8_t>();
46
-			uint8_t highNote = file.ReadLE<uint8_t>();
47
-			uint8_t num = highNote - lowNote + 1;
48
-			for (uint8_t i = 0; i < num; ++i)
48
+			std::uint8_t lowNote = file.ReadLE<std::uint8_t>();
49
+			std::uint8_t highNote = file.ReadLE<std::uint8_t>();
50
+			std::uint8_t num = highNote - lowNote + 1;
51
+			for (std::uint8_t i = 0; i < num; ++i)
49 52
 			{
50
-				uint16_t thisRecord = file.ReadLE<uint16_t>();
53
+				std::uint16_t thisRecord = file.ReadLE<std::uint16_t>();
51 54
 				auto range = SBNKInstrumentRange(lowNote + i, lowNote + i, thisRecord);
52 55
 				range.Read(file);
53 56
 				this->ranges.push_back(range);
... ...
@@ -55,14 +58,14 @@ void SBNKInstrument::Read(PseudoFile &file, uint32_t startOffset)
55 58
 		}
56 59
 		else if (this->record == 17)
57 60
 		{
58
-			uint8_t thisRanges[8];
61
+			std::uint8_t thisRanges[8];
59 62
 			file.ReadLE(thisRanges);
60
-			uint8_t i = 0;
63
+			std::uint8_t i = 0;
61 64
 			while (i < 8 && thisRanges[i])
62 65
 			{
63
-				uint16_t thisRecord = file.ReadLE<uint16_t>();
64
-				uint8_t lowNote = i ? thisRanges[i - 1] + 1 : 0;
65
-				uint8_t highNote = thisRanges[i];
66
+				std::uint16_t thisRecord = file.ReadLE<std::uint16_t>();
67
+				std::uint8_t lowNote = i ? thisRanges[i - 1] + 1 : 0;
68
+				std::uint8_t highNote = thisRanges[i];
66 69
 				auto range = SBNKInstrumentRange(lowNote, highNote, thisRecord);
67 70
 				range.Read(file);
68 71
 				this->ranges.push_back(range);
... ...
@@ -86,19 +89,19 @@ SBNK::SBNK(const std::string &fn) : filename(fn), instruments(), info()
86 89
 
87 90
 void SBNK::Read(PseudoFile &file)
88 91
 {
89
-	uint32_t startOfSBNK = file.pos;
92
+	std::uint32_t startOfSBNK = file.pos;
90 93
 	NDSStdHeader header;
91 94
 	header.Read(file);
92 95
 	header.Verify("SBNK", 0x0100FEFF);
93
-	int8_t type[4];
96
+	std::int8_t type[4];
94 97
 	file.ReadLE(type);
95 98
 	if (!VerifyHeader(type, "DATA"))
96 99
 		throw std::runtime_error("SBNK DATA structure invalid");
97
-	file.ReadLE<uint32_t>(); // size
98
-	uint32_t reserved[8];
100
+	file.ReadLE<std::uint32_t>(); // size
101
+	std::uint32_t reserved[8];
99 102
 	file.ReadLE(reserved);
100
-	uint32_t count = file.ReadLE<uint32_t>();
103
+	std::uint32_t count = file.ReadLE<std::uint32_t>();
101 104
 	this->instruments.resize(count);
102
-	for (uint32_t i = 0; i < count; ++i)
105
+	for (std::uint32_t i = 0; i < count; ++i)
103 106
 		this->instruments[i].Read(file, startOfSBNK);
104 107
 }
Browse code

Replace memcpy/memset with std::copy_n/std::fill_n.

Naram Qashat authored on 2021/03/19 16:25:21
Showing 1 changed files
... ...
@@ -81,7 +81,7 @@ void SBNKInstrument::Read(PseudoFile &file, uint32_t startOffset)
81 81
 
82 82
 SBNK::SBNK(const std::string &fn) : filename(fn), instruments(), info()
83 83
 {
84
-	memset(this->waveArc, 0, sizeof(this->waveArc));
84
+	std::fill_n(&this->waveArc[0], 4, nullptr);
85 85
 }
86 86
 
87 87
 void SBNK::Read(PseudoFile &file)
Browse code

Remove the copy constructors from SBNK, SDAT and SSEQ.

(They were probably holdovers from copying the code from the NCSF creation tools.)

Naram Qashat authored on 2021/03/19 15:54:35
Showing 1 changed files
... ...
@@ -84,24 +84,6 @@ SBNK::SBNK(const std::string &fn) : filename(fn), instruments(), info()
84 84
 	memset(this->waveArc, 0, sizeof(this->waveArc));
85 85
 }
86 86
 
87
-SBNK::SBNK(const SBNK &sbnk) : filename(sbnk.filename), instruments(sbnk.instruments), info(sbnk.info)
88
-{
89
-	memcpy(this->waveArc, sbnk.waveArc, sizeof(this->waveArc));
90
-}
91
-
92
-SBNK &SBNK::operator=(const SBNK &sbnk)
93
-{
94
-	if (this != &sbnk)
95
-	{
96
-		this->filename = sbnk.filename;
97
-		this->instruments = sbnk.instruments;
98
-
99
-		memcpy(this->waveArc, sbnk.waveArc, sizeof(this->waveArc));
100
-		this->info = sbnk.info;
101
-	}
102
-	return *this;
103
-}
104
-
105 87
 void SBNK::Read(PseudoFile &file)
106 88
 {
107 89
 	uint32_t startOfSBNK = file.pos;
Browse code

Remove last modification date from files.

(I never remember to update these and besides, GitHub history can show when they were last modified.)

Naram Qashat authored on 2021/03/19 10:58:12
Showing 1 changed files
... ...
@@ -1,7 +1,6 @@
1 1
 /*
2 2
  * SSEQ Player - SDAT SBNK (Sound Bank) structures
3 3
  * By Naram Qashat (CyberBotX) [cyberbotx@cyberbotx.com]
4
- * Last modification on 2013-03-25
5 4
  *
6 5
  * Nintendo DS Nitro Composer (SDAT) Specification document found at
7 6
  * http://www.feshrine.net/hacking/doc/nds-sdat.html
Browse code

[NCSF] <stdexcept> is actually needed...

(It probably never triggered any errors in the past because of it being implicitly included by some other header file.)

Naram Qashat authored on 2020/08/07 23:18:16
Showing 1 changed files
... ...
@@ -7,6 +7,7 @@
7 7
  * http://www.feshrine.net/hacking/doc/nds-sdat.html
8 8
  */
9 9
 
10
+#include <stdexcept>
10 11
 #include "SBNK.h"
11 12
 #include "NDSStdHeader.h"
12 13
 
Browse code

Import actual code.

Naram Qashat authored on 2013/03/26 02:41:19
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,122 @@
1
+/*
2
+ * SSEQ Player - SDAT SBNK (Sound Bank) structures
3
+ * By Naram Qashat (CyberBotX) [cyberbotx@cyberbotx.com]
4
+ * Last modification on 2013-03-25
5
+ *
6
+ * Nintendo DS Nitro Composer (SDAT) Specification document found at
7
+ * http://www.feshrine.net/hacking/doc/nds-sdat.html
8
+ */
9
+
10
+#include "SBNK.h"
11
+#include "NDSStdHeader.h"
12
+
13
+SBNKInstrumentRange::SBNKInstrumentRange(uint8_t lowerNote, uint8_t upperNote, int recordType) : lowNote(lowerNote), highNote(upperNote),
14
+	record(recordType), swav(0), swar(0), noteNumber(0), attackRate(0), decayRate(0), sustainLevel(0), releaseRate(0), pan(0)
15
+{
16
+}
17
+
18
+void SBNKInstrumentRange::Read(PseudoFile &file)
19
+{
20
+	this->swav = file.ReadLE<uint16_t>();
21
+	this->swar = file.ReadLE<uint16_t>();
22
+	this->noteNumber = file.ReadLE<uint8_t>();
23
+	this->attackRate = file.ReadLE<uint8_t>();
24
+	this->decayRate = file.ReadLE<uint8_t>();
25
+	this->sustainLevel = file.ReadLE<uint8_t>();
26
+	this->releaseRate = file.ReadLE<uint8_t>();
27
+	this->pan = file.ReadLE<uint8_t>();
28
+}
29
+
30
+SBNKInstrument::SBNKInstrument() : record(0), ranges()
31
+{
32
+}
33
+
34
+void SBNKInstrument::Read(PseudoFile &file, uint32_t startOffset)
35
+{
36
+	this->record = file.ReadLE<uint8_t>();
37
+	uint16_t offset = file.ReadLE<uint16_t>();
38
+	file.ReadLE<uint8_t>();
39
+	uint32_t endOfInst = file.pos;
40
+	file.pos = startOffset + offset;
41
+	if (this->record)
42
+	{
43
+		if (this->record == 16)
44
+		{
45
+			uint8_t lowNote = file.ReadLE<uint8_t>();
46
+			uint8_t highNote = file.ReadLE<uint8_t>();
47
+			uint8_t num = highNote - lowNote + 1;
48
+			for (uint8_t i = 0; i < num; ++i)
49
+			{
50
+				uint16_t thisRecord = file.ReadLE<uint16_t>();
51
+				auto range = SBNKInstrumentRange(lowNote + i, lowNote + i, thisRecord);
52
+				range.Read(file);
53
+				this->ranges.push_back(range);
54
+			}
55
+		}
56
+		else if (this->record == 17)
57
+		{
58
+			uint8_t thisRanges[8];
59
+			file.ReadLE(thisRanges);
60
+			uint8_t i = 0;
61
+			while (i < 8 && thisRanges[i])
62
+			{
63
+				uint16_t thisRecord = file.ReadLE<uint16_t>();
64
+				uint8_t lowNote = i ? thisRanges[i - 1] + 1 : 0;
65
+				uint8_t highNote = thisRanges[i];
66
+				auto range = SBNKInstrumentRange(lowNote, highNote, thisRecord);
67
+				range.Read(file);
68
+				this->ranges.push_back(range);
69
+				++i;
70
+			}
71
+		}
72
+		else
73
+		{
74
+			auto range = SBNKInstrumentRange(0, 127, this->record);
75
+			range.Read(file);
76
+			this->ranges.push_back(range);
77
+		}
78
+	}
79
+	file.pos = endOfInst;
80
+}
81
+
82
+SBNK::SBNK(const std::string &fn) : filename(fn), instruments(), info()
83
+{
84
+	memset(this->waveArc, 0, sizeof(this->waveArc));
85
+}
86
+
87
+SBNK::SBNK(const SBNK &sbnk) : filename(sbnk.filename), instruments(sbnk.instruments), info(sbnk.info)
88
+{
89
+	memcpy(this->waveArc, sbnk.waveArc, sizeof(this->waveArc));
90
+}
91
+
92
+SBNK &SBNK::operator=(const SBNK &sbnk)
93
+{
94
+	if (this != &sbnk)
95
+	{
96
+		this->filename = sbnk.filename;
97
+		this->instruments = sbnk.instruments;
98
+
99
+		memcpy(this->waveArc, sbnk.waveArc, sizeof(this->waveArc));
100
+		this->info = sbnk.info;
101
+	}
102
+	return *this;
103
+}
104
+
105
+void SBNK::Read(PseudoFile &file)
106
+{
107
+	uint32_t startOfSBNK = file.pos;
108
+	NDSStdHeader header;
109
+	header.Read(file);
110
+	header.Verify("SBNK", 0x0100FEFF);
111
+	int8_t type[4];
112
+	file.ReadLE(type);
113
+	if (!VerifyHeader(type, "DATA"))
114
+		throw std::runtime_error("SBNK DATA structure invalid");
115
+	file.ReadLE<uint32_t>(); // size
116
+	uint32_t reserved[8];
117
+	file.ReadLE(reserved);
118
+	uint32_t count = file.ReadLE<uint32_t>();
119
+	this->instruments.resize(count);
120
+	for (uint32_t i = 0; i < count; ++i)
121
+		this->instruments[i].Read(file, startOfSBNK);
122
+}