WWDC Quick Look 💓 By SwiftGGTeam
Record stereo audio with AVAudioSession

Record stereo audio with AVAudioSession

元の動画を見る

ハイライト

iOS 14 および iPadOS 14 では、AVAudioSession がサポートされている iPhone および iPad の内蔵マイクからステレオ録音できるようになり、データ ソース、ステレオ極性パターン、およびpreferredInputOrientation によって期待されるとおりに左チャンネルと右チャンネルを維持できます。

主要内容

以前は、携帯電話での録音には空間感が欠けていることがよくありました。デバイスには明らかに複数のマイクがありますが、アプリによって記録された結果は多くの場合モノラルとして処理されます。パフォーマンス、インタビュー、ホームビデオ、自撮りビデオなどを録音する場合、リスナーは音が存在することだけを認識し、音が左から来ているのか右から来ているのかを区別することは困難です。

iOS 14 および iPadOS 14 では、AVAudioSession内蔵マイクステレオ録音機能を追加しました。このシステムはデバイス上のマイクの両方を使用し、それをモデル化してバイノーラル ステレオ エクスペリエンスを生成します。開発者は各マイクを直接制御する必要はありませんが、適切な入力ポート、データ ソース (データ ソース)、極性パターン (指向性パターン)、および入力方向を選択する必要があります。

このセッションのポイントは「方向性」です。同じ iPhone を縦向きにも横向きにも持つことができます。背面カメラまたは前面カメラで撮影できます。録画方向と映像やインターフェースの方向がずれていて、画面左側の人が話している場合、再生時に右側から音が聞こえる場合があります。そこでAppleは導入したinputOrientation、現在の録音が左右のチャンネルをどのようにマッピングするかをアプリがシステムに明示的に指示できるようにします。

ステレオ録音は、すべてのデバイスでオンにできる固定スイッチでもありません。セッションでは、開発者は最初に内蔵マイクを選択し、次にデータ ソースがそれをサポートしているかどうかを確認する必要があります。.stereo極性パターン。セッションをアクティブ化した後、実際の入力チャンネル数を読み取る必要があります。このようにして、ステレオをサポートするデバイスは 2 つのチャンネルを録音でき、ステレオをサポートしないデバイスは安定してモノラルにダウングレードできます。

詳細

1. まず内蔵マイク入力を選択します。

(06:57) ステレオを設定する前に、アプリはまず入力ルートを内蔵マイクに向ける必要があります。スピーチのコードは次のとおりです。availableInputsここで検索してください.builtInMic、その後電話しますsetPreferredInput

// How to set up recording from the built-in mic

private func enableBuiltInMic() {
    ...
    // Find the built-in microphone.
    guard let availableInputs = session.availableInputs,
          let builtInMic = availableInputs.first(where: { $0.portType == .builtInMic })
    else {
        print("The device must have a built-in microphone.")
        return
    }
    ...
    do {
        try session.setPreferredInput(builtInMic)
        ...
    } catch {
        ...
    }
}

キーポイント:

  • session.availableInputs現在利用可能な入力ポートへの入り口です。音声要件については、まずここで内蔵マイクを見つける必要があります。 -.builtInMicデバイスの内蔵マイクをフィルターで除外すると、外部入力はこのステレオ録音構成に入りません。 -guardこのブランチはマイクが内蔵されていないデバイスを処理し、公式スニペットはプロンプトを直接出力して戻ります。 -setPreferredInput(builtInMic)トランスクリプトの「優先入力ポートとして設定する」手順に対応します。

2. データ ソースのステレオ極性パターンを選択します

(07:16) ステレオ録音では新しい.stereo極性パターン。講義のリマインダー: このパターンはステレオ録音をサポートするデバイスでのみ表示されるため、バッファ サイズをハードコーディングすることはできません。オーディオセッションをアクティブ化した後、実際の入力チャンネル数を確認する必要があります。

// Configure stereo recording
func selectDataSource(...) {
    ...
    // Set the preferred polar pattern to stereo.
    try newDataSource.setPreferredPolarPattern(.stereo)

    // Set the preferred data source and polar pattern.
    try preferredInput.setPreferredDataSource(newDataSource)

    // Update the input orientation to match the current user interface orientation.
    try session.setPreferredInputOrientation(orientation.inputOrientation)
    ...
}

キーポイント:

  • newDataSource.setPreferredPolarPattern(.stereo)ステレオ極性パターンを要求します。サポートされているデータ ソースのみがこの要求を満たすことができます。 -preferredInput.setPreferredDataSource(newDataSource)前方のフォーカス方向を決定します。後方撮影と前方撮影では異なるデータ ソースを選択する必要があります。 -session.setPreferredInputOrientation(...)左右のチャンネルがデバイスの方向にどのようにマッピングされるかを決定します。
  • スピーチでは、セッションをアクティブにした後に入力チャンネル数をチェックし、それに応じてバッファを動的に調整することを提案しました。

3.preferredInputOrientation を使用して左右のチャンネルを揃えます

04:0605:06inputOrientation値は 4 つあります: ポートレート、ポートレート上下逆、横向き左、横向き右。前方および後方のステレオ データ ソースと合わせて、合計 8 つの方向の組み合わせが形成されます。

これは、前の公式スニペットのインライン呼び出しに対応します。try session.setPreferredInputOrientation(orientation.inputOrientation)

キーポイント:

  • データ ソースは、背面カメラの方向または前面カメラの方向など、「前面」がどこにあるかを選択する責任があります。 -preferredInputOrientation「左」と「右」がデバイスの端にどのように対応するかを選択します。
  • ビデオを録画するときは、音声の左側と右側がビデオ画面の左側と右側と一致している必要があります。
  • ビデオを録画しない場合、ユーザーはインターフェイスの方向に従ってデバイスを理解するため、講義ではステレオ入力の方向を UI の方向と一致させることを推奨しています。
  • 同じ録音内で左右のチャンネルが突然変化しないように、ファイル録音中は方向を固定しておく必要があります。

4. ユーザーがインターフェイスまたはフォーカスを変更したときにデータ ソースを更新します。

(08:22) サンプル アプリはビデオを録画しないため、インターフェイスが回転するか、ユーザーがフォーカス方向を切り替えたときにデータ ソースを更新します。講義の明確な注意事項: 記録中にデータ ソースや入力方向を切り替えないでください。

// When to select a data source & updated the stereo input orientation
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    updateDataSource()
}

@IBAction func updateDataSourceSelection(_ sender: Any) {
    updateDataSource()
}

private func updateDataSource() {
    // Don't update the data source if the app is currently recording.
    guard controller.state != .recording else { return }

    let dataSourceName = dataSources[dataSourceChooser.selectedSegmentIndex]
    controller.selectDataSource( named: dataSourceName,
        orientation:Orientation(windowOrientation)) { layout in
        self.layoutView.layout = layout
    }
}

キーポイント:

  • traitCollectionDidChangeインターフェイスの向きの変更をカバーしており、ビデオを録画しない録画アプリに適しています。 -updateDataSourceSelection正面または背面の向きの選択など、ユーザーが積極的に前方フォーカスを選択するシナリオをカバーします。 -guard controller.state != .recording else { return }録音中に音場の方向が変わらないように注意してください。 -Orientation(windowOrientation)現在のウィンドウの向きをオーディオ入力の向きに変換します。
  • 設定完了後も引き続き使用できますAVAudioRecorderまたはAVAudioEngine実際に録音を行ってください。

重要ポイント

1. セルフィービデオに正しい方向のステレオサウンドを追加します。

対処方法: カメラアプリでフロントカメラまたはリアカメラに応じて対応するステレオデータソースを選択し、録画を開始する前に入力方向を設定します。

これを行う価値がある理由: セッションでは、ビデオを録画するとき、音声の左側と右側が画像の左側と右側と一致する必要があると明確に述べています。そうしないと、再生時に視聴者が音源の方向を誤って判断することになります。

開始方法: ユーザーが録画ボタンを押す前に、現在のカメラの位置とビデオの回転に基づいてデータ ソースとビデオを計算します。preferredInputOrientation、これら 2 つの値は記録中にロックされます。

2. 音声のみのインタビューアプリに「水平および垂直画面音場」オプションを追加します

対処方法: インタビュー アプリでステレオ入力の向きを縦向き、横向き左、横向き右の間で切り替え、現在のインターフェイスの向きに従ってデバイスを配置するようにユーザーに指示します。

これを行う価値がある理由: ビデオを録画していないときは、ユーザーが左右のチャンネルを最も安定して理解できるように、Apple はステレオ入力の方向を UI の方向と一致させることを推奨しています。

開始方法: インターフェイスの方向変化を監視し、記録が進行中でないときにデータ ソースを呼び出してロジックを更新します。録画開始後に方向を固定し、録画終了後に切り替え可能にします。

3. 音楽練習アプリのステレオ機能をテストします。

対処法: 録音を開始する前に、内蔵マイク データ ソースがサポートされているかどうかを確認してください。.stereo、サポートされている場合はデュアルチャンネルを録画し、サポートされていない場合はモノラルステータスを表示します。

実行する価値がある理由: スピーチリマインダー.stereoサポートされているハードウェアでのみ表示されます。セッションをアクティブ化した後、実際の入力チャンネル数を読み取ることをお勧めします。

開始方法:からavailableInputs見つけてみる.builtInMic、優先入力と優先データ ソースを設定します。setActive次に、実際のチャンネル数に応じてバッファーと録音ファイル形式を設定します。

4. 左右のチャンネルのセルフテスト ウィザードを作成する

対処方法: 録音する前に、まずデバイスの左側で話し、次に右側で話すようにユーザーを誘導します。再生後、左右の向きが正しいか確認してください。

実行する価値がある理由: セッションでは、記録された方向が期待を満たしていることを確認するために、各方向とデータ ソースの組み合わせを包括的にテストすることを推奨しています。

開始方法: アプリでサポートされている方向の組み合わせをテスト マトリックスにリストします。各テストで数秒を記録し、チャンネルのピークを保存するかユーザーに聞いてもらい、異常が見つかった場合はマッピング ロジックを調整します。

5. フィールドレコーディングアプリに前方フォーカス選択を追加する

機能: ユーザーは、後方および前方のステレオ データ ソースにそれぞれ対応して、「ステージに面した」録音フォーカスと「自分に面した」録音フォーカスを選択できます。

実行する価値がある理由: 音声記述データ ソースによって前方のフォーカス方向が決定され、正面からの音声が強化され、さまざまな撮影または録音姿勢に適したものになります。

開始方法: 録音前にフォーカスセレクターを提供し、選択後に呼び出しますsetPreferredDataSourceそしてsetPreferredInputOrientation; 録音中はセレクターを無効にします。

関連セッション

コメント

GitHub Issues · utterances