我正在尝试了解 iPhone 的音频 * 内容
目前我正在阅读:core audio overview
我有一个问题:
来自苹果示例代码:
- (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];
}
我几乎明白了一切,但我就是不明白为什么会这样:
Float64 numPacketsForTime = audioFormat.mSampleRate/audioFormat.mFramesPerPacket * 秒;
我认为这样的事情会起作用:
numPacketsForTime = 秒 * packetPerSecond
所以,packetsPerSecond = audioFormat.mSampleRate/audioFormat.mFramesPerPacket
????
你能帮我做一下数学吗?
谢谢!
最佳答案
苹果的公式是:
audioFormat.mSampleRate / audioFormat.mFramesPerPacket * seconds;
结合您的公式得出:
seconds * audioFormat.mSampleRate / audioFormat.mFramesPerPacket
这是完全相同的公式,只是顺序改变了。请注意:
seconds * audioFormat.mSampleRate / audioFormat.mFramesPerPacket
= seconds * (audioFormat.mSampleRate / audioFormat.mFramesPerPacket)
= (audioFormat.mSampleRate / audioFormat.mFramesPerPacket) * seconds
= audioFormat.mSampleRate / audioFormat.mFramesPerPacket * seconds
你似乎理解它,但方向不同。 8)
关于iphone - 如何计算X秒内的数据包数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920079/