2017-12-01 33 views
2

나는 반복적 인 신경망에 입력으로 오디오 신호에서 MFCC 벡터를 추출하려고합니다. 그러나 Core Audio를 사용하여 Swift에서 원시 오디오 프레임을 얻는 방법을 찾는 데 문제가 있습니다. 아마 저 데이터를 얻기 위해서는 저급으로 가야하지만,이 분야에서 유용한 자료를 찾을 수는 없습니다.마이크 나 iOS의 저장된 오디오 파일에서 실시간 오디오 프레임을 어떻게 얻을 수 있습니까?

스위프트를 사용하여 필요한 오디오 신호 정보를 얻으려면 어떻게해야합니까?

편집 :이 질문은 가능한 복제본 How to capture audio samples in iOS with Swift?으로 신고되었습니다. 그러나 그 특별한 질문에는 내가 찾고있는 대답이 없습니다. 즉,이 질문에 대한 해결책은 AVAudioRecorder를 만드는 것입니다. AVAudioRecorder는 최종 결과가 아니라 내 질문에 대한 솔루션입니다.

이 질문은 How to convert WAV/CAF file's sample data to byte array?입니다. 나는이 방향으로 향하고 있습니다. 그 솔루션은 Objective-C로 작성되었으며 Swift에서 할 수있는 방법이 있는지 궁금합니다.

+0

[Swift로 iOS에서 오디오 샘플을 캡처하는 방법] 가능한 복제본 (https://stackoverflow.com/questions/30957434/how-to-capture-audio-samples-in-ios-with-swift) – MQLN

+0

좀 더 구체적인 질문을 편집했습니다. – macklinagent

답변

2

AVAudioEngine의 기본 입력 노드에 탭을 연결하는 것은 매우 간단하며 Float32 배열로 마이크로부터 오디오를 100ms 청취 할 수 있습니다. 다른 오디오 장치를 연결할 필요조차 없습니다. MFCC 추출기 & 네트워크가 충분히 응답 성이 있다면 이것이 가장 쉬운 방법 일 수 있습니다.

let audioEngine = AVAudioEngine() 
if let inputNode = audioEngine.inputNode { 
    inputNode.installTap(onBus: 0,   // mono input 
          bufferSize: 1000, // a request, not a guarantee 
          format: nil,  // no format translation 
          block: { buffer, when in 

     // This block will be called over and over for successive buffers 
     // of microphone data until you stop() AVAudioEngine 
     let actualSampleCount = Int(buffer.frameLength) 

     // buffer.floatChannelData?.pointee[n] has the data for point n 
     var i=0 
     while (i < actualSampleCount) { 
      let val = buffer.floatChannelData?.pointee[i] 
      // do something to each sample here... 
      i += 1 
     } 
    }) 

    do { 
     try audioEngine.start() 
    } catch let error as NSError { 
     print("Got an error starting audioEngine: \(error.domain), \(error)") 
    } 
} 

마이크 권한을 요청하고 획득해야합니다.

나는 진폭이 다소 낮기 때문에 네트워크 요구에 따라 약간의 게인이나 정규화를 적용해야 할 수도 있습니다.

WAV 파일을 처리하려면 AVAssetReader를 사용해보십시오. 그러나 코드는 가지고 있지 않습니다.

+0

고마워요! 나는> 15 명성을 얻지 못했기 때문에 대답에 대한 나의 업 보트가 분명히 카운터를 증가시키지 않는다. 죄송합니다. – macklinagent