2017-01-23 21 views
1

AVAudioEngineにタップをインストールしようとしています。私は現在のコードを持っています:AVAudioEngineのタップでAVAudioNodeTapBlockを使用する方法。

guard let engine = engine, let input = engine.inputNode else { 
     print("error!") 
     return 
    } 
    let format = input.inputFormat(forBus: 0) 
    let bufferSize = 4096 
    input.installTap(onBus: 0, bufferSize: AVAudioFrameCount(bufferSize), format: format, block:) 

私はブロックに何が入っているのかは分かりません。これに関する多くの文書はありません。私はこれを見つけた:https://developer.apple.com/reference/avfoundation/avaudionodetapblock?language=objc

誰かがこれを使う方法を説明できますか?

おかげで、

Feras A.

答えて

0

あなたはスウィフトでそれを書きたい場合は、より良い、Swift version of the referenceをチェックしたいです。

あなたはあなたのようにそれを書くことができますので、閉鎖二つの引数を取り、何も返さないを渡す必要が宣言

typealias AVAudioNodeTapBlock = (AVAudioPCMBuffer, AVAudioTime) -> Void 

input.installTap(onBus: 0, bufferSize: AVAudioFrameCount(bufferSize), format: format, block: {buffer, when in 
     //... 
    }) 

二つの引数の種類をbufferし、 whenはそれぞれAVAudioPCMBufferAVAudioTimeです。

オーディオファイルにタップオーディオを録音したいのであれば、あなたはこのような何か書くことができます:とにかく

input.installTap(onBus: 0, bufferSize: AVAudioFrameCount(bufferSize), format: format, block: {buffer, when in 
     do { 
      try self.audioFile?.write(from: buffer) 
     } catch { 
      print(error) 
     } 
    }) 

audioFileがタイプAVAudioFile?のインスタンスプロパティであると仮定します。)

AVAudioPCMBufferの使い方を知る必要があります。 input.inputFormat(forBus: 0)はあなたのケースでは、適切なフォーマットであることができれば


は私はわからないんだけど、それは別の問題かもしれません。

+0

ありがとう、非常に参考になりました。 F – FerasAS

関連する問題