LoginSignup
4
6

More than 5 years have passed since last update.

iPhone6s以降の内蔵スピーカーは再生周波数48kHzのみ対応

Posted at

はじめに

タイトルの通りなんですが、大昔に作ったiOSアプリがiPhone7だと音割れするという報告を当時の担当者から受けて(ただし業務外)、調べた(ただし業務外)結果がこれでした。

Technical Q&A QA1631

AVAudioSession - Requesting Audio Session Preferences
https://developer.apple.com/library/content/qa/qa1631/_index.html

Important: Different hardware can have different capabilities. For example, the internal speaker on the iPhone 6S models only support a sample rate of 48kHz while previous iPhone models supported a collection of sample rates. If you assume current values will always be your preferred values and for example fill our your client format using the hardware format expecting 44.1kHz when the actual sample rate is 48kHz, your application can suffer problems like audio distortion with the further possibility of other failures.

簡単に訳すと、

重要: それぞれの機種が異なる機能を持つ可能性があります。例えば、以前のiPhoneは複数の再生周波数に対応していましたが、iPhone6Sの内蔵スピーカーは48kHzにのみ対応しています。実際のハードウェアの再生周波数が48kHzなのに44.1kHzであることを期待してフォーマットを設定すると、あなたのアプリは音割れなどのさまざまな問題に苦しむことになります。

言い訳

こんな重要な事をQ&Aにしれっと書くなー!!と言いたいところですが、仕方ありません。えぇ、おっしゃる通り、44.1kHz決め打ちで実装していました。

AudioSessionという低レベルオーディオAPIを使用し、もちろんAudioSessionSetPropertyで44.1kHzに設定していたんですが、当時のiPhoneは全部44.1kHzだった事もあり、44.1kHz非対応だった場合の対応が不十分だったわけです。そもそも、そういう場合はサンプリングレートコンバートしてくれるものと思っていたのに、それに近いハードウェアが対応している再生周波数に適当に設定されてしまうんですねー。それを取得してチェックすべきでした。

我々のアプリだけではなく、いくつかの大手のアプリでも音割れが発生しているという話なので、引っかかりやすいポイントだったのではないかなと思います。確かWindowsのWASAPI(CoreAudio)もそういう仕様だったはず。

なお、AudioSession APIはすでにExpiredとなっているので(iOS7からAVAudioSessionに移行)、Apple側の対応は期待できません。

おわび

で、アプリ側で修正すればもちろん直るんですが、実はそのアプリ、すでにサービス終了しちゃってるから直せない。愛あるプレイヤーの皆さん、ごめんなさい…。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6