美文网首页
iOS 使用CoreAudio生成白噪音频数据

iOS 使用CoreAudio生成白噪音频数据

作者: 刘乔泓 | 来源:发表于2020-12-08 21:09 被阅读0次

iOS 使用CoreAudio生成白噪音频数据(空白音频)

    /// 生成一段白噪音频数据
    /// - Parameters:
    ///   - startFrm: 开始frame
    ///   - nFrames: 持续的frame
    ///   - sampleRate: fps
    ///   - numChannels: 声道数量
    /// - Returns: 静音音频数据
    static func createSilentAudio(startFrm: Int64, nFrames: Int, sampleRate: Float64, numChannels: UInt32) -> CMSampleBuffer? {
        let bytesPerFrame = UInt32(2 * numChannels)
        let blockSize = nFrames*Int(bytesPerFrame)

        var block: CMBlockBuffer?
        var status = CMBlockBufferCreateWithMemoryBlock(
            allocator: kCFAllocatorDefault,
            memoryBlock: nil,
            blockLength: blockSize,  // blockLength
            blockAllocator: nil,        // blockAllocator
            customBlockSource: nil,        // customBlockSource
            offsetToData: 0,          // offsetToData
            dataLength: blockSize,  // dataLength
            flags: 0,          // flags
            blockBufferOut: &block
        )
        assert(status == kCMBlockBufferNoErr)

        // we seem to get zeros from the above, but I can't find it documented. so... memset:
        status = CMBlockBufferFillDataBytes(with: 0, blockBuffer: block!, offsetIntoDestination: 0, dataLength: blockSize)
        assert(status == kCMBlockBufferNoErr)

        var asbd = AudioStreamBasicDescription(
            mSampleRate: sampleRate,
            mFormatID: kAudioFormatLinearPCM,
            mFormatFlags: kLinearPCMFormatFlagIsSignedInteger,
            mBytesPerPacket: bytesPerFrame,
            mFramesPerPacket: 1,
            mBytesPerFrame: bytesPerFrame,
            mChannelsPerFrame: numChannels,
            mBitsPerChannel: 16,
            mReserved: 0
        )

        var formatDesc: CMAudioFormatDescription?
        status = CMAudioFormatDescriptionCreate(allocator: kCFAllocatorDefault, asbd: &asbd, layoutSize: 0, layout: nil, magicCookieSize: 0, magicCookie: nil, extensions: nil, formatDescriptionOut: &formatDesc)
        assert(status == noErr)

        var sampleBuffer: CMSampleBuffer?

        // born ready
        status = CMAudioSampleBufferCreateReadyWithPacketDescriptions(
            allocator: kCFAllocatorDefault,
            dataBuffer: block!,      // dataBuffer
            formatDescription: formatDesc!,
            sampleCount: nFrames,    // numSamples
            presentationTimeStamp: CMTimeMake(value: startFrm, timescale: Int32(sampleRate)),    // sbufPTS
            packetDescriptions: nil,        // packetDescriptions
            sampleBufferOut: &sampleBuffer
        )
        assert(status == noErr)

        return sampleBuffer
    }

相关文章

  • iOS 使用CoreAudio生成白噪音频数据

    iOS 使用CoreAudio生成白噪音频数据(空白音频)

  • iOS音频系列(二)--CoreAudio

    这一篇主要是CoreAudio官方文档的重点内容的笔记。 通过回调函数与CoreAudio交互 iOS的CoreA...

  • 0520产品体验-潮汐

    产品定位:白噪音工具应用 针对人群:有白噪音需求的小众年轻人 使用场景:写作,睡觉等 提供白噪音:普通,雨天,森林...

  • PDF

    iOS生成PDF图文ios开发之--PDF文件生成 iOS11 PDFKit 使用例程

  • GAN(代码待修改,数学公式待整理)

    一.GAN简介:"生成模型"可以将一个输入噪音生成和真实数据相似的数据"判别模型"能够判断出真实数据和类真实数据。...

  • webrtc音频引擎之CNG模块介绍

    CNG即comfort noise generator,舒适噪音生成。 该模块主要完成舒适噪音的生成,模块结构为:...

  • 白噪音。

    一、 又是一年冬天。我突然接到她的电话。说她要来北京出差。 她以高中时的昵称唤我,句尾也依旧有着撒娇意味的拖长音,...

  • 白噪音

    光随性舞蹈 烂漫盈盈 风和孩子一样 从不企图了解快乐和自由喧戏的意义 我不知从何处听闻 白噪音也是造物主创世的弥音...

  • 白噪音

    阴阳哲学 是这段时间里的最大体悟 历经的所有关系 都不离这最根本的原力 曾经畏惧的孤独与漂泊 却又是通往丰盛安宁的...

  • 《白噪音》

    小说的主人公是典型的美国中产阶级,男主人公格拉迪尼是大学教授。女主人公芭比特是位家庭主妇。他们生活富足,却总是害怕...

网友评论

      本文标题:iOS 使用CoreAudio生成白噪音频数据

      本文链接:https://www.haomeiwen.com/subject/icgqgktx.html