iPhone 可以識別並記住不同耳機的最後音量是什麼原理?
iPhone 可以記住不同耳機的最後音量設置是什麼原理?其他手機有這種功能嗎?這種功能是否有必要存在?請不必懷疑這個功能的真實存在,以下是已有討論:
- iPhone remembers volume for headphones and speakers
- Headphone memory???
- iPhone 4 Headphone "Memory"?: Apple Support Communities
----------原始回答----------
很早就注意到此現象咯,是跟介面相關的,而非抗阻記錄。
比如普通3.5耳機和普通音箱換上3.5介面會受到iPhone相同對待,但有線控的原裝耳機會區別對待。
假如是記錄抗阻,那麼大音響的「默認音量」應該遠遠更小,但事實不是如此。有圖有真相。
截圖說明,其實iPhone只識別「兩種」耳機並單獨設置音量,一種叫有線控,一種叫沒有線控。至於原因嘛,第一,表明這是原裝耳機。第二,有麥克風的和沒麥克風的耳機(使用場景區別甚大,並且介面不同)當然需要單獨記錄音量。第三,針對每一個不同的抗阻單獨記錄音量設置是件「不是必須」的事,不僅有過度設計之嫌,還顯得費力不討好。除非蘋果希望對全球耳機做抗阻統計。-----------------------------------------------------------------------------------------------------------------------------------PS:一張圖告訴你iOS的細節掌控。蘋果不是考慮不到「根據不同抗阻單獨記錄每個耳機音量設置」。
----------4月8日凌晨更新線----------
蛋疼,找了各種物體來插iPhone4:iPhone原裝耳機、漫步者音響、鐵三角耳機、碩美科耳機、山寨耳機、DV機贈送的音視頻輸出線、3.5mm耳機延長線。直接上圖(建議點擊看大圖)。備註:A發聲單元大小有差異,各自抗阻未考據。B除了iPhone耳機,DV線也是4線的頭子。其他都是3線頭子。C就是插上手機之後手動設置初始音量。D設置好初始音量之後拔掉再插入看發生什麼。E指的是耳機線控或音響旋鈕直接調音量。F不是用手機觸屏或音量按鈕調節音量。
G半松半緊。H先插延長線,再插耳機等物。橫向結論:
1到處都是線,整理起來好累啊。2還是白色漂亮。3橫向相鄰的兩組初始音量故意設置為不同。4音量就是初始設置,反覆插拔沒有變化。5隻有iPhone原裝線控耳機能在遠離手機的那端調大手機音量並使屏幕顯示的音量條變大,漫步者音箱不能做到。其他設備沒有音量調節功能,記為null。6隻有iPhone原裝線控耳機能在遠離手機的那端調大手機音量並使屏幕顯示的音量條變小,漫步者音箱不能做到。其他設備沒有音量調節功能,記為null。7插入一半的情況下,普通耳機、音箱或2.5mm插口的其他設備會使屏幕顯示上一次的音量設置。但是iPhone (4) 耳機不會顯示iPhone耳機的上一次音量設置,反而顯示普通耳機、音箱的上一次設置。8因為延長線本身是3線頭子(同普通耳機、音箱等2.5mm插口),所有插在延長線上的設備都使iPhone顯示了「普通耳機」的上一次音量設置。
縱向結論:
①iPhone原裝耳機是會被手機單獨記錄音量設置的,並且這個設置在耳機插入一半的情況下失效。②漫步者的音量調節並不影響手機屏幕顯示的音量,反覆插拔也沒有變化,這意味著iPhone屏幕音量條跟音箱或耳機本身的抗阻沒有直接關係。③手機用耳機如果是直角插頭的,的確不是很方便。④換上碩美科耳機的時候,iPhone音量條同上一次普通耳機(鐵三角)的情況相同,手動設置初始音量之後,不管如何插拔也沒變化。⑤換上山寨耳機的時候,iPhone音量條同上一次普通耳機(碩美科)的情況相同,手動設置初始音量之後,不管如何插拔也沒變化。⑥DV線雖然同iPhone原裝耳機一樣是4線的頭子,但是並沒有引起相同的現象。仍然被識別為普通的3線插頭,音量條同上一次普通耳機(山寨耳機)的情況相同,手動設置初始音量之後,不管如何插拔也沒變化。⑦延長線本身一旦插上手機,即被識別為已經插上的普通耳機。音量條同上一次普通耳機(DV線)的情況相同,手動設置初始音量之後,不管如何插拔也沒變化。總結:1iPhone很有可能不是通過計算不同外接設備的抗阻來單獨保存音量設置記錄。
2iPhone很有可能是通過識別不同的插頭類型來區分「iPhone原裝耳機」和「其他耳機、音箱」的。3退出再插入之後iOS自動回復到上一次的音量大小記錄,實現方式並不如想像中神秘。很有可能是退出前保存一個日誌(「原裝耳機」和「其他耳機」區別為兩種情況對待),重新插入之後查找上次記錄。4以上結論完全沒有討論到外放喇叭的情況。不管插入的耳機是啥型號,拔出之後就一定是上一次的(插耳機之前的)外放音量,這是基本。5細節決定成敗。手頭沒有 iPhone 5 做測試,所以只好依照知友的測試結果扯兩句。慎贊
理論上來講,利用現有的耳機插孔檢測電路是可以做到通過檢測耳機阻抗來「記憶」耳機的,TI 公司在 04 年即提交了相關專利(專利號:US 2005/0201568),可以實現對不同阻抗的耳機提供不同的輸出功率。不過至今為止我個人還未聽說過有能實現類似功能的產品上市。查閱了蘋果公司的相關專利,也未發現有相關的資料。鴻海精密在 06 年曾提交過一項專利,可以通過耳機電阻來「記憶」耳機,但是該方案需要對耳機插頭進行改造。
所以初步推斷,iPhone 5 應該是針對不同標準的介面(3節、4節CTIA、4節OMTP)來實施不同大小的音量的。至於具體判斷方式,在鴻海精密的專利《耳機介面電路及具有該耳機介面電路的電子裝置》(公開號:CN 102457793 A)中有詳細的論述。
而之前鄭紫陽給出的鏈接iPhone remembers volume for headphones and speakers說的應該是另一碼事——將耳機插入以後 iPhone 給出一個音量,拔出以後(用手機自帶的揚聲器)iPhone 則給出另一個音量——這是耳機檢測電路(headphone jack sensor)最基本的功能了……我的 iPod video 也具有拔出耳機自動暫停播放的功能,實現原理與此類似。Audio Session Programming Guide: Audio Session Basics:
On your morning commute you unlock your iPhone and start listening to a new episode of a podcast, which plays back through the built-in speaker. As your seatmate frowns, you quickly plug in your headset and the Podcast continues, its output now rerouted and at the volume you last used for the headset. [...] The infrastructure that makes the simplicity possible is exposed to your application through an audio session object.
----
鑒於很多人並沒有明白這個功能的實現形式。我很願意在此復述一次,其實很簡單:
- iPhone 使用外放播放音樂,音量在某個數值,譬如說 80;
- 現在第一次插入耳機 A,會自動設置為音量為 50,手動干預調節音量,到另外任意一個刻度,譬如說 15,然後拔出來,此時音量刻度會恢復到 80,即原本外放使用的音量; (magic 1)
- 現在插入另一個型號的耳機 B,因為也是第一次,所以音量又會自動設置在 50,同樣手動干預調節音量,到另外一個刻度,譬如說 95,然後拔出來,此時音量刻度會恢復到 80,即原本外放使用的音量; (magic 2)
- 現在再次插入耳機 A,音量會跳到 15,即耳機 A 上一次拔出前的最後音量; (magic 3)
- 現在拔出耳機 A,音量會自動恢復到 80,即原本外放使用的音量; (magic 4)
- 如果不煩的話,現在再次插入耳機 B,音量會跳回 95,即此耳機上一次拔出前的最後音量刻度。 (magic 5)
對 TRRS 介面的耳機支持較好。----
這個功能 2007 年發布的第一代 iPhone 就有(更早從 Intel-powered Mac 開始就有)。但 OS 1.0 的時候工作還不穩定,2.0 以後就非常好了。而原理——
每一個不同型號的耳機或音箱的阻抗(不確定阻抗就是 identification)都不一樣,iPhone 通過阻抗(我不確定)來識別不同的外設,把最後音量設置信息記錄在某個 plist 文件內,並且是系統全局的,不同播放器都能夠適用。
而如果型號一樣的兩個不同耳機,電子特性一樣,會識別成一個耳機,調用保存記錄裡面的同一個音量設置。
_____找到確切的 identification 之後我會再更新回答。
實驗 1iPhone4實測4種4環耳麥,其中2種有2條一樣的樣板參與測試:
A-jays4的4環耳麥——設置音量值——a
原廠iphone4耳麥1——設置音量值——b原廠iphone4耳麥2——設置音量值——c原廠iphone5 earpod——設置音量值——d鐵三角 ATH-CK400紅色——設置音量值——e鐵三角 ATH-CK400綠色——設置音量值——f
得出:
原廠iphone4耳麥1 音量b= 原廠iphone4耳麥2 音量c鐵三角 ATH-CK400紅色 音量e =鐵三角 ATH-CK400綠色 音量f
其他各不相同結果:
1. 即同一種4環耳麥的音量記錄值是一樣的2. 不同種4環耳麥之間,iphone記錄的音量值不同------------------------------------實驗分割線---------------------------------------實驗 2iPhone4實測2種3環耳機鐵三角 ATH FC707——設置音量值——g
森海賽爾 HD270——設置音量值——h
結果:
1. 耳機插入的初始音量值與4環耳麥一樣。
2. iPhone只會記住1個3環耳機的音量值,即最後設置那個值。我插入鐵三角設置為g後,再插入森海的,森海音量值變為g。這個結果與樓上各位的相同。------------------------------------實驗分割線---------------------------------------
過程中還發現一點東西:
已經插過的某耳機,再次插入時,音量條都會先自動滑動到某一音量值A(目測近似70%),再自動滑動到上次記錄的此耳機的值x或者y或者z。出現了2次自動滑動。再補充:後來找來老婆的4S的全新原廠耳機,從來沒插過任何手機,發現這個音量值A就是耳機插入的初始值。且上述的2次自動滑動動作,出現的前提是該iphone更換不同的耳麥的情況下。即我每次都插自己的Ajays4,是不會出現這2次滑動的情況。如果我Ajays4和原廠耳機交替使用,就每次都會出現。---------------------------------------------------------------------------
我沒文化,無法得出確切原理。僅提供樣板及測試結果供各位大神參考。所以我是假的iphone?
太有必要存在了 電腦上就沒有 由於我有時會用功放有時會用入耳 音量沒調好經常震死我 畢竟開放式耳機和隔音入耳的音量需求完全不一樣 阻抗什麼不一樣也會導致出來的響度不一樣吧
PS:我用了CK100和創新air沒發現有這個功能我用兼容iphone的4極插頭插入iphone手機,手機能識別我插入了耳機,但不能識別出我接上了mic。 我模擬線控按鍵短接mic,iphone仍無識別mic。而原版iphone耳麥能夠。不能識別mic,這又是怎麼回事呢。 我想用自製的耳麥實現音頻轉錄,現在卻做不到。有大俠幫我解決一下問題所在嗎。
猜是紀錄耳機電阻與音量的對應關係?考慮到相同音量設置下耳機的實際發聲大小有區別,因此這個功能有意義。但你要不說我真不知道。
推薦閱讀:
※iOS開發質量的那些事
※iOS 的融合與 AR 的崛起
※[貝聊科技]AsyncDisplayKit近一年的使用體會及疑難點
※破一下 Apple 與 PRC 領土有關的兩條謠言
※你對 OS X 10.11 / iOS 9 的預設中文介面顯示字體有哪些期待?