namespace myengine { void load_ogg(const std::string& _path, std::vector<unsigned char>& _buffer, ALenum& _format, ALsizei& _freq) { int channels = 0; int sampleRate = 0; short* output = NULL; size_t samples = stb_vorbis_decode_filename(_path.c_str(), &channels, &sampleRate, &output); std::cout << samples << std::endl; if (samples == -1) { throw std::runtime_error("Failed to open file '" + _path + "' for decoding"); } // Record the format required by OpenAL if (channels < 2) { _format = AL_FORMAT_MONO16; } else { _format = AL_FORMAT_STEREO16; } // Copy (# samples) * (1 or 2 channels) * (16 bits == 2 bytes == short) _buffer.resize(samples * channels * sizeof(short)); memcpy(&_buffer.at(0), output, _buffer.size()); // Record the sample rate required by OpenAL _freq = sampleRate; // Clean up the read data free(output); }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter