Jump to content
  • Advertisement

Ricardo Coutinho

Member
  • Content Count

    2
  • Joined

  • Last visited

Community Reputation

111 Neutral

About Ricardo Coutinho

  • Rank
    Newbie
  1. Ricardo Coutinho

    Loading .Wav file with OpenAL - Incorrect AudioFormat

    Thank you for your ideas and help ! 
  2. Hi everyone,   I'm new to game development and have a little c/c++ experience.   The other day i was following this tutorial of XCode GLUT C++ on Youtube: The above video is about loading a .WAV file using OpenAL in c++.   The youtuber was coding with reference to Microsoft's WAVE PCM soundfile format here:  https://ccrma.stanford.edu/courses/422/projects/WaveFormat/   I have been following his code and explanations but i encountered a problem that i think he didn't. My sound file is not the same, i got a free mario_01.wav from:  http://www.talkingwav.com/nintendo_wav_sounds.html   According to the soundfile format the AudioFormat should be 1 (Linear Quantization), but i keep getting the value of 85 which indicates it is compressed.    How do i solve this problem? Should i decompress the file? If yes, how? Should i get another sound file? how to get the correct AudioFormat ? Any other way? Any corrections to the code below?   The following code is the method to load the wave file, the variable AudioFormat is concerned with the issue the issue: Sound* Sound::loadWAVE(const char* filename) { FILE* fp = NULL; fp = fopen(filename, "r"); if (!fp) { cout << "Could NOT open: " << filename << "!" << endl; fclose(fp); return NULL; } char* ChunkID = new char[4]; fread(ChunkID, 4, sizeof(char), fp); if (strcmp(ChunkID, "RIFF")) { delete [] ChunkID; cout << "Not RIFF!" << endl; fclose(fp); return NULL; } fseek(fp, 8, SEEK_SET); char* Format = new char[4]; fread(Format, 4, sizeof(char), fp); if (strcmp(Format, "WAVE")) { delete [] ChunkID; delete [] Format; cout << "Not WAVE!" << endl; fclose(fp); return NULL; } char* SubChunk1ID = new char[4]; fread(SubChunk1ID, 4, sizeof(char), fp); if (strcmp(SubChunk1ID, "fmt ")) { delete [] ChunkID; delete [] Format; delete [] SubChunk1ID; cout << "Corrupt SubChunk1ID!" << endl; fclose(fp); return NULL; } unsigned int SubChunk1Size; fread(&SubChunk1Size, 1, sizeof(unsigned int), fp); unsigned int SubChunk2Location = (unsigned int)ftell(fp) + SubChunk1Size; // -------------------------------------- THIS PART unsigned short AudioFormat; fread(&AudioFormat, 1, sizeof(unsigned short), fp); if (AudioFormat != 1) { // AudioFormat = 85, should be 1 delete [] ChunkID; delete [] Format; delete [] SubChunk1ID; cout << "Audio is NOT PCM!" << endl; fclose(fp); return NULL; } // -------------------------------------- unsigned short NumChannels; fread(&NumChannels, 1, sizeof(unsigned short), fp); unsigned int SampleRate; fread(&SampleRate, 1, sizeof(unsigned int), fp); fseek(fp, 34, SEEK_SET); unsigned short BitsPerSample; fread(&BitsPerSample, 1, sizeof(unsigned short), fp); int ALFormat; if (NumChannels == 1 && BitsPerSample == 8) { ALFormat = AL_FORMAT_MONO8; } else if (NumChannels == 1 && BitsPerSample == 16) { ALFormat = AL_FORMAT_MONO16; } else if (NumChannels == 2 && BitsPerSample == 8) { ALFormat = AL_FORMAT_STEREO8; } else if (NumChannels == 2 && BitsPerSample == 16) { ALFormat = AL_FORMAT_STEREO16; } else { delete [] ChunkID; delete [] Format; delete [] SubChunk1ID; cout << "Audio is Not correctly formatted!" << endl; fclose(fp); return NULL; } fseek(fp, SubChunk2Location, SEEK_SET); char* SubChunk2ID = new char[4]; fread(SubChunk2ID, 4, sizeof(char), fp); if (strcmp(SubChunk2ID, "data")) { delete [] ChunkID; delete [] Format; delete [] SubChunk1ID; delete [] SubChunk2ID; cout << "Corrupt SubChunk2ID!" << endl; fclose(fp); return NULL; } unsigned int SubChunk2Size; fread(&SubChunk2Size, 1, sizeof(unsigned int), fp); unsigned char* Data = new unsigned char[SubChunk2Size]; fread(Data, SubChunk2Size, sizeof(unsigned char), fp); delete [] ChunkID; delete [] Format; delete [] SubChunk1ID; delete [] SubChunk2ID; fclose(fp); return new Sound(ALFormat, SampleRate, Data, SubChunk2Size); } Thank you in advance for your patience and help!
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!