移除升降调预设

pull/1397/head
lyswhut 2023-06-01 14:35:46 +08:00
parent 3c02e3dddc
commit c8f6153831
8 changed files with 73 additions and 66 deletions

View File

@ -1,6 +1,6 @@
### 新增 ### 新增
- 新增音效设置实验性功能支持10段均衡器设置、内置的一些环境混响音效、音调升降调节、3D立体环绕音效 - 新增音效设置实验性功能支持10段均衡器设置、内置的一些环境混响音效、音调升降调节、3D立体环绕音效据测试升降调可能会导致意外的CPU占用调整过升降调后若想完全关闭需将其重置为1.00x并重启软件)
- 播放速率设置面板新增是否音调补偿设置,在调整播放速率后,可以选择是否启用音调补偿,默认启用 - 播放速率设置面板新增是否音调补偿设置,在调整播放速率后,可以选择是否启用音调补偿,默认启用
### 修复 ### 修复

View File

@ -94,8 +94,8 @@ const modules = {
save_sound_effect_eq_preset: 'save_sound_effect_eq_preset', save_sound_effect_eq_preset: 'save_sound_effect_eq_preset',
get_sound_effect_convolution_preset: 'get_sound_effect_convolution_preset', get_sound_effect_convolution_preset: 'get_sound_effect_convolution_preset',
save_sound_effect_convolution_preset: 'save_sound_effect_convolution_preset', save_sound_effect_convolution_preset: 'save_sound_effect_convolution_preset',
get_sound_effect_pitch_shifter_preset: 'get_sound_effect_pitch_shifter_preset', // get_sound_effect_pitch_shifter_preset: 'get_sound_effect_pitch_shifter_preset',
save_sound_effect_pitch_shifter_preset: 'save_sound_effect_pitch_shifter_preset', // save_sound_effect_pitch_shifter_preset: 'save_sound_effect_pitch_shifter_preset',
get_hot_key: 'get_hot_key', get_hot_key: 'get_hot_key',
import_user_api: 'import_user_api', import_user_api: 'import_user_api',

View File

@ -21,10 +21,10 @@ declare namespace LX {
mainGain: number mainGain: number
sendGain: number sendGain: number
} }
interface PitchShifterPreset { // interface PitchShifterPreset {
id: string // id: string
name: string // name: string
playbackRate: number // playbackRate: number
} // }
} }
} }

View File

@ -18,10 +18,10 @@ export default () => {
getStore(STORE_NAMES.SOUND_EFFECT).set('convolutionPreset', params) getStore(STORE_NAMES.SOUND_EFFECT).set('convolutionPreset', params)
}) })
mainHandle<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_pitch_shifter_preset, async() => { // mainHandle<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_pitch_shifter_preset, async() => {
return getStore(STORE_NAMES.SOUND_EFFECT).get('pitchShifterPreset') as LX.SoundEffect.PitchShifterPreset[] | null ?? [] // return getStore(STORE_NAMES.SOUND_EFFECT).get('pitchShifterPreset') as LX.SoundEffect.PitchShifterPreset[] | null ?? []
}) // })
mainOn<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_pitch_shifter_preset, ({ params }) => { // mainOn<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_pitch_shifter_preset, ({ params }) => {
getStore(STORE_NAMES.SOUND_EFFECT).set('pitchShifterPreset', params) // getStore(STORE_NAMES.SOUND_EFFECT).set('pitchShifterPreset', params)
}) // })
} }

View File

@ -10,20 +10,20 @@
<base-slider-bar :class="$style.slider" :value="playbackRate * 100" :min="50" :max="150" @change="handleUpdatePlaybackRate" /> <base-slider-bar :class="$style.slider" :value="playbackRate * 100" :min="50" :max="150" @change="handleUpdatePlaybackRate" />
</div> </div>
</div> </div>
<div :class="$style.saveList"> <!-- <div :class="$style.saveList">
<base-btn v-for="num in semitones" :key="num" min @click="handleSetSemitones(num)">{{ $t(`player__sound_effect_pitch_shifter_preset_semitones`, { num: num > 0 ? `+${num}` : num }) }}</base-btn> <base-btn v-for="num in semitones" :key="num" min @click="handleSetSemitones(num)">{{ $t(`player__sound_effect_pitch_shifter_preset_semitones`, { num: num > 0 ? `+${num}` : num }) }}</base-btn>
<base-btn v-for="item in userPresetList" :key="item.id" min @click="handleSetPreset(item.playbackRate)" @contextmenu="handleRemovePreset(item.id)">{{ item.name }}</base-btn> <base-btn v-for="item in userPresetList" :key="item.id" min @click="handleSetPreset(item.playbackRate)" @contextmenu="handleRemovePreset(item.id)">{{ item.name }}</base-btn>
<AddPitchShifterPresetBtn v-if="userPresetList.length < 31" /> <AddPitchShifterPresetBtn v-if="userPresetList.length < 31" />
</div> </div> -->
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, computed, onMounted } from '@common/utils/vueTools' import { computed } from '@common/utils/vueTools'
import { appSetting, updateSetting } from '@renderer/store/setting' import { appSetting, updateSetting } from '@renderer/store/setting'
import AddPitchShifterPresetBtn from './AddPitchShifterPresetBtn.vue' // import AddPitchShifterPresetBtn from './AddPitchShifterPresetBtn.vue'
import { getUserPitchShifterPresetList, removeUserPitchShifterPreset } from '@renderer/store/soundEffect' // import { getUserPitchShifterPresetList, removeUserPitchShifterPreset } from '@renderer/store/soundEffect'
import { semitones } from '@renderer/plugins/player' // import { semitones } from '@renderer/plugins/player'
// const setting = reactive({ // const setting = reactive({
// enabled: false, // enabled: false,
@ -38,10 +38,10 @@ const handleSetPreset = (value) => {
updateSetting({ 'player.soundEffect.pitchShifter.playbackRate': value }) updateSetting({ 'player.soundEffect.pitchShifter.playbackRate': value })
} }
const handleSetSemitones = (value) => { // const handleSetSemitones = (value) => {
// https://zpl.fi/pitch-shifting-in-web-audio-api/ // // https://zpl.fi/pitch-shifting-in-web-audio-api/
handleSetPreset(2 ** (value / 12)) // handleSetPreset(2 ** (value / 12))
} // }
const handleUpdatePlaybackRate = (value) => { const handleUpdatePlaybackRate = (value) => {
value = parseFloat((Math.round(value) / 100).toFixed(2)) value = parseFloat((Math.round(value) / 100).toFixed(2))
@ -49,17 +49,17 @@ const handleUpdatePlaybackRate = (value) => {
} }
const userPresetList = ref([]) // const userPresetList = ref([])
const handleRemovePreset = id => { // const handleRemovePreset = id => {
removeUserPitchShifterPreset(id) // removeUserPitchShifterPreset(id)
} // }
onMounted(() => { // onMounted(() => {
getUserPitchShifterPresetList().then(list => { // getUserPitchShifterPresetList().then(list => {
userPresetList.value = list // userPresetList.value = list
}) // })
}) // })
</script> </script>

View File

@ -11,10 +11,10 @@
<div :class="['scroll', $style.row]"> <div :class="['scroll', $style.row]">
<AudioConvolution /> <AudioConvolution />
<PitchShifter /> <PitchShifter />
<AudioPanner />
</div> </div>
<div :class="['scroll', $style.row]"> <div :class="['scroll', $style.row]">
<BiquadFilter /> <BiquadFilter />
<AudioPanner />
</div> </div>
</div> </div>
<!-- </main> --> <!-- </main> -->

View File

@ -1,5 +1,12 @@
import { reactive, toRaw } from '@common/utils/vueTools' import { reactive, toRaw } from '@common/utils/vueTools'
import { getUserSoundEffectConvolutionPresetList, getUserSoundEffectEQPresetList, getUserSoundEffectPitchShifterPresetList, saveUserSoundEffectConvolutionPresetList, saveUserSoundEffectEQPresetList, saveUserSoundEffectPitchShifterPresetList } from '@renderer/utils/ipc' import {
getUserSoundEffectConvolutionPresetList,
getUserSoundEffectEQPresetList,
// getUserSoundEffectPitchShifterPresetList,
saveUserSoundEffectConvolutionPresetList,
saveUserSoundEffectEQPresetList,
// saveUserSoundEffectPitchShifterPresetList,
} from '@renderer/utils/ipc'
let userEqPresetList: LX.SoundEffect.EQPreset[] | null = null let userEqPresetList: LX.SoundEffect.EQPreset[] | null = null
@ -56,28 +63,28 @@ export const removeUserConvolutionPreset = async(id: string) => {
} }
let userPitchShifterPresetList: LX.SoundEffect.PitchShifterPreset[] | null = null // let userPitchShifterPresetList: LX.SoundEffect.PitchShifterPreset[] | null = null
export const getUserPitchShifterPresetList = async() => { // export const getUserPitchShifterPresetList = async() => {
if (userEqPresetList == null) { // if (userEqPresetList == null) {
userPitchShifterPresetList = reactive(await getUserSoundEffectPitchShifterPresetList()) // userPitchShifterPresetList = reactive(await getUserSoundEffectPitchShifterPresetList())
} // }
return userPitchShifterPresetList // return userPitchShifterPresetList
} // }
export const saveUserPitchShifterPreset = async(preset: LX.SoundEffect.PitchShifterPreset) => { // export const saveUserPitchShifterPreset = async(preset: LX.SoundEffect.PitchShifterPreset) => {
if (userPitchShifterPresetList == null) { // if (userPitchShifterPresetList == null) {
userPitchShifterPresetList = reactive(await getUserSoundEffectPitchShifterPresetList()) // userPitchShifterPresetList = reactive(await getUserSoundEffectPitchShifterPresetList())
} // }
const target = userPitchShifterPresetList.find(p => p.id == preset.id) // const target = userPitchShifterPresetList.find(p => p.id == preset.id)
if (target) Object.assign(target, preset) // if (target) Object.assign(target, preset)
else userPitchShifterPresetList.push(preset) // else userPitchShifterPresetList.push(preset)
saveUserSoundEffectPitchShifterPresetList(toRaw(userPitchShifterPresetList)) // saveUserSoundEffectPitchShifterPresetList(toRaw(userPitchShifterPresetList))
} // }
export const removeUserPitchShifterPreset = async(id: string) => { // export const removeUserPitchShifterPreset = async(id: string) => {
if (userPitchShifterPresetList == null) { // if (userPitchShifterPresetList == null) {
userPitchShifterPresetList = reactive(await getUserSoundEffectPitchShifterPresetList()) // userPitchShifterPresetList = reactive(await getUserSoundEffectPitchShifterPresetList())
} // }
const index = userPitchShifterPresetList.findIndex(p => p.id == id) // const index = userPitchShifterPresetList.findIndex(p => p.id == id)
if (index < 0) return // if (index < 0) return
userPitchShifterPresetList.splice(index, 1) // userPitchShifterPresetList.splice(index, 1)
saveUserSoundEffectPitchShifterPresetList(toRaw(userPitchShifterPresetList)) // saveUserSoundEffectPitchShifterPresetList(toRaw(userPitchShifterPresetList))
} // }

View File

@ -307,13 +307,13 @@ export const saveUserSoundEffectConvolutionPresetList = (list: LX.SoundEffect.Co
rendererSend<LX.SoundEffect.ConvolutionPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_convolution_preset, list) rendererSend<LX.SoundEffect.ConvolutionPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_convolution_preset, list)
} }
export const getUserSoundEffectPitchShifterPresetList = async() => { // export const getUserSoundEffectPitchShifterPresetList = async() => {
return await rendererInvoke<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_pitch_shifter_preset) // return await rendererInvoke<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_pitch_shifter_preset)
} // }
export const saveUserSoundEffectPitchShifterPresetList = (list: LX.SoundEffect.PitchShifterPreset[]) => { // export const saveUserSoundEffectPitchShifterPresetList = (list: LX.SoundEffect.PitchShifterPreset[]) => {
rendererSend<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_pitch_shifter_preset, list) // rendererSend<LX.SoundEffect.PitchShifterPreset[]>(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_pitch_shifter_preset, list)
} // }
export const allHotKeys = markRaw({ export const allHotKeys = markRaw({
local: [ local: [