iphone - 如何计算X秒内的数据包数量?

标签 iphone objective-c math iphone-sdk-3.0 audio

我正在尝试了解 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/

相关文章:

iphone - UITableViewHeaderFooterView : Unable to change background color

iphone - 后台执行

iphone - 断言失败

objective-c - 关于 subview 在 objective-C 中保留 superview 的问题

ios - 更改 uibutton 的文字大小不起作用

math - 压缩数学图

iphone - 单击每一行时如何设置导航项的标题?

ios - uicollectionviewcell 中的 AVPlayerViewController - 取消触摸

java - 获取分配奖java的动态比率

math - 如何仅使用斜边求直角三角形的反正切?