Je suis Tring pour comprendre les choses * Audio pour iPhonecomment calculer le nombre de paquets pour X secondes?
actuellement je lis: core audio overview
ici, j'ai une question:
de codes par exemple de pomme:
- (void) calculateSizesFor: (Float64) seconds {
UInt32 maxPacketSize;
UInt32 propertySize = sizeof (maxPacketSize);
AudioFileGetProperty (
audioFileID,
kAudioFilePropertyPacketSizeUpperBound,
&propertySize,
&maxPacketSize
);
static const int maxBufferSize = 0x10000; // limit maximum size to 64K
static const int minBufferSize = 0x4000; // limit minimum size to 16K
if (audioFormat.mFramesPerPacket) {
Float64 numPacketsForTime =
audioFormat.mSampleRate/audioFormat.mFramesPerPacket * seconds;
[self setBufferByteSize: numPacketsForTime * maxPacketSize];
} else {
// if frames per packet is zero, then the codec doesn't know the
// relationship between packets and time. Return a default buffer size
[self setBufferByteSize:
maxBufferSize > maxPacketSize ? maxBufferSize : maxPacketSize];
}
// clamp buffer size to our specified range
if (bufferByteSize > maxBufferSize && bufferByteSize > maxPacketSize) {
[self setBufferByteSize: maxBufferSize];
} else {
if (bufferByteSize < minBufferSize) {
[self setBufferByteSize: minBufferSize];
}
}
[self setNumPacketsToRead: self.bufferByteSize/maxPacketSize];
}
j'ai compris presque tout, mais je n'ai tout simplement pas obtenu pourquoi:
Float64 numPacketsForTime = audioFormat.mSampleRate/audioFormat.mFramesPerPacket * seconds;
je pensais que quelque chose comme ça fonctionnerait: numPacketsForTime = seconds * packetsPerSecond
donc, packetsPerSecond = audioFormat.mSampleRate/audioFormat.mFramesPerPacket
????
pourriez-vous m'aider avec les maths?
merci!
Oui, je comprends que A * B/C == B/C * A. Ce que je ne comprends pas, c'est pourquoi ce 'audioFormat.mSampleRate/audioFormat.mFramesPerPacket' ?, le mpsampleRate me donnera le nombre de 'samples' pour chaque seconde. l'audioFormat.mFramesPerPacket me donnera le nombre de cadres par paquet ?, Quelle est la relation avec les paquetsPerSecond ?? – jhon
Essayez de regarder les unités. SampleRate serait des images/secondes. FramesPerPacket serait des cadres/paquets. SampleRate/FramesPerPacket serait (images/secondes)/(images/paquets). L'annulation des trames et le réarrangement donne des paquets/secondes ou PacketsPerSecond. –