iOS でヘッドフォンを差した状態でも、内蔵スピーカーから音を出す方法

いま作ってるアプリで必要なので調査しました。

ヘッドフォン使用のカードリーダー
ヘッドフォン使用のカードリーダー

カードリーダーを使うアプリを作っています。
UniMag II, Two-Track Mobile MagStripe Reader この、流行のヘッドフォンジャックに刺して使用するものです。これを使うと、ヘッドフォンの音声からカードリーダの回路に電源を供給して、カードを読む事が出来ます。しかし,ヘッドフォンが刺さっていると、標準出力がヘッドフォンになるので、音が鳴らせなくなります。

手順

しかし、AudioToolboxを使用すると、出力先を強制的に変更する事が出来る様になります。以下のような手順と、コードです。

  • オーディオセッションのカテゴリを、kAudioSessionCategory_PlayAndRecordに設定
  • このモードに設定しないと、強制的にスピーカーからの出力を行えないようです。

  • kAudioSessionProperty_OverrideAudioRoute を、 kAudioSessionOverrideAudioRoute_Speaker に設定する。
  • ヘッドフォン側からの再生に戻したいた時に、kAudioSessionProperty_OverrideAudioRoute を、 kAudioSessionOverrideAudioRoute_None に設定する。


AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; // 1
AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory, // 2
sizeof (sessionCategory), // 3
&sessionCategory // 4
);

UInt32 ASRoute = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideAudioRoute,
sizeof (ASRoute),
&ASRoute
);
AudioSessionSetActive(YES);

サンプルコードをgitHubに置いています。

tomohisa/selectPlayHeadsetSpeaker – GitHub

Audio関係も、かなりいろいろ触れそうで、やってみると楽しいですね。

この本にいろいろ書かれていそうですね。読んでみたい。

参考にしたページ:

AVAudioSession reroutes iPhone audio automatically? – Stack Overflow
AVaudioPlayerで音を鳴らす – 酢ろぐ
iPhoneアプリ開発: 同時に録音再生するアプリで、オーディオ出力をiPhone端末下部のスピーカに切り替える | 情熱とスキルと市場
オーディオセッションプログラミングガ
イド – Apple CoreAudio

My Codex Leicester » Blog Archive » iPhone Core Audio Programming 第4回 Audio Sessionその1 – Mac/iOS の Audio Visual Programmingの話題

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください