點擊上方的語言選單以切換語言
我創建這個頁面是因為我之前使用Perfect Piano、Marimba Real、Harp Real這三款數位樂器演奏時,發現第一款不受靜音模式影響但後兩者卻受靜音模式影響。
因此,在透過螢幕錄影錄製演奏過程時,使用Perfect Piano錄製的影片不會被訊息通知聲打斷,而Harp Real與Marimba Real則會在錄影過程中被訊息通知聲中斷。
所以創建本頁面的目的是向各位說明為何會有這種現象以及這背後的計算機科學原理。
在智慧型手機上,不同應用程式的聲音行為會依照它們使用的 音訊通道(Audio Session / Audio Stream) 而有所不同。 這些通道由作業系統(如 iOS 或 Android)提供,用來告訴系統「這個聲音的重要程度」。
AVAudioSessionCategory)
在 iOS 中,每個 App 播放音訊時都需設定 AVAudioSession 的「類別」,
不同類別會決定是否受靜音開關(Mute Switch)影響。
| 音訊類別 | 用途 | 是否受靜音影響 |
|---|---|---|
AVAudioSessionCategoryAmbient | 背景音效、遊戲環境音 | ✅ 會靜音 |
AVAudioSessionCategorySoloAmbient | 需獨占聲音但尊重靜音 | ✅ 會靜音 |
AVAudioSessionCategoryPlayback | 音樂、影片播放 | ❌ 不受靜音影響 |
AVAudioSessionCategoryPlayAndRecord | 通話、錄音 | ❌ 不受靜音影響 |
AudioManager.STREAM_*)Android 系統使用「音訊串流 (Audio Stream Types)」的概念, 每一種串流代表不同的音訊類型與優先權。
| 串流類型 | 用途 | 是否受靜音模式影響 |
|---|---|---|
STREAM_MUSIC | 音樂、影片、遊戲 | ✅ 受靜音與音量控制影響 |
STREAM_ALARM | 鬧鐘 | ❌ 不受靜音影響 |
STREAM_RING | 來電鈴聲 | ❌ 或部分受控 |
STREAM_NOTIFICATION | 通知音效 | ✅ / ❌ 視勿擾設定 |
STREAM_SYSTEM | 系統提示音 | ✅ 通常受控 |
AVAudioSessionCategoryPlayback(iOS)或 STREAM_MUSIC(Android),
屬於「主動媒體播放」。因此:
AVAudioSessionCategoryAmbient 或 STREAM_SYSTEM。
這些通道被系統視為「背景音效」,因此:
當系統接收到通知時,它會暫時佔用 STREAM_NOTIFICATION 或 STREAM_RING 通道。
若應用程式的聲音也使用這些受控串流,系統就會「暫停或壓低」該 App 音量,導致錄影時聽見訊息聲。
// Android 範例
audioManager.setStreamType(AudioManager.STREAM_MUSIC);
// iOS 範例
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
應用程式是否受靜音開關影響,取決於開發者選用的音訊通道:
| 平台 | 控制機制 | 主要影響因素 |
|---|---|---|
| iOS | AVAudioSessionCategory | 開發者設定的音訊類別 |
| Android | AudioManager.STREAM_* | 指定的音訊串流類型 |
因此,像 Perfect Piano 這樣使用「播放類別」的應用不受靜音影響; 而 Harp Real、Marimba Real 則使用「環境音」通道,導致靜音或通知中斷。