Skip to content

Instantly share code, notes, and snippets.

@Kyborg2011
Created July 8, 2024 22:29
Show Gist options
  • Save Kyborg2011/1ffabfbfcee6383a55c1812f3ab70605 to your computer and use it in GitHub Desktop.
Save Kyborg2011/1ffabfbfcee6383a55c1812f3ab70605 to your computer and use it in GitHub Desktop.
MilkDropVisualizer.cpp
# 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