[iOS] 内蔵マイクでのステレオ録音に対応している機種かどうかを確認する

iOSアプリ「オーディオ・レコーダー 」を Ver.1.6.0 にアップデートしました。

https://apps.apple.com/jp/app/audio-recorder-wav-m4a/id1454488895

内蔵マイクでのステレオ録音に対応する機能については Ver.1.4.0 ですでに対応していましたが、今回のアップデートはステレオ録音の指向性についても考慮した設定にも対応しました。

内蔵マイクでのステレオ録音

内蔵マイクでのステレオ録音に対応しているiOS端末の機種は、
・前面カメラの近くにあるマイク
・背面カメラの近くにあるマイク
・底部にある2つのマイク
の合計4つのマイクを全て用いて、バランスを考慮して録音することで実現しています。

AVAudioSessionは、内蔵マイクでのステレオ録音について、前面または背面のマイクのいずれかを優先するオプションを用意しています。

前面からの音を優先して録音したい場合
IMG_1201

背面からの音を優先して録音したい場合
IMG_1201

Ver.1.4.0 では前面からの音を優先する選択のみでしたが、 Ver.1.6.0 にていずれかを選択できるように更新しました。
それぞれの設定で試してみると、LRの録音結果にも違いがわかりました。

内蔵マイクでのステレオ録音に対応している機種かどうかを確認する

上記では、内蔵マイクでのステレオ録音の指向性について書きましたが、古い機種ではそもそも内蔵マイクでのステレオ録音には対応していません。

以前Appleに問い合わせた際、以下が内蔵マイクでのステレオ録音に対応している機種ということでした。(かつ、iOS 14〜)
iPhone XS/XR, iPhone SE (第2世代), iPhone 11〜
iPad Pro 11 (第1世代〜), iPad Pro 12.9 (第3世代〜)

内蔵マイクでのステレオ録音に対応しているかどうかについては、プログラムから確認することができます。
詳細の説明は省略しますが、選択したPortのDataSourceからPolar Pattern(指向性)のリストを取得でき、その中に "Stereo" が存在するかどうかをチェックしています。

- (BOOL)isSupportedRecordStereoForBuiltInMic
{
	BOOL isStereoSupported = NO;
	
	if (@available(iOS 14.0, *)) {
		//
	} else {
		// iOS 14 未満はステレオ未対応
		return isStereoSupported;
	}

	AVAudioSession *session = [AVAudioSession sharedInstance];
	
	// select the built-in Back mic if available
	NSArray *portDescriptions = session.availableInputs;
	
	AVAudioSessionPortDescription *portDescription = nil;
	
	if ([portDescriptions count] == 0) {
		return isStereoSupported;
	} else {
		// 最後に見つかったものを選択
		AVAudioSessionPortDescription *port = portDescriptions[[portDescriptions count] - 1];
		portDescription = port;
	}

	for (AVAudioSessionDataSourceDescription *source in portDescription.dataSources) {
		if (source != nil) {
			NSArray *arSupportedPolarPatterns = source.supportedPolarPatterns;
			
			// ステレオに対応(iOS 14〜)
			isStereoSupported = [arSupportedPolarPatterns containsObject:@"Stereo"];
			if (isStereoSupported == YES){
				// ステレオ対応が存在
				break;
			}
		}
	}

	return isStereoSupported;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です