新增 设置-播放设置-使用设备能处理的最大声道数输出音频 设置(#1873)

This commit is contained in:
lyswhut
2024-05-02 12:33:07 +08:00
parent 793b5a679c
commit e4de4b8c1b
12 changed files with 70 additions and 9 deletions
+28
View File
@@ -54,6 +54,7 @@ let pitchShifterNode: AudioWorkletNode
let pitchShifterNodePitchFactor: AudioParam
let pitchShifterNodeLoadStatus: 'none' | 'loading' | 'unconnect' | 'connected' = 'none'
let pitchShifterNodeTempValue = 1
let defaultChannelCount = 2
export const soundR = 0.5
@@ -111,6 +112,7 @@ const initAdvancedAudioFeatures = () => {
if (audioContext) return
if (!audio) throw new Error('audio not defined')
audioContext = new window.AudioContext()
defaultChannelCount = audioContext.destination.channelCount
initAnalyser()
initBiquadFilter()
@@ -134,6 +136,32 @@ export const getAudioContext = () => {
return audioContext
}
let unsubMediaListChangeEvent: (() => void) | null = null
export const setMaxOutputChannelCount = (enable: boolean) => {
if (enable) {
initAdvancedAudioFeatures()
audioContext.destination.channelCount = audioContext.destination.maxChannelCount
audioContext.destination.channelCountMode = 'max'
// navigator.mediaDevices.addEventListener('devicechange', handleMediaListChange)
if (!unsubMediaListChangeEvent) {
let handleMediaListChange = () => {
setMaxOutputChannelCount(true)
}
window.app_event.on('playerDeviceChanged', handleMediaListChange)
unsubMediaListChangeEvent = () => {
window.app_event.off('playerDeviceChanged', handleMediaListChange)
unsubMediaListChangeEvent = null
}
}
} else {
unsubMediaListChangeEvent?.()
if (audioContext && audioContext.destination.channelCountMode != 'explicit') {
audioContext.destination.channelCount = defaultChannelCount
// audioContext.destination.channelInterpretation
audioContext.destination.channelCountMode = 'explicit'
}
}
}
export const getAnalyser = (): AnalyserNode | null => {
initAdvancedAudioFeatures()