【问题标题】:Swift - How to get the current volume from the microphone input (AVAudioPCMBuffer)Swift - 如何从麦克风输入中获取当前音量(AVAudioPCMBuffer)
【发布时间】:2017-09-02 02:53:34
【问题描述】:

我正在从麦克风录制音频并将该音频流式传输到另一台设备。目前,即使用户没有说话,该音频也会通过流发送。但我注意到,当许多流媒体服务检测到来自它的噪音非常少时,它们实际上并没有发送您的麦克风输入。

所以我在问,在将输入流式传输到其他设备之前,我如何查看输入的音量。

我正在使用附加到 AVAudioEngine 的 AVAudioPlayerNode 录制音频。然后我使用以下内容进行实际记录:

localInput?.installTap(onBus: 0, bufferSize: 4096, format: localInputFormat) {
    (buffer, when) -> Void in

这里的缓冲区是一个 AVAudioPCMBuffer,所以我需要能够从这个缓冲区中看到音量。

谢谢!

【问题讨论】:

    标签: swift audio buffer avaudioplayer


    【解决方案1】:

    我能够使用以下代码完成此操作:

                let arraySize = Int(buffer.frameLength)
                var channelSamples: [[DSPComplex]] = []
                let channelCount = Int(buffer.format.channelCount)
    
                for i in 0..<channelCount {
    
                    channelSamples.append([])
                    let firstSample = buffer.format.isInterleaved ? i : i*arraySize
    
                    for j in stride(from: firstSample, to: arraySize, by: buffer.stride*2) {
    
                        let channels = UnsafeBufferPointer(start: buffer.floatChannelData, count: Int(buffer.format.channelCount))
                        let floats = UnsafeBufferPointer(start: channels[0], count: Int(buffer.frameLength))
                        channelSamples[i].append(DSPComplex(real: floats[j], imag: floats[j+buffer.stride]))
    
                    }
                }
    
                var spectrum = [Float]()
    
                for i in 0..<arraySize/2 {
    
                    let imag = channelSamples[0][i].imag
                    let real = channelSamples[0][i].real
                    let magnitude = sqrt(pow(real,2)+pow(imag,2))
    
                    spectrum.append(magnitude)
                }
    

    此答案归功于question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2013-11-18
      • 1970-01-01
      • 2023-04-02
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多