V1.3.2: 音量控制只作用于 App 内部输出, 不再修改系统音量

三处入口全部收敛到 applyPlaybackMode():
- 播放界面-调音(全屏音量面板 showFullScreenVolumeDialog() 与调音弹窗
  showAudioControlDialog() 的音乐音量滑杆)
- 声音设置-歌曲最大音量
- 远程控制-音乐音量(mobile PATCH /api/v1/player/audio -> remoteAudio())

musicVolume(0-100) 作为 App 内部输出音量, 按线性系数施加到主播放器
(KtvVideoView.setPlaybackVolume / selectAudioChannel)与副音轨播放器
(vocalPlayer / embeddedVocalEngine); 删除 applySystemMusicVolume() 及其 4 处调用,
AudioManager.setStreamVolume / getStreamMaxVolume 已全部移除。

副作用修正: 原先 App 音量 70% 时既把系统音量压到 70%、又把播放器衰减到 70%,
实际响度只有约 49%(重复衰减); 现在只衰减一次, 100% 即 unity gain。

版本号 1.3.1 -> 1.3.2(versionCode 7 -> 8)。按约定本次不发布 Release, 仅本地打包测试。
This commit is contained in:
zijunchiang
2026-09-14 03:20:17 +08:00
parent 221516f319
commit 0549f910a6
3 changed files with 21 additions and 14 deletions
+2 -2
View File
@@ -11,8 +11,8 @@ android {
applicationId "com.local.ktv"
minSdk 21
targetSdk 25
versionCode 7
versionName "1.3.1"
versionCode 8
versionName "1.3.2"
ndk {
// 双 ABI 打包:兼容 64 位(Exynos 1580 等 arm64-v8a)与 32 位设备(极米 Play 超越版
// 的 Amlogic 950X2/S905X2 采用 32 位 Android 用户态,必须包含 armeabi-v7a,否则
+10 -11
View File
@@ -2474,7 +2474,7 @@ class MainActivity : AppCompatActivity() {
indicator.alpha = 1f
indicator.visibility = View.VISIBLE
renderMuteButton()
applySystemMusicVolume()
// 只调 App 内部输出音量, 不改系统音量(见 applyPlaybackMode)。
applyPlaybackMode()
saveState()
main.removeCallbacks(hideFullScreenVolumeIndicatorRunnable)
@@ -2631,7 +2631,6 @@ class MainActivity : AppCompatActivity() {
} else {
musicVolume = muteBeforeVol
}
applySystemMusicVolume()
applyPlaybackMode()
seekMusicVol.setProgress(musicVolume)
tvMusicVol.setText(musicVolume.toString())
@@ -2667,7 +2666,6 @@ class MainActivity : AppCompatActivity() {
override fun onStartTrackingTouch(s: SeekBar?) {}
override fun onStopTrackingTouch(s: SeekBar?) {
applySystemMusicVolume()
applyPlaybackMode()
saveState()
}
@@ -2680,7 +2678,6 @@ class MainActivity : AppCompatActivity() {
seekMusicVol.setProgress(80)
micVolume = 60
musicVolume = 80
applySystemMusicVolume()
applyPlaybackMode()
saveState()
tvMicVol.setText("60")
@@ -4325,13 +4322,6 @@ class MainActivity : AppCompatActivity() {
}
}
private fun applySystemMusicVolume() {
if (audioManager == null) return
val max = audioManager!!.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
val value = max(0, min(max, (musicVolume * max) / 100))
audioManager!!.setStreamVolume(AudioManager.STREAM_MUSIC, value, 0)
}
private fun clamp(value: Int, min: Int, max: Int): Int {
return max(min, min(max, value))
}
@@ -5397,6 +5387,15 @@ class MainActivity : AppCompatActivity() {
persistRuntimeState()
}
/**
* 应用原伴唱/声道与输出音量。
*
* 音量语义:`musicVolume`(0-100) 是 **App 内部输出音量**,按线性系数施加到播放器
* (`KtvVideoView.setPlaybackVolume` / `selectAudioChannel`) 与副音轨播放器上,
* **绝不修改系统音量**(不调用 `AudioManager.setStreamVolume`)。
* 播放界面-调音、声音设置-歌曲最大音量、远程控制-音乐音量三处都收敛到这里,
* 保证三条入口行为一致且都不影响系统音量。
*/
private fun applyPlaybackMode() {
val videoPlayer = player ?: return
videoPlayer.setTone(tone)