Created
July 8, 2024 22:29
-
-
Save Kyborg2011/1ffabfbfcee6383a55c1812f3ab70605 to your computer and use it in GitHub Desktop.
MilkDropVisualizer.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# MilkDropVisualizer.h: | |
#ifndef CADENZA_MUSIC_PLAYER_MILKDROPVISUALIZER_H | |
#define CADENZA_MUSIC_PLAYER_MILKDROPVISUALIZER_H | |
#include <vector> | |
#include <span> | |
#include "interfaces/IPostProcessor.h" | |
#include "utils/log.h" | |
#include "utils/constants.h" | |
#include "projectM-4/projectM.h" | |
namespace cadenza { | |
class MilkDropVisualizer : public IPostProcessor { | |
public: | |
explicit MilkDropVisualizer(PlaybackParams params) : IPostProcessor{params} { | |
projectm_handle_ = projectm_create(); | |
if (projectm_handle_ == NULL) { | |
LOGD("projectM init failed!"); | |
} else { | |
LOGD("projectM init success!"); | |
} | |
} | |
std::optional<std::vector<float>> operator()(std::vector<float> samples) override; | |
std::unique_ptr<IPostProcessor> Clone() override; | |
void RenderFrame(); | |
void SetWindowSize(size_t width, size_t height); | |
void LoadPresetData(const char *preset_data); | |
~MilkDropVisualizer() override; | |
private: | |
projectm_handle projectm_handle_; | |
}; | |
} // cadenza | |
#endif //CADENZA_MUSIC_PLAYER_MILKDROPVISUALIZER_H | |
# MilkDropVisualizer.cpp: | |
#include "MilkDropVisualizer.h" | |
namespace cadenza { | |
std::optional<std::vector<float>> MilkDropVisualizer::operator()(std::vector<float> samples) { | |
auto *samples_tmp = new int16_t[samples.size()]; | |
for (int i = 0; i < samples.size(); i++) { | |
samples_tmp[i] = static_cast<int16_t>(samples[i]); | |
} | |
projectm_pcm_add_int16(projectm_handle_, | |
samples_tmp, | |
samples.size() / 2, | |
projectm_channels::PROJECTM_STEREO); | |
LOGD("projectM: samples added!"); | |
return std::nullopt; | |
} | |
std::unique_ptr<IPostProcessor> MilkDropVisualizer::Clone() { | |
return std::make_unique<MilkDropVisualizer>(std::move(*this)); | |
} | |
void MilkDropVisualizer::SetWindowSize(size_t width, size_t height) { | |
projectm_set_window_size(projectm_handle_, width, height); | |
} | |
void MilkDropVisualizer::RenderFrame() { | |
projectm_opengl_render_frame(projectm_handle_); | |
} | |
void MilkDropVisualizer::LoadPresetData(const char *preset_data) { | |
projectm_load_preset_data(projectm_handle_, preset_data, false); | |
} | |
MilkDropVisualizer::~MilkDropVisualizer() { | |
projectm_destroy(projectm_handle_); | |
projectm_handle_ = nullptr; | |
} | |
} // cadenza |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment