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;
}