Skip to content

Commit

Permalink
Audio fix (#27)
Browse files Browse the repository at this point in the history
- Fixing audio stream on export
- Updated 2d test export package
  • Loading branch information
Chukobyte authored Jan 9, 2022
1 parent 560a119 commit 52d83cd
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 30 deletions.
2 changes: 1 addition & 1 deletion _version.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"version": "0.46.0"
"version": "0.46.1"
}
Binary file not shown.
8 changes: 8 additions & 0 deletions assets/game_projects/2d_test/project.scfg
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@
"gain": 1.0,
"loops": true
},
{
"type": "audio_stream",
"uid": "test-song",
"file_path": "assets/audio/music/test_song.wav",
"pitch": 1.0,
"gain": 1.0,
"loops": true
},
{
"type": "audio_stream",
"uid": "test-sound",
Expand Down
Binary file modified assets/game_projects/2d_test/seika_engine.pck
Binary file not shown.
3 changes: 2 additions & 1 deletion assets/game_projects/2d_test/src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ def _start(self) -> None:
# config_tool.load_file()
# print(config_tool.data)

self.music_audio_stream = AudioStream.get(stream_uid="test-music")
# self.music_audio_stream = AudioStream.get(stream_uid="test-music")
self.music_audio_stream = AudioStream.get(stream_uid="test-song")
self.sound_audio_stream = AudioStream.get(stream_uid="test-sound")
# self.music_audio_stream.gain = 0.5
# self.music_audio_stream.pitch = 1.0
Expand Down
38 changes: 22 additions & 16 deletions src/core/audio/audio_stream_helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ std::int32_t AudioStreamHelper::ConvertToInt(char* buffer, std::size_t len) {
return a;
}

void AudioStreamHelper::ReadBuffer(char* outBuffer, unsigned char* inBuffer, unsigned int readLength, unsigned int& readIndex) {
for (unsigned int i = 0; i < readLength; i++) {
outBuffer[i] = inBuffer[readIndex + i];
}
readIndex += readLength;
}

bool AudioStreamHelper::LoadWavFileHeader(std::ifstream& file, AudioStream* audioFileData) {
char buffer[4];
if(!file.is_open()) {
Expand Down Expand Up @@ -148,59 +155,59 @@ bool AudioStreamHelper::LoadWavFileHeaderFromMemory(unsigned char* fileBuffer, s
unsigned int index = 0;

// the RIFF
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);
if(std::strncmp(buffer, "RIFF", 4) != 0) {
std::cerr << "ERROR: file is not a valid WAVE file (header doesn't begin with RIFF)" << std::endl;
return false;
}

// the size of the file
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);
audioFileData->fileSize = ConvertToInt(buffer, 4);

// the WAVE
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);
if(std::strncmp(buffer, "WAVE", 4) != 0) {
std::cerr << "ERROR: file is not a valid WAVE file (header doesn't contain WAVE)" << std::endl;
return false;
}

// "fmt/0"
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);

// this is always 16, the size of the fmt data chunk
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);

// PCM should be 1?
READ_CHAR_ARRAY2(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 2, index);

// the number of channels
READ_CHAR_ARRAY2(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 2, index);
audioFileData->channels = ConvertToInt(buffer, 2);

// sample rate
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);
audioFileData->sampleRate = ConvertToInt(buffer, 4);

// byte rate
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);

// block align
READ_CHAR_ARRAY2(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 2, index);

// bitsPerSample
READ_CHAR_ARRAY2(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 2, index);
audioFileData->bitsPerSample = ConvertToInt(buffer, 2);

// sub chunk id
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);
if(std::strncmp(buffer, "data", 4) != 0) {
std::cerr << "ERROR: file is not a valid WAVE file (doesn't have 'data' tag)" << std::endl;
return false;
}

// size of data
READ_CHAR_ARRAY4(buffer, fileBuffer, index)
ReadBuffer(buffer, fileBuffer, 4, index);
audioFileData->dataSize = ConvertToInt(buffer, 4);

return true;
Expand Down Expand Up @@ -242,11 +249,10 @@ AudioStream* AudioStreamHelper::LoadWavFromMemory(void* fileBuffer, size_t fileB
}

char* audioStreamData = static_cast<char*>(fileBuffer);
audioStream->data = std::vector<char>(audioStreamData, audioStreamData + audioStream->dataSize);
logger->Debug("Loaded trimming data...");
audioStream->data = std::vector<char>(audioStreamData, audioStreamData + fileBufferSize);
audioStream->data.erase(
audioStream->data.begin(),
audioStream->data.begin() + (audioStream->data.size() - audioStream->dataSize)
audioStream->data.begin() + (fileBufferSize - audioStream->dataSize)
);
audioStream->data.resize(audioStream->dataSize);
audioStream->Initialize();
Expand Down
13 changes: 1 addition & 12 deletions src/core/audio/audio_stream_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,10 @@

#include "audio_stream.h"

#define READ_CHAR_ARRAY2(Buffer, InArray, Index) \
Buffer[0] = InArray[Index]; \
Buffer[1] = InArray[Index+1]; \
Index += 2; \

#define READ_CHAR_ARRAY4(Buffer, InArray, Index) \
Buffer[0] = InArray[Index]; \
Buffer[1] = InArray[Index+1]; \
Buffer[2] = InArray[Index+2]; \
Buffer[3] = InArray[Index+3]; \
Index += 4; \

class AudioStreamHelper {
private:
static std::int32_t ConvertToInt(char* buffer, std::size_t len);
static void ReadBuffer(char* outBuffer, unsigned char* inBuffer, unsigned int readLength, unsigned int& readIndex);
static bool LoadWavFileHeader(std::ifstream& file, AudioStream* audioFileData);
static bool LoadWavFileHeaderFromMemory(unsigned char* fileBuffer, size_t fileBufferSize, AudioStream* audioFileData);

Expand Down

0 comments on commit 52d83cd

Please sign in to comment.