代码之家  ›  专栏  ›  技术社区  ›  Alesqui

在WatchOS 4上录制音频

  •  1
  • Alesqui  · 技术社区  · 8 年前

    在WWDC17上,WatchOS 4宣布了新的录制功能。 我一直在尝试获得PCM阵列,但没有成功。

    检查音频会话:

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)
    
        let recordingSession = AVAudioSession.sharedInstance()
    
        do {
            try recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
            try recordingSession.setActive(true)
            recordingSession.requestRecordPermission() { [unowned self] allowed in
                DispatchQueue.main.async {
                    if allowed {
                        self.recordingSessionSuccessfulPermission()
                    } else {
                        self.recordingSessionFailPermission()
                    }
                }
            }
        } catch {
            self.recordingSessionFailPermission()
        }
    }
    

    @IBAction func startRecordButton() {
        label.setText("start record")
        let audioEngine = AVAudioEngine.init()
        let inputNode = audioEngine.inputNode
        let format = inputNode.inputFormat(forBus: 0)
        inputNode.installTap(onBus: 0, bufferSize: 8000, format: format) { (buf, wheb) in
            self.label.setText("It is working")
        }
    
        audioEngine.prepare()
        do {
            try audioEngine.start()
        } catch {
            // Handle error...
        }
    }
    

    此代码引发错误:

    [audiocomp] 178: registration server connection invalidated
    [audiocomp] 170: registration server proxy error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.audio.AudioComponentRegistrar was invalidated." UserInfo={NSDebugDescription=The connection to service named com.apple.audio.AudioComponentRegistrar was invalidated.}
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Matheus Pereira    8 年前

    AudioEngine对象必须在操作之外创建。

    class MyClass: WKInterfaceController {
        private var audioEngine = AVAudioEngine()