新增音效设置

This commit is contained in:
lyswhut
2023-05-03 17:45:43 +08:00
parent ea5e8b56dd
commit 7b9eefdf2d
24 changed files with 1182 additions and 156 deletions
@@ -31,6 +31,7 @@ import useWatchList from './useWatchList'
import { HOTKEY_PLAYER } from '@common/hotKey'
import { playNext, pause, playPrev, togglePlay } from '@renderer/core/player'
import usePlaybackRate from './usePlaybackRate'
import useSoundEffect from './useSoundEffect'
export default () => {
@@ -41,6 +42,7 @@ export default () => {
usePlayEvent()
useLyric()
useVolume()
useSoundEffect()
usePlaybackRate()
useWatchList()
@@ -0,0 +1,147 @@
import { watch } from '@common/utils/vueTools'
import {
freqs,
convolutions,
getAudioContext,
getBiquadFilter,
setConvolver,
setPannerSoundR,
setPannerSpeed,
startPanner,
stopPanner,
} from '@renderer/plugins/player'
import { appSetting } from '@renderer/store/setting'
const cache = new Map<string, AudioBuffer>()
const loadBuffer = async(name: string) => new Promise<AudioBuffer>((resolve, reject) => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const path = require('@static/medias/filters/' + name) as string
if (cache.has(path)) {
resolve(cache.get(path) as AudioBuffer)
return
}
// Load buffer asynchronously
let request = new XMLHttpRequest()
request.open('GET', path, true)
request.responseType = 'arraybuffer'
request.onload = function() {
// Asynchronously decode the audio file data in request.response
void getAudioContext().decodeAudioData(request.response, (buffer) => {
if (!buffer) {
reject(new Error('error decoding file data: ' + path))
return
}
cache.set(path, buffer)
resolve(buffer)
},
function(error) {
reject(error)
console.error('decodeAudioData error', error)
})
}
request.onerror = function() {
reject(new Error('XHR error'))
}
request.send()
})
export default () => {
console.log(appSetting['player.soundEffect.panner.enable'])
if (appSetting['player.soundEffect.panner.enable']) startPanner()
setPannerSoundR(appSetting['player.soundEffect.panner.soundR'] / 10)
setPannerSpeed(2 * (appSetting['player.soundEffect.panner.speed'] / 10))
if (freqs.some(v => appSetting[`player.soundEffect.biquadFilter.hz${v}`] != 0)) {
const bfs = getBiquadFilter()
for (const item of freqs) {
bfs.get(`hz${item}`)!.gain.value = appSetting[`player.soundEffect.biquadFilter.hz${item}`]
}
}
if (appSetting['player.soundEffect.convolution.fileName']) {
void loadBuffer(appSetting['player.soundEffect.convolution.fileName']).then((buffer) => {
const target = convolutions.find(c => c.source == appSetting['player.soundEffect.convolution.fileName'])
setConvolver(buffer, target!.sendGain, target!.mainGain)
})
}
watch(() => appSetting['player.soundEffect.panner.enable'], (enable) => {
if (enable) {
startPanner()
} else {
stopPanner()
}
})
watch(() => appSetting['player.soundEffect.panner.soundR'], (soundR) => {
setPannerSoundR(soundR / 10)
})
watch(() => appSetting['player.soundEffect.panner.speed'], (speed) => {
setPannerSpeed(2 * (speed / 10))
})
watch(() => appSetting['player.soundEffect.convolution.fileName'], (fileName) => {
setTimeout(() => {
if (fileName) {
void loadBuffer(fileName).then((buffer) => {
const target = convolutions.find(c => c.source == fileName)
setConvolver(buffer, target!.sendGain, target!.mainGain)
})
} else {
setConvolver(null, 0, 0)
}
})
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz31'], (hz31) => {
const bfs = getBiquadFilter()
bfs.get('hz31')!.gain.value = hz31
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz62'], (hz62) => {
const bfs = getBiquadFilter()
bfs.get('hz62')!.gain.value = hz62
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz125'], (hz125) => {
const bfs = getBiquadFilter()
bfs.get('hz125')!.gain.value = hz125
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz250'], (hz250) => {
const bfs = getBiquadFilter()
bfs.get('hz250')!.gain.value = hz250
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz500'], (hz500) => {
const bfs = getBiquadFilter()
bfs.get('hz500')!.gain.value = hz500
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz1000'], (hz1000) => {
const bfs = getBiquadFilter()
bfs.get('hz1000')!.gain.value = hz1000
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz2000'], (hz2000) => {
const bfs = getBiquadFilter()
bfs.get('hz2000')!.gain.value = hz2000
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz4000'], (hz4000) => {
const bfs = getBiquadFilter()
bfs.get('hz4000')!.gain.value = hz4000
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz8000'], (hz8000) => {
const bfs = getBiquadFilter()
bfs.get('hz8000')!.gain.value = hz8000
})
watch(() => appSetting['player.soundEffect.biquadFilter.hz16000'], (hz16000) => {
const bfs = getBiquadFilter()
bfs.get('hz16000')!.gain.value = hz16000
})
// window.key_event.on(HOTKEY_PLAYER.volume_up.action, hotkeyVolumeUp)
// window.key_event.on(HOTKEY_PLAYER.volume_down.action, hotkeyVolumeDown)
// window.app_event.on('setPlaybackRate', handleSetPlaybackRate)
// onBeforeUnmount(() => {
// // window.key_event.off(HOTKEY_PLAYER.volume_up.action, hotkeyVolumeUp)
// // window.key_event.off(HOTKEY_PLAYER.volume_down.action, hotkeyVolumeDown)
// window.app_event.off('setPlaybackRate', handleSetPlaybackRate)
// })
}