2017-04-06 21 views
3

マイクからオーディオを録音し、そのオーディオを別のデバイスにストリーミングしています。現在、この音声は、ユーザが話していなくてもストリームを介して送信されます。しかし、私は、多くのストリーミングサービスが実際にマイク入力を送信しないことに気がつきました。Swift - マイク入力(AVAudioPCMBuffer)から現在の音量を取得する方法

私は、どのように入力が他のデバイスにそれをストリーミングする前にどのように表示されているのかを尋ねています。

AVAudioEngineに付属するAVAudioPlayerNodeを使用してオーディオを録音しています。私は、実際にレコードに次のコマンドを使用します。

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

ここで、バッファがAVAudioPCMBufferですので、私は、このバッファからボリュームを見ることができるようにする必要があります。

ありがとうございます!

答えて

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に行きます。

関連する問題