/* ===================================================================*/
EXTERN_FUNC_SMF
-int ReadDeltaTime(
+int DecodeValue(
DWord *dw_delta,
Byte *pb_now ) {
p_track->pb_data = pb_buf + sizeof(SmfTrackHeader);
p_track->pb_now = pb_buf + sizeof(SmfTrackHeader);
- ReadDeltaTime( &dw_delta, p_track->pb_now );
+ DecodeValue( &dw_delta, p_track->pb_now );
p_track->dw_delta_now = dw_delta;
p_track->b_run_status = 0x00;
DWord dw_events;
DWord dw_varsize;
DWord dw_delta;
+ DWord dw_temp;
TrackInfo *p_track;
dw_events = 0;
do {
/* Read DeltaTime */
- i_result = ReadDeltaTime( &dw_delta, pb_now );
+ i_result = DecodeValue( &dw_delta, pb_now );
if( 4 < i_result ) {
printf("Error!!: [Trk %d] DeltaTime Value is Wrong!", i_track );
return 0x01;
else if( SMF_EVENT_SYSEX_META == b_value ) {
if( SMF_EVENT_SYSEX_F0 == *pb_now ) {
- dw_varsize += *(pb_now + 1) + 1;
- i_temp = *(pb_now+1) + 2;
- pb_now += i_temp;
- dw_trksize -= i_temp;
+
+ i_temp = DecodeValue( &dw_temp, (pb_now + 1) );
+ dw_varsize += (dw_temp + 1);
+ pb_now += (i_temp + dw_temp + 1);
+ dw_trksize -= (i_temp + dw_temp + 1);
}
else if( SMF_EVENT_SYSEX_F7 == *pb_now ) {
- dw_varsize += *(pb_now + 1);
- i_temp = *(pb_now + 1) + 2;
- pb_now += i_temp;
- dw_trksize -= i_temp;
+
+ i_temp = DecodeValue( &dw_temp, (pb_now + 1) );
+ dw_varsize += dw_temp;
+ pb_now += (i_temp + dw_temp + 1);
+ dw_trksize -= (i_temp + dw_temp + 1);
}
else if( SMF_EVENT_META == *pb_now ) {
- i_temp = *(pb_now + 2) + 3;
- dw_varsize += i_temp;
- pb_now += i_temp;
- dw_trksize -= i_temp;
- if( SMF_META_TRACKEND == *(pb_now - i_temp + 1) ) {
+ i_temp = DecodeValue( &dw_temp, (pb_now + 2) );
+ dw_varsize += (dw_temp + i_temp + 2);
+ pb_now += (dw_temp + i_temp + 2);
+ dw_trksize -= (dw_temp + i_temp + 2);
+
+ if( SMF_META_TRACKEND == *(pb_now - (dw_temp + i_temp + 1)) ) {
if( 0 == dw_trksize ) {
printf(" [Trk %d] Track Check is OK.\n", i_track);
} else {
/* Proc.02 - Set MidiEventInfo */
p_now_event->dw_delta = dw_delta;
- i_result = ReadDeltaTime( &dw_temp, p_now_track->pb_now );
+ i_result = DecodeValue( &dw_temp, p_now_track->pb_now );
p_now_track->pb_now += i_result;
#ifdef VERIFY_EVENT
p_now_track->b_run_status = p_now_event->b_data[0];
assert( p_now_event->b_data[0] & 0x80 );
}
+ p_now_event->dw_length = 3;
}
/* 2Byte Data */
else if( ( SMF_EVENT_PROGCHANGE == b_data ) || ( SMF_EVENT_CHNPRESSER == b_data )) {
p_now_track->b_run_status = p_now_event->b_data[0];
assert( p_now_event->b_data[0] & 0x80 );
}
+ p_now_event->dw_length = 2;
}
/* Var Data */
else if( SMF_EVENT_SYSEX_META == b_data ) {
if( SMF_EVENT_SYSEX_F0 == *(p_now_track->pb_now) ) {
+ /* Proc. 1Byte */
p_now_event->b_data[0] = *(p_now_track->pb_now + 0);
- p_now_event->b_data[1] = *(p_now_track->pb_now + 1); /* size */
- /* CAUTION!!: b_data[1] is DataSize "-1" Byte!! */
-
p_now_event->dw_dataptr = dw_now_varsize;
+
*pb_now_vardata++ = p_now_event->b_data[0]; /* 1Byte */
dw_now_varsize++;
+ p_now_track->pb_now++;
- sz_size = (size_t)(p_now_event->b_data[1]); /* +1Byte = F7 */
- memcpy( pb_now_vardata, (p_now_track->pb_now + 2), sz_size);
- pb_now_vardata += sz_size;
- dw_now_varsize += sz_size;
+ /* Proc. Length */
+ i_result = DecodeValue( &dw_temp, p_now_track->pb_now );
+ sz_size = (size_t)dw_temp;
+ p_now_track->pb_now += i_result;
+
+ /* Proc. Data */
+ memcpy( pb_now_vardata, p_now_track->pb_now, sz_size);
+ pb_now_vardata += sz_size;
+ dw_now_varsize += sz_size;
+ p_now_track->pb_now += sz_size;
+
+ p_now_event->dw_length = sz_size + 1;
- p_now_track->pb_now += (sz_size + 2);
//p_now_track->b_run_status = 0x00;
}
else if( SMF_EVENT_SYSEX_F7 == *(p_now_track->pb_now) ) {
+ /* Proc. 1Byte */
p_now_event->b_data[0] = *(p_now_track->pb_now + 0);
- p_now_event->b_data[1] = *(p_now_track->pb_now + 1); /* size */
+ p_now_track->pb_now++;
+
+ /* Proc. Length */
+ i_result = DecodeValue( &dw_temp, p_now_track->pb_now );
+ sz_size = (size_t)dw_temp;
+ p_now_track->pb_now += i_result;
+ /* Proc. Data */
p_now_event->dw_dataptr = dw_now_varsize;
- sz_size = (size_t)(p_now_event->b_data[1]);
- memcpy( pb_now_vardata, (p_now_track->pb_now + 2), sz_size);
- pb_now_vardata += sz_size;
- dw_now_varsize += sz_size;
- p_now_track->pb_now += (sz_size + 2);
+ memcpy( pb_now_vardata, p_now_track->pb_now, sz_size);
+ pb_now_vardata += sz_size;
+ dw_now_varsize += sz_size;
+ p_now_track->pb_now += sz_size;
+
+ p_now_event->dw_length = sz_size;
+
//p_now_track->b_run_status = 0x00;
}
else if( SMF_EVENT_META == *(p_now_track->pb_now) ) {
+ /* Proc. 2Byte (MetaStatus(0xff) & MetaCode */
p_now_event->b_data[0] = *(p_now_track->pb_now + 0);
p_now_event->b_data[1] = *(p_now_track->pb_now + 1);
- p_now_event->b_data[2] = *(p_now_track->pb_now + 2); /* size */
+
+ /* Proc. Length */
+ i_result = DecodeValue( &dw_temp, (p_now_track->pb_now + 2) );
+ sz_size = (size_t)(dw_temp + i_result + 2);
+
p_now_event->dw_dataptr = dw_now_varsize;
- sz_size = (size_t)(p_now_event->b_data[2]) + 3;
memcpy( pb_now_vardata, p_now_track->pb_now, sz_size);
pb_now_vardata += sz_size;
dw_now_varsize += sz_size;
p_now_track->pb_now += sz_size;
- //p_now_track->b_run_status = 0x00;
+ p_now_event->dw_length = sz_size;
if( SMF_META_TRACKEND == p_now_event->b_data[1] ) {
p_now_track->pb_now = NULL;
i_endtracks++;
}
+ //p_now_track->b_run_status = 0x00;
}
}
}
}
if( NULL != p_now_track->pb_now ) {
- i_result = ReadDeltaTime( &dw_temp, p_now_track->pb_now );
+ i_result = DecodeValue( &dw_temp, p_now_track->pb_now );
p_now_track->dw_delta_now = dw_temp;
}
#include"playumidi.h"
/* ===================================================================*/
-int EncodeDeltaTime(
+int EncodeValue(
Byte *pb_value,
DWord dw_delta ) {
assert( NULL != p_track );
/* Verify DeltaTime */
- i_len = EncodeDeltaTime( b_value, p_track->dw_delta_now );
+ i_len = EncodeValue( b_value, p_track->dw_delta_now );
if( 0 == i_len ) {
printf("Error!!: Fail Verify MidiEvent --" \
" [Trk %d] DeltaTime Length = 0\n",
i_result = memcmp( b_value, p_track->pb_now, i_len );
if( 0 != i_result ) {
- ReadDeltaTime( &dw_temp, p_track->pb_now );
+ DecodeValue( &dw_temp, p_track->pb_now );
printf("Error!!: Fail Verify MidiEvent --" \
" [Trk %d] DeltaTime: Event:%d(%x %x %x %x) <=> MidiSrc:%d \n",
i_track, i_len, b_value[0], b_value[1],
b_status = p_mevent->b_data[0];
if( SMF_EVENT_SYSEX_F0 == b_status ) {
- b_value[0] = p_mevent->b_data[0]; /* F0 */
- b_value[1] = p_mevent->b_data[1]; /* Size (F0+data+F7) */
- i_len = 2;
+ /* Check 1Byte */
+ if( p_mevent->b_data[0] != *p_track->pb_now ) {
+ printf("Error!!: Fail Verify MidiEvent --" \
+ " [Trk %d] SysEx(F0) Status: Code:%x <=> MidiSrc:%ld \n",
+ i_track, p_mevent->b_data[0], (p_track->pb_data - p_track->pb_now) );
+ return 0x05;
+ }
+ p_track->pb_now++;
+ /* Check Length */
+ i_len = EncodeValue( b_value, (p_mevent->dw_length - 1) );
i_result = memcmp( b_value, p_track->pb_now, i_len );
if( 0 != i_result ) {
printf("Error!!: Fail Verify MidiEvent --" \
- " [Trk %d] SysEx(F0) Status & Size: Code:%x %x <=> MidiSrc:%ld \n",
- i_track, b_value[0], b_value[1],
- (p_track->pb_data - p_track->pb_now) );
+ " [Trk %d] SysEx(F0) Size: Code:%d(%x %x %x %x)<=> MidiSrc:%ld \n",
+ i_track, p_mevent->dw_length, b_value[0], b_value[1], b_value[2],
+ b_value[3], (p_track->pb_data - p_track->pb_now) );
return 0x05;
}
p_track->pb_now += i_len;
return 0x06;
}
- if( b_value[0] != *pb_temp ) {
+ if( p_mevent->b_data[0] != *pb_temp ) {
printf("Error!!: Fail Verify MidiEvent --" \
" [Trk %d] SysEx(F0) Data: First Byte(%x,%x) \n",
- i_track, b_value[0], *(p_track->pb_now) );
+ i_track, p_mevent->b_data[0], *(p_track->pb_now) );
return 0x0f;
}
pb_temp++;
- i_len = (int)b_value[1];
- i_result = memcmp( pb_temp, p_track->pb_now, i_len );
+ i_result = memcmp( pb_temp, p_track->pb_now, p_mevent->dw_length - 1 );
if( 0 != i_result ) {
printf("Error!!: Fail Verify MidiEvent --" \
" [Trk %d] SysEx(F0) Data: len=%d \n", i_track, i_len );
return 0x07;
}
- p_track->pb_now += i_len;
- pb_vardata += (i_len + 1);
-
+ p_track->pb_now += (p_mevent->dw_length - 1);
+ pb_vardata += p_mevent->dw_length;
} else if( SMF_EVENT_SYSEX_F7 == b_status ) {
- b_value[0] = p_mevent->b_data[0]; /* F0 */
- b_value[1] = p_mevent->b_data[1]; /* Size (data) */
- i_len = 2;
+ /* Check 1Byte */
+ if( p_mevent->b_data[0] != *p_track->pb_now ) {
+ printf("Error!!: Fail Verify MidiEvent --" \
+ " [Trk %d] SysEx(F7) Status: Code:%x <=> MidiSrc:%ld \n",
+ i_track, p_mevent->b_data[0], (p_track->pb_data - p_track->pb_now) );
+ return 0x08;
+ }
+ p_track->pb_now++;
+ /* Check Length */
+ i_len = EncodeValue( b_value, p_mevent->dw_length );
i_result = memcmp( b_value, p_track->pb_now, i_len );
if( 0 != i_result ) {
printf("Error!!: Fail Verify MidiEvent --" \
- " [Trk %d] SysEx(F7) Status & Size: Code:%x %x <=> MidiSrc:%ld \n",
- i_track, b_value[0], b_value[1],
- (p_track->pb_data - p_track->pb_now) );
+ " [Trk %d] SysEx(F7) Size: Code:%d(%x %x %x %x)<=> MidiSrc:%ld \n",
+ i_track, p_mevent->dw_length, b_value[0], b_value[1], b_value[2],
+ b_value[3], (p_track->pb_data - p_track->pb_now) );
return 0x08;
}
p_track->pb_now += i_len;
if( pb_temp != pb_vardata ) {
printf("Error!!: Fail Verify MidiEvent --" \
" [Trk %d] SysEx(F7) VarData Ptr. Error \n", i_track );
- return 0x09;
+ return 0x08;
}
- i_len = (int)b_value[1];
- i_result = memcmp( pb_temp, p_track->pb_now, i_len );
+ i_result = memcmp( pb_temp, p_track->pb_now, p_mevent->dw_length );
if( 0 != i_result ) {
printf("Error!!: Fail Verify MidiEvent --" \
" [Trk %d] SysEx(F7) Data: len=%d \n", i_track, i_len );
- return 0x0a;
+ return 0x09;
}
- p_track->pb_now += i_len;
- pb_vardata += i_len;
-
+ p_track->pb_now += p_mevent->dw_length;
+ pb_vardata += p_mevent->dw_length;
} else if( SMF_EVENT_META == b_status ) {
- b_value[0] = p_mevent->b_data[0]; /* F0 */
- b_value[1] = p_mevent->b_data[1]; /* Meta Code */
- b_value[2] = p_mevent->b_data[2]; /* Size */
- i_len = 3;
-
- i_result = memcmp( b_value, p_track->pb_now, i_len );
+ /* Check 1Byte */
+ if( p_mevent->b_data[0] != *(p_track->pb_now + 0) ) {
+ printf("Error!!: Fail Verify MidiEvent --" \
+ " [Trk %d] Meta Status: Code:%x <=> MidiSrc:%x \n",
+ i_track, p_mevent->b_data[0], *p_track->pb_now );
+ return 0x08;
+ }
+
+ /* Check 2Byte */
+ if( p_mevent->b_data[1] != *(p_track->pb_now + 1) ) {
+ printf("Error!!: Fail Verify MidiEvent --" \
+ " [Trk %d] Meta Code: Code:%x <=> MidiSrc:%ld \n",
+ i_track, p_mevent->b_data[1], (p_track->pb_data - p_track->pb_now) );
+ return 0x08;
+ }
+
+ /* Check Length */
+ i_len = DecodeValue( &dw_temp, (p_track->pb_now + 2) );
+
+ i_len = EncodeValue( b_value, (p_mevent->dw_length - i_len - 2) );
+ i_result = memcmp( b_value, (p_track->pb_now + 2), i_len );
if( 0 != i_result ) {
printf("Error!!: Fail Verify MidiEvent --" \
- " [Trk %d] MetaCode Header: Code:%x %x %x <=> MidiSrc:%ld \n",
- i_track, b_value[0], b_value[1], b_value[2],
- (p_track->pb_data - p_track->pb_now) );
- return 0x0b;
+ " [Trk %d] Meta Size: Code:%d(%x %x %x %x)<=> MidiSrc:%ld \n",
+ i_track, p_mevent->dw_length, b_value[0], b_value[1], b_value[2],
+ b_value[3], (p_track->pb_data - p_track->pb_now) );
+ return 0x08;
}
pb_temp = (pb_vartop + p_mevent->dw_dataptr);
if( pb_temp != pb_vardata ) {
printf("Error!!: Fail Verify MidiEvent --" \
- " [Trk %d] MetaCode VarData Ptr. Error \n", i_track );
- return 0x0c;
+ " [Trk %d] Meta VarData Ptr. Error \n", i_track );
+ return 0x08;
}
- i_len = (int)b_value[2] + 3;
- i_result = memcmp( pb_temp, p_track->pb_now, i_len );
+ i_result = memcmp( pb_temp, p_track->pb_now, p_mevent->dw_length );
if( 0 != i_result ) {
printf("Error!!: Fail Verify MidiEvent --" \
- " [Trk %d] MetaCode Data: len=%d \n", i_track, i_len );
- return 0x0d;
+ " [Trk %d] Meta Data: len=%d \n", i_track, i_len );
+ return 0x09;
}
- p_track->pb_now += i_len;
- pb_vardata += i_len;
+ p_track->pb_now += p_mevent->dw_length;
+ pb_vardata += p_mevent->dw_length;
}
}