void cNewO_NameManager::LoadHomFloats(cNewO_OneIm * anI1,cNewO_OneIm * anI2,std::vector<Pt2df> * aVP1,std::vector<Pt2df> * aVP2) { if (anI1->Name() > anI2->Name()) { ElSwap(anI1,anI2); ElSwap(aVP1,aVP2); } std::string aNameH = NameHomFloat(anI1,anI2); ELISE_fp aFile(aNameH.c_str(),ELISE_fp::READ,false); // FILE * aFP = aFile.FP() ; int aRev = aFile.read_INT4(); if (aRev>NumHgRev()) { } int aNb = aFile.read_INT4(); aVP1->reserve(aNb); aVP2->reserve(aNb); aVP1->resize(aNb); aVP2->resize(aNb); aFile.read(VData(*aVP1),sizeof((*aVP1)[0]),aNb); aFile.read(VData(*aVP2),sizeof((*aVP2)[0]),aNb); aFile.close(); }
bool cNewO_NameManager::LoadTriplet(cNewO_OneIm * anI1 ,cNewO_OneIm * anI2,cNewO_OneIm * anI3,std::vector<Pt2df> * aVP1,std::vector<Pt2df> * aVP2,std::vector<Pt2df> * aVP3) { int aRnk[3] ; Rank3(aRnk,anI1->Name(),anI2->Name(),anI3->Name()); tPtrNIm aVIm[3]; aVIm[aRnk[0]] = anI1; aVIm[aRnk[1]] = anI2; aVIm[aRnk[2]] = anI3; std::string aName3 = NameHomTriplet(aVIm[0],aVIm[1],aVIm[2]); if (! ELISE_fp::exist_file(aName3)) return false; tPtrVPt2df aVPt[3]; aVPt[aRnk[0]] = aVP1; aVPt[aRnk[1]] = aVP2; aVPt[aRnk[2]] = aVP3; ELISE_fp aFile(aName3.c_str(),ELISE_fp::READ,false); int aRev = aFile.read_INT4(); if (aRev>NumHgRev()) { } int aNb = aFile.read_INT4(); for (int aK=0 ; aK<3 ; aK++) { aVPt[aK]->reserve(aNb); aVPt[aK]->resize(aNb); aFile.read(VData(*(aVPt[aK])),sizeof(Pt2df),aNb); } aFile.close(); return true; }
void Bench_Rank() { std::cout << "Begin Bench Rank \n"; for (int aTime=0 ; aTime<10000; aTime++) { int aNb = round_ni(1 + ElSquare(10*NRrandom3())); std::vector<double> aV; for (int aK=0 ; aK<aNb ; aK++) aV.push_back(NRrandC()); for (int aK=0 ; aK < aNb ; aK++) { for (int aK2=0 ; aK2 < 3 ; aK2++) if (NRrandom3()<0.2) aV.push_back(aV[aK]); for (int aK2=0 ; aK2 < int(aV.size()) ; aK2++) if (NRrandom3()<0.02) aV[aK2] = aV[aK]; } aNb = aV.size(); std::vector<double> aV2 = aV; std::vector<double> aV3 = aV; int aRnk = NRrandom3(aNb); double aVK =KthVal(VData(aV),aNb,aRnk); std::sort(aV2.begin(),aV2.end()); double aVK2 = aV2[aRnk]; // std::cout << "Bench Rank " << aVK-aVK2 << "\n"; ELISE_ASSERT(ElAbs(aVK-aVK2)<1e-10,"Bench rnk"); /* Ne marche pas : la valeur RrnK est n'importe ou SplitArrounKthValue(VData(aV3),aNb,aRnk); double aVK3 = aV3[aRnk]; std::cout << "Bench Rank " << aVK-aVK2 << " " << aVK-aVK3<< "\n"; ELISE_ASSERT(ElAbs(aVK-aVK2)<1e-10,"Bench rnk"); ELISE_ASSERT(ElAbs(aVK-aVK3)<1e-10,"Bench rnk"); */ } std::cout << "OK BENCH RANK \n"; }
void FillStat(cXml_StatVino & aStat,Flux_Pts aFlux,Fonc_Num aFonc) { aFonc = Rconv(aFonc); int aNbCh = aFonc.dimf_out(); aStat.Soms().resize(aNbCh,0.0); aStat.Soms2().resize(aNbCh,0.0); aStat.ECT().resize(aNbCh,0.0); aStat.VMax().resize(aNbCh,0.0); aStat.VMin().resize(aNbCh,0.0); Symb_FNum aSF(aFonc); ELISE_COPY ( aFlux, Virgule(1.0,aSF,Square(aSF)), Virgule ( sigma(aStat.Nb()), sigma(VData(aStat.Soms()),aNbCh) | VMin(VData(aStat.VMin()),aNbCh) | VMax(VData(aStat.VMax()),aNbCh), sigma(VData(aStat.Soms2()),aNbCh) ) ); double aNb = aStat.Nb(); aStat.IntervDyn() = Pt2dr(0,0); for (int aK=0 ; aK<aNbCh ; aK++) { aStat.Soms()[aK] /= aNb; aStat.Soms2()[aK] /= aNb; aStat.ECT()[aK] = sqrt(ElMax(0.0,aStat.Soms2()[aK]-ElSquare(aStat.Soms()[aK]))); aStat.IntervDyn().x += aStat.VMin()[aK]; aStat.IntervDyn().y += aStat.VMax()[aK]; } aStat.IntervDyn() = aStat.IntervDyn() / aNbCh; }
std::vector<int> cAMD_Interf::DoRank(bool show) { Im2D_Bits<1> aM(1,1); if (show) aM = Im2D_Bits<1>(mNb,mNb,0); std::vector<int> Ap,Ai,P; Ap.push_back(0); for (int aK=0 ; aK<mNb ; aK++) { std::vector<int> & aVK = mV[aK]; std::sort(aVK.begin(),aVK.end()); aVK.erase(std::unique(aVK.begin(),aVK.end()),aVK.end()); for (int aI=0;aI<int(aVK.size()) ; aI++) { Ai.push_back(aVK[aI]); if (show) { aM.set(aK,aVK[aI],1); } // std::cout << " " << aVK[aI] ; } Ap.push_back(Ap.back()+aVK.size()); P.push_back(0); // std::cout << "\n"; } double Control [AMD_CONTROL] , Info [AMD_INFO] ; amd_defaults (Control) ; // amd_control (Control) ; int result; result = amd_order(mNb,VData(Ap),VData(Ai), VData(P),Control,Info); ELISE_ASSERT(result==0,"amd_order"); //std::cout << "RES = " << result << "\n"; std::vector<int> aRes(mNb,-1); for (int aK=0 ; aK<mNb ; aK++) { aRes[P[aK]] = aK; } if (show) { for (int aK=0 ; aK<mNb ; aK++) { } std::cout << "\n"; } // result = amd_order (n, Ap, Ai, P, Control, Info) ; if (show) { Im2D_Bits<1> aM2(mNb,mNb); for (int aX=0 ; aX<mNb ; aX++) { for (int aY=0 ; aY<mNb ; aY++) { aM2.set(aRes[aX],aRes[aY],aM.get(aX,aY)); // aM2.set(aX,aY,aM.get(P[aX],P[aY])); } } ShowMat(aM); std::cout << "\n"; ShowMat(aM2); } return aRes; }
/* Poll MIDI event. * Returns 1 on succes, SFM_event contains event and dt contains interval in ms. * Returns SMF_STOPPED on playback end. */ int SMF_PollEvent(struct SMF_event *e, uint32_t *dt) { int result = SMF_NO_EVENTS; //int i; int a = 0; /* Todo implement for multiple tracks */ uint32_t length; uint8_t type; uint8_t status = track[a].status; if (track->head >= track->length) { return SMF_STOPPED; } if (!(Peek(&track[a]) & 0x80)) { /* Running byte! Do not change the state. */ } else { status = Data(&track[a]); track[a].status = status; } if (status == 0xF0 || status == 0xF7) { /* System exclusive event */ while (Data(&track[a]) != 0xF7) { ; } } else if (status == 0xFF) { /* Meta event */ type = Data(&track[a]); length = VData(&track[a]); if (type == 0x51 && length == 3) { usPerBeat = (Data(&track[a]) << 16) | (Data(&track[a]) << 8) | (Data(&track[a]) << 0); tick = usPerBeat / ticksPerBeat; } else { /* Unknown message */ SkipData(&track[a], length); } } else { e->channel = (status & 0x0F) + 1; e->status = (status & 0x70) >> 4; /* MIDI event */ switch (status & 0xF0) { case 0x80: case 0x90: case 0xA0: case 0xB0: case 0xE0: /* 2 parameters */ e->p1 = Data(&track[a]); e->p2 = Data(&track[a]); result = SMF_EVENT_READY; break; case 0xC0: case 0xD0: /* 1 parameter */ e->p1 = Data(&track[a]); result = SMF_EVENT_READY; break; case 0xF0: default: /* Todo: handle these unhandled events */ break; } } /* Calculate delta time in us */ track[a].dt = (VData(&track[a]) * tick) / 1000; /* Todo determine smallest dt */ /* Whose first up? (Smallest delta time.) */ /*uint32_t min = track[0]; for (i = 0; i < trackCount; i++) { if (track[i] < min) { min = track[i]; } }*/ /* Calculate delta time in ms */ //*dt = min / 1000; *dt = track[a].dt; return result; }
/** Verify the track * Returns negative error code on failure, 1 when last event in track was not Meta "End of Track", 0 on success. */ static int VerifyTrack(struct SMF_track* t) { uint8_t status, type; if (!_strcmpl("MTrk", t->str, 4)) { return -1; } while (t->head < t->length) { uint32_t length; /* Skip over delta time field */ VData(t); if (!(Peek(t) & 0x80)) { /* Running byte! Do not change the state. */ } else { status = Data(t); } if (status == 0xF0 || status == 0xF7) { /* System exclusive event */ while (Data(t) != 0xF7) { ; } } else if (status == 0xFF) { /* Meta event */ type = Data(t); length = VData(t); SkipData(t, length); } else { /* MIDI event */ switch (status & 0xF0) { case 0x80: case 0x90: case 0xA0: case 0xB0: case 0xE0: /* 2 parameters */ SkipData(t, 2); break; case 0xC0: case 0xD0: /* 1 parameter */ SkipData(t, 1); break; case 0xF0: default: /* Unhandled event */ return -1; break; } } } if (!(status == 0xFF && type == 0x2F)) { /* Last message was not META 0x2F (End of track) */ return 1; } return 0; }
/** Load standard midi file * Returns negative error code on failure, 0 on success. * Remember to call SMF_Free() before loading a new song. */ int SMF_Load(char* filename) { struct SMF_header header; FILE *in = NULL; int i; in = fopen(filename, "r"); if (in == NULL) { return SMF_ERROR_FILE; } /** Todo: handle errors */ fread((void *)&header.str, sizeof(header.str), 1, in); fread((void *)&header.length, sizeof(header.length), 1, in); fread((void *)&header.format, sizeof(header.format), 1, in); fread((void *)&header.n, sizeof(header.n), 1, in); fread((void *)&header.division, sizeof(header.division), 1, in); if (!_strcmpl("MThd", header.str, 4)) { return SMF_ERROR_INVALID; } ReverseInt32(&header.length); ReverseInt16(&header.format); ReverseInt16(&header.n); ReverseInt16(&header.division); if (header.n > SMF_MAX_TRACKS) { return SMF_ERROR_COMPLEX; } trackCount = header.n; ticksPerBeat = header.division; /* Load and verify all tracks */ for (i = 0; i < header.n; i++) { /* Todo: handle errors */ fread((void *)&track[i].str, sizeof(track[i].str), 1, in); fread((void *)&track[i].length, sizeof(track[i].length), 1, in); ReverseInt32(&track[i].length); track[i].data = (uint8_t *)malloc(track[i].length); if (track[i].data != NULL) { fread((void *)track[i].data, track[i].length, 1, in); } if (VerifyTrack(&track[i]) < 0) { return SMF_ERROR_INVALID; } /* Rewind head to start */ track[i].head = 0; /* Todo Calculate initial delta time in ms */ VData(&track[i]); } return SMF_SUCCESS; }