MIDIPacketListAdd (있는 packetlist, PACKETLIST_SIZE, currentPacket, mach_absolute_time, 렌, 데이터);
내 packetList가> 1 패킷을 포함 할 수 있도록이 메서드를 여러 번 호출하기 전에 생각했습니다. 그러나 이렇게 할 때 numPackets은 증가하지 않으며, 점점 증가하는 패킷 [0] .data가있는 packetList-> packet [0]이됩니다.
1)이 방법을 사용하는 올바른 방법은 무엇입니까? "Learning Core Audio"를 포함한 몇 가지 예를 살펴 보았습니다. 모두 하나의 패킷 만 보내는 것처럼 보입니다.
2) 1 개의 패킷 목록을 1 개의 패킷으로 여러 번 보내는 것보다 1 개의 패킷 목록에 여러 개의 패킷을 여러 번 포장하면 성능이 향상됩니까?
감사합니다. 관련하여 도움을 주셔서 감사합니다. 후속
편집 : 여기 패킷 목록
#define PACKETLIST_SIZE 512
- (void) initPacketList {
if (packetList) {
free(packetList);
packetList = NULL;
}
packetList = (MIDIPacketList *)malloc(PACKETLIST_SIZE * sizeof(char));
currentPacket = MIDIPacketListInit(packetList);
}
- (void) clearPacketList {
packetList->numPackets = 0;
currentPacket = MIDIPacketListInit(packetList);
}
- (void) addPacketToPacketList:(Byte*) data ofLength:(int) len {
NSLog(@"length %d", len);
//NSLog(@"%lld", mach_absolute_time());
currentPacket = MIDIPacketListAdd(packetList, PACKETLIST_SIZE, currentPacket, mach_absolute_time, len, data);
//if (!currentPacket) exit(1);
}
안녕하세요 Kurt, 위와 똑같은 일을하고 있지만 디버거를 사용하여 데이터를 검사 할 때 데이터가 여전히 하나의 패킷에 채워져 있습니다. 다음 데이터 패킷이 다음 패킷 패킷 [1]에 있어야 할 때 packetList-> packet [0] -> data가 길어집니다. – lppier
또 다른 질문은, 만약 내 packetList-> packet [0] -> data가 9 바이트라면, 그것을 보내고있는 신디/버추얼 인스트루먼트는 마지막 6 바이트를 무시하겠습니까? – lppier
디버거가 오해의 소지가 있습니다. 'MIDIPacket '은 가변 길이 구조입니다 - 6 바이트의 헤더 (4 바이트'timeStamp', 2 바이트'length'), 그리고 1에서 65535 바이트의 데이터를가집니다. 'MIDIPacketList'는 메모리에 연속적으로 저장된 하나 이상의 'MIDIPackets'입니다. 문제는 : C에서 가변 길이 구조를 실제로 표현할 수 없다는 것입니다. 따라서 두 번째 패킷을 얻으려면'packet [1] '이라고 말할 수 없습니다. 컴파일러 나 디버거가 올바른 일을하지는 않습니다. 'MIDIPacketListNext'를 사용하거나 원시 메모리를 직접보십시오. –