Program Listing for File audioTest.cpp

Return to documentation for file (include\tests\audioTest.cpp)

#include "CapnpBinary.hpp"
#include "MixMachine.hpp"
#include "MixTranslator.hpp"
#include "audioPlayer.hpp"
#include "miniaudio.h"

#include "dbRoot.hpp"
#include <algorithm>
#include <iostream>

void
fill(capnp::List<MBData, capnp::Kind::STRUCT>::Builder &ret,
     int                                                idx,
     TypeEnum                                           Ty,
     DetailEnum                                         De,
     int                                                beat,
     int                                                ebeat,
     std::string                                        first,
     std::string                                        second = "",
     std::string                                        third  = "")
{
    ret[idx].setbeat(beat);
    ret[idx].setBeat(0);
    ret[idx].setSeparate(4);
    ret[idx].setEbeat(ebeat);
    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;
}