Program Listing for File audioTest.cpp
↰ Return to documentation for file (include/tests/audioTest.cpp
)
#include "CapnpBinary.hpp"
#include "MixTranslator.hpp"
#include "MixMachine.hpp"
#include "miniaudio.h"
#include "audioPlayer.hpp"
#include <iostream>
#include "dbRoot.hpp"
#include <algorithm>
void
fill(
capnp::List<MBData, capnp::Kind::STRUCT>::Builder& ret,
int idx,
TypeEnum Ty,
DetailEnum De,
int bar,
int ebar,
std::string first,
std::string second="",
std::string third=""
)
{
ret[idx].setBar(bar);
ret[idx].setBeat(0);
ret[idx].setSeparate(4);
ret[idx].setEbar(ebar);
ret[idx].setEbeat(0);
ret[idx].setEseparate(4);
ret[idx].setType(Ty);
ret[idx].setDetails(De);
ret[idx].setFirst(first);
ret[idx].setSecond(second);
ret[idx].setThird(third);
ret[idx].setId(0);
}
void fillDatas(capnp::List<MBData, capnp::Kind::STRUCT>::Builder& ret)
{
fill(
ret,
0,
TypeEnum::BPM_CONTROL,
DetailEnum::TIME_STRETCH,
0,
0,
"175.0"
);
fill(ret, 1, TypeEnum::LOAD, DetailEnum::CUE, 1, 2,
"WTC", "TEST", "175.0");
fill(ret, 2, TypeEnum::VOL, DetailEnum::TRIM, 5, 37,
"3", "0.5", "30");
// "1", "0,1.0,0,1.0,0.5,1.0,0.5,1.0", "20");
fill(ret, 3, TypeEnum::FILTER, DetailEnum::HIGH, 5, 37,
"1", "5000, 10000, 0, 1000, 5000, 7000, 10000", "");
fill(ret, 4, TypeEnum::BPM_CONTROL, DetailEnum::TIME_STRETCH, 34, 84,
"88.0");
fill(ret, 5, TypeEnum::CONTROL, DetailEnum::PAUSE, 81, 82, "");
fill(ret, 6, TypeEnum::UNLOAD, DetailEnum::CUE, 90, 90, "");
}
auto idx = 0;
void
idle_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount) {
// auto dvec = reinterpret_cast<std::vector<float>*>(pDevice->pUserData);
auto dP =(float*)(pDevice->pUserData);// dvec->data();
dP+=idx;
// if (idx + frameCount < (*dvec).size()) {
memcpy(pOutput, dP, sizeof(float) * frameCount * 2);
idx += frameCount * 2;
// }
}
// #include <termios.h>
// #include "MiniAudioWrapper.hpp"
int
main()
{
auto mb = CapWriter<MixBinaryCapnpData>();
mb.makeNew();
// auto B = reinterpret_cast<MixBinaryCapnpData::Builder*>(mb.D);
auto ret = mb.Wp->initDatas(7);
fillDatas(ret);
auto flat_returned = mb.out();
auto rb = CapReader<MixBinaryCapnpData>();
rb.open(flat_returned);
// auto reader = reinterpret_cast<MixBinaryCapnpData::Reader*>(rb.D);
auto readGet = rb.Rp->getDatas();
std::cout<<readGet[0].getId() << std::endl;
std::cout<<readGet[1].getId() << std::endl;
std::cout<<ret[0].getFirst().cStr() << std::endl;
litedb dbb;
if(dbb.openDB("./tempdb.db")){
std::cout << "opened" <<std::endl;
}
else{
std::cout << "not opened " << std::endl;
}
trackdata td;
td.trackTitle = "testmix111";
auto restd = dbb<<td;
std::cout << restd->front().mixBinary.size() << std::endl;
std::cout << rb.out().size() << std::endl;
if(restd.value().front().mixBinary.size() == rb.out().size()){
std::cout <<"Completele same" << std::endl;
}
auto AP = new audioPlayer(dbb, restd.value().front(), 48, true);
auto pannel = AP->GetFXControlPannel();
AP->Activate();
getchar();
pannel->FX_ON_OFF(FXList::FILTER, true);
auto filter_handle = pannel->GetArgSetter(FXList::FILTER);
for(auto i : filter_handle){
std::cout << i.first << std::endl;
}
char input ='a';
int freq = 5000;
int udVal = 100;
filter_handle["Filterfreq"](5000);
filter_handle["HLswitch"](1);
while (input != 'q')
{
std::cin >> input;
if(input == 'u'){
freq +=udVal;
filter_handle["Filterfreq"](freq);
}
if(input == 'd'){
freq -=udVal;
filter_handle["Filterfreq"](freq);
}
if(input == 'h'){
filter_handle["HLswitch"](0);
}
if (input == 'l')
{
filter_handle["HLswitch"](1);
}
}
delete AP;
// if(dbb<<td){
// std::cout << "DONE!" << std::endl;
// }
// else{
// std::cout << SQLITE_LAST_ERRNO << std::endl;
// }
return 0 ;
struct vectest{
unsigned int one;
unsigned int two;
};
MixTranslator mt = MixTranslator();
if(!(mt.Read(rb))){
return 1;
}
for(auto i : mt.mixs->mixVec){
std::cout << "Frame In: " << i.frame_in << "Frame Out: " << i.frame_out << std::endl;
}
auto mm = new MixMachine();
auto db = litedb();
db.openDB("./tempdb.db");
mm->IDsort(mt);
if(!mt.bpms.has_value()){
return -1;
}
auto res = mm->mix(db, mt.bpms.value());
ma_device dev;
auto Dres = Decoder();
Dres.init("./WTC.wav", "./");
// auto arrD = Dres.getRange(48000*10);
if(res){
ma_device_config deconf = ma_device_config_init(ma_device_type_playback);
deconf.playback.format = ma_format_f32;
deconf.playback.channels = 2;
deconf.sampleRate = 48000;
deconf.periodSizeInFrames = 480;
deconf.dataCallback = idle_callback;
deconf.performanceProfile = ma_performance_profile_low_latency;
deconf.pUserData = (mm->rendered_out.data());
ma_device_init(NULL, &deconf, &dev);
ma_device_start(&dev);
}
getchar();
return 0;
}