Correct CWAV info chunk length.
This commit is contained in:
parent
53eeb3dbea
commit
9dbc8595da
1 changed files with 4 additions and 5 deletions
|
@ -27,7 +27,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char magic[4] = {'I', 'N', 'F', 'O'};
|
char magic[4] = {'I', 'N', 'F', 'O'};
|
||||||
u32 length = 0xC0;
|
u32 length;
|
||||||
u32 type;
|
u32 type;
|
||||||
u32 sampleRate;
|
u32 sampleRate;
|
||||||
u32 unknown1 = 0;
|
u32 unknown1 = 0;
|
||||||
|
@ -59,11 +59,9 @@ u8* cwav_build(CWAV cwav, u32* size) {
|
||||||
u32 offset = sizeof(CWAVHeader);
|
u32 offset = sizeof(CWAVHeader);
|
||||||
|
|
||||||
header.infoChunkOffset = offset;
|
header.infoChunkOffset = offset;
|
||||||
header.infoChunkLength = sizeof(CWAVInfoHeader);
|
header.infoChunkLength = (u32) sizeof(CWAVInfoHeader) + (u32) ((sizeof(CWAVChannelDataPointer) + sizeof(CWAVChannelData)) * cwav.channels);
|
||||||
offset += header.infoChunkLength;
|
offset += header.infoChunkLength;
|
||||||
|
|
||||||
offset += (sizeof(CWAVChannelDataPointer) + sizeof(CWAVChannelData)) * cwav.channels;
|
|
||||||
|
|
||||||
header.dataChunkOffset = offset;
|
header.dataChunkOffset = offset;
|
||||||
header.dataChunkLength = (u32) sizeof(CWAVDataHeader) + cwav.dataSize;
|
header.dataChunkLength = (u32) sizeof(CWAVDataHeader) + cwav.dataSize;
|
||||||
offset += header.dataChunkLength;
|
offset += header.dataChunkLength;
|
||||||
|
@ -79,6 +77,7 @@ u8* cwav_build(CWAV cwav, u32* size) {
|
||||||
u32 bytesPerSample = (u32) cwav.bitsPerSample / 8;
|
u32 bytesPerSample = (u32) cwav.bitsPerSample / 8;
|
||||||
|
|
||||||
CWAVInfoHeader infoHeader;
|
CWAVInfoHeader infoHeader;
|
||||||
|
infoHeader.length = header.infoChunkLength;
|
||||||
infoHeader.type = cwav.bitsPerSample == 16 ? PCM16 : PCM8;
|
infoHeader.type = cwav.bitsPerSample == 16 ? PCM16 : PCM8;
|
||||||
infoHeader.sampleRate = cwav.sampleRate;
|
infoHeader.sampleRate = cwav.sampleRate;
|
||||||
infoHeader.totalSamples = cwav.dataSize / bytesPerSample / cwav.channels;
|
infoHeader.totalSamples = cwav.dataSize / bytesPerSample / cwav.channels;
|
||||||
|
@ -102,7 +101,7 @@ u8* cwav_build(CWAV cwav, u32* size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
CWAVDataHeader dataHeader;
|
CWAVDataHeader dataHeader;
|
||||||
dataHeader.length = (u32) sizeof(CWAVDataHeader) + cwav.dataSize;
|
dataHeader.length = header.dataChunkLength;
|
||||||
memcpy(output + pos, &dataHeader, sizeof(CWAVDataHeader));
|
memcpy(output + pos, &dataHeader, sizeof(CWAVDataHeader));
|
||||||
pos += sizeof(CWAVDataHeader);
|
pos += sizeof(CWAVDataHeader);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue