diff --git a/include/ReMixer/sound.h b/include/ReMixer/sound.h index b07968c..f88957c 100644 --- a/include/ReMixer/sound.h +++ b/include/ReMixer/sound.h @@ -15,6 +15,12 @@ private: SampleRate sample_rate; StreamMode num_channels; public: + + static Sound FromOGGVorbisFile(const std::filesystem::path& file_name) + { + + } + std::vector getAudioData(); void setAudioData(const std::vector& audioData); void setNumberOfChannels(StreamMode mode); @@ -25,22 +31,3 @@ public: [[nodiscard]] const char* ptr() const { return audio_data.data();} Sound() = default; }; - - - -/// Short (sub-10-second) audio clips via OGG vorbis format. -class SFX : public Sound { -public: - SFX() = default; - SFX(const std::string& sfx_file_path); -}; - -/// Longer (>10 second) audio via WAV format. -class Song : public Sound { -public: - Song() = default; - Song(const std::filesystem::path& song_file_path) - { - - } -}; \ No newline at end of file diff --git a/pacat_advanced.cpp b/pacat_advanced.cpp index ae4c65e..686a46c 100644 --- a/pacat_advanced.cpp +++ b/pacat_advanced.cpp @@ -526,29 +526,9 @@ static void list_server_info(pa_context* c, pa_server_info* i, void* userdata) pa_threaded_mainloop_signal(p->mainloop, 0); } - -int mix_sample_s16_pcm(int16_t a, int16_t b) +char mix_sample_s16_pcm(char a, char b) { - return (a + b) / 2.f; - //int m; - - //a += 32768; - //b += 32768; - - //if ((a < 32768) || (b < 32768)) { - // Viktor's first equation when both sources are quiet. - // (i.e. less than middle of the dynamic range) - // m = a * b / 32768; - //} else { - // Viktor's second equation when one or both sources are loud. - // m = 2 * (a + b) - (a * b) / 32768 - 65535; - //} - // Output is unsigned (0..65536) so convert back to signed (-3 - //if (m == 65536) m = 65535; - //m -= 32768; - - //return m; } // this dick diff --git a/vorbis_decode.cpp b/vorbis_decode.cpp index 597491e..49a9121 100644 --- a/vorbis_decode.cpp +++ b/vorbis_decode.cpp @@ -15,8 +15,20 @@ void decodeVorbis(const char* inputFile, const char* outputFile) fclose(inFile); return; } + + std::cout << vf.pcmlengths << " pcmlengths" << std::endl; + std::cout << vf.pcm_offset << " pcm_offset" << std::endl; + vorbis_info* vi = ov_info(&vf, -1); + + std::cout << vi->channels << " channels" << std::endl; + std::cout << vi->version << " version" << std::endl; + std::cout << vi->rate << " rate" << std::endl; + std::cout << vi->bitrate_lower << " bitrate_lower" << std::endl; + std::cout << vi->bitrate_nominal << " bitrate_nominal" << std::endl; + std::cout << vi->bitrate_upper << " bitrate_upper" << std::endl; + std::ofstream outFile(outputFile, std::ios::binary); if (!outFile.is_open()) { std::cerr << "Error opening output file." << std::endl; @@ -29,6 +41,8 @@ void decodeVorbis(const char* inputFile, const char* outputFile) int current_section; long bytes; + // Data is read as 2-byte signed words, but we store into a char buffer? + while ((bytes = ov_read(&vf, pcmout, sizeof(pcmout), 0, 2, 1, ¤t_section)) > 0) { outFile.write(pcmout, bytes); } diff --git a/wind.ogg b/wind.ogg new file mode 100644 index 0000000..df901a3 Binary files /dev/null and b/wind.ogg differ