brauche dringend hilfe



  • hallo!

    ich habe ein kleines problem, ich habe ein file das im hex editor folgendermaßen aussieht:

    //Spa 0 1 2 3 4 5 6 7 . . . . 13 14 15

    0x270h 02 00 01 00 10 00 21 00 . . . . 00 00 00
    0x280h 02 00 01 00 10 00 21 01 . . . . 00 00 00
    0x290h 02 00 01 00 10 00 21 01 . . . . 00 02 00
    0x2a0h 02 00 01 00 10 00 21 02 . . . . 01 04 18
    0x2b0h 02 00 01 00 10 00 21 02 . . . . 01 06 18
    0x2c0h 02 00 01 00 10 00 21 03 . . . . 02 12 62
    0x2d0h 02 00 01 00 10 00 21 AA . . . . 03 18 14

    dabei sind spalte 13 die minuten, spalte 14 die sekunden und spalte 15 di frames (1 sec = 75 frames).

    nun zu meinem problem:

    der user gibt die tracknummer ein (spalte 7). zB: tracknr: 2
    nun möchte ich die MM SS und FF von der Zeile 0x2a0h (d.h: wenn vom track 2 zeilen vorhanden sind, soll immer die erste zeile genommen werden, wenn nur eine dann nur die erste). weiters brauche ich die daten des nächsten tracks in unserem Bspl die daten vom Track3 (auch hier immer die erste Zeile) also bei uns MM2 = 02,SS2=12,FF2=62,
    wenn der user track 3 eingibt sollen die daten vom track AA geholt werden.

    Die daten MM,FF und SS sind in BCD code--> dafür habe ich eine fkt geschrieben die BCD in integer umwandelt:

    unsigned int calcBCD2(unsigned char bcd)
    {
    	return ((bcd>>4)*10)+(bcd&0x0F);
    }
    

    nun zu meinem Hauptprogramm:

    fz = fopen (szUcuFilename,"rb");
    
    		if(fz == NULL)
    	{
    		printf("Fehler beim oeffnen des UCU-Files '%s'\n",szUcuFilename);
    		exit(1);
    	}
    	else
    	{
    		while(!feof(fz))
    		{
    			fread(ucuBuffer,16,1,fz);
    
    			if(ucuBuffer[0] != 0x02)
    			{
    				continue;
    			}
    
    			//fread(ucuBuffer,16,1,fz);
    
    			if(ucuBuffer[7] != nTrackNumber)
    			{
    				continue;
    			}
    
    			//fread(ucuBuffer,16,1,fz);
    
    			track = calcBCD2(ucuBuffer[7]);
    			hexTrack = ucuBuffer[7];
    
    			if(track == nTrackNumber)
    			{
    
    					MM = calcBCD2(ucuBuffer[13]);
    					SS = calcBCD2(ucuBuffer[14]);
    					FF = calcBCD2(ucuBuffer[15]);
    					//get the value for the next row, as we must know this to get the end minutes and all
    					nextTrack = nTrackNumber+1;
    					wrongTrackNo = false;
    
    			}
    			fread(ucuBuffer,16,1,fz);
    			fread(ucuBuffer,16,1,fz);
    
    			if(ucuBuffer[7] != nextTrack)
    			{
    				continue;
    			}
    			if((nextTrack) || (hexTrack=!0xAA))
    			{
    
    					//when the track is the next track than what is asked by the user,
    					if(firstSecondLine==true)
    					{
    
    						MM2 = calcBCD2(ucuBuffer[13]);
    						SS2 = calcBCD2(ucuBuffer[14]);
    						FF2 = calcBCD2(ucuBuffer[15]);
    						//make the value false, as we want to get the value of the first line and not the second line
    						firstSecondLine=false;
    
    						FrameStart = (MM*75*60) + (SS*75) + FF;
    						FrameEnd  = (MM2*75*60) + (SS2*75)+ FF2;
    
    						startoffset = FrameStart*2448;
    						endoffset   = FrameEnd*2448;
    						break;	
    
    					}
    
    		}
    
    		}
    
    	}
    
    	fclose(fz);
    
     	MakeDestFile(szDatFilename,szPcmDirname,startoffset,endoffset);
    
    	return 0;
    

    nTackNumber wird vom Benutzer eingegeben!

    hoffe auf eine baldige lösung und danke viel mals

    😉

    mfg



  • Bitte keine Crosspostings


Anmelden zum Antworten