diff --git a/.vscode/settings.json b/.vscode/settings.json index f7f6200a..530848ce 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,5 +12,6 @@ ], "i18n-ally.sortKeys": true, "javascript.preferences.importModuleSpecifier": "non-relative", - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "vue.codeActions.enabled": false } diff --git a/publish/changeLog.md b/publish/changeLog.md index e4f3ca33..d5acce3b 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,3 @@ ### 新增 -- 新增音效设置(实验性功能),支持10段均衡器设置、3D立体环绕音效、内置的一些环境混响音效 +- 新增音效设置(实验性功能),支持10段均衡器设置、内置的一些环境混响音效、3D立体环绕音效 diff --git a/src/common/constants.ts b/src/common/constants.ts index 4c0c2b70..3975dfcb 100644 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -10,6 +10,7 @@ export const STORE_NAMES = { LRC_RAW: 'lyrics', LRC_EDITED: 'lyrics_edited', THEME: 'theme', + SOUND_EFFECT: 'sound_effect', } as const export const APP_EVENT_NAMES = { diff --git a/src/common/ipcNames.ts b/src/common/ipcNames.ts index cb653317..61cf2045 100644 --- a/src/common/ipcNames.ts +++ b/src/common/ipcNames.ts @@ -90,6 +90,10 @@ const modules = { get_other_source_count: 'get_other_source_count', get_data: 'get_data', save_data: 'save_data', + get_sound_effect_eq_preset: 'get_sound_effect_eq_preset', + save_sound_effect_eq_preset: 'save_sound_effect_eq_preset', + get_sound_effect_convolution_preset: 'get_sound_effect_convolution_preset', + save_sound_effect_convolution_preset: 'save_sound_effect_convolution_preset', get_hot_key: 'get_hot_key', import_user_api: 'import_user_api', diff --git a/src/common/types/sound_effect.d.ts b/src/common/types/sound_effect.d.ts new file mode 100644 index 00000000..89a7ea34 --- /dev/null +++ b/src/common/types/sound_effect.d.ts @@ -0,0 +1,25 @@ +declare namespace LX { + namespace SoundEffect { + interface EQPreset { + id: string + name: string + hz31: number + hz62: number + hz125: number + hz250: number + hz500: number + hz1000: number + hz2000: number + hz4000: number + hz8000: number + hz16000: number + } + interface ConvolutionPreset { + id: string + name: string + source: string + mainGain: number + sendGain: number + } + } +} diff --git a/src/lang/en-us.json b/src/lang/en-us.json index 9a09ff11..8c44a185 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -228,9 +228,20 @@ "player__playing": "Now playing...", "player__prev": "Prev", "player__refresh_url": "Music URL expired, refreshing...", - "player__sound_effect": "Sound settings", + "player__sound_effect": "Sound settings (experimental)", "player__sound_effect_biquad_filter": "Equalizer", - "player__sound_effect_biquad_filter_reset_btn": "Reset equalizer", + "player__sound_effect_biquad_filter_preset_classical": "Classical", + "player__sound_effect_biquad_filter_preset_dance": "Dance", + "player__sound_effect_biquad_filter_preset_electronic": "Electronic", + "player__sound_effect_biquad_filter_preset_pop": "Pop", + "player__sound_effect_biquad_filter_preset_rock": "Rock", + "player__sound_effect_biquad_filter_preset_slow": "Slow", + "player__sound_effect_biquad_filter_preset_soft": "Soft", + "player__sound_effect_biquad_filter_preset_subwoofer": "Subwoofer", + "player__sound_effect_biquad_filter_preset_vocal": "Vocal", + "player__sound_effect_biquad_filter_reset_btn": "Reset", + "player__sound_effect_biquad_filter_save_btn": "Save preset as", + "player__sound_effect_biquad_filter_save_input": "New presets...", "player__sound_effect_convolution": "Ambient reverb sound effect", "player__sound_effect_convolution_file_bright_hall": "Hall", "player__sound_effect_convolution_file_cardiod_35_10_spread": "Rock", @@ -241,7 +252,7 @@ "player__sound_effect_convolution_file_matrix_1": "Matrix", "player__sound_effect_convolution_file_matrix_2": "Matrix 2", "player__sound_effect_convolution_file_s2_r4_bd": "Church", - "player__sound_effect_convolution_file_s3_r1_bd": "Church 2", + "player__sound_effect_convolution_file_s3_r1_bd": "Stereo", "player__sound_effect_convolution_file_spreader25_125ms": "Indoor 2", "player__sound_effect_convolution_file_spreader50_65ms": "Indoor", "player__sound_effect_convolution_file_telephone": "Telephone", diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json index 5f6c559d..70f4ef85 100644 --- a/src/lang/zh-cn.json +++ b/src/lang/zh-cn.json @@ -228,24 +228,34 @@ "player__playing": "播放中...", "player__prev": "上一首", "player__refresh_url": "URL过期,正在刷新URL...", - "player__sound_effect": "音效设置", + "player__sound_effect": "音效设置(实验性)", "player__sound_effect_biquad_filter": "均衡器", - "player__sound_effect_biquad_filter_reset_btn": "重置均衡器", + "player__sound_effect_biquad_filter_preset_classical": "古典", + "player__sound_effect_biquad_filter_preset_dance": "舞曲", + "player__sound_effect_biquad_filter_preset_electronic": "电子乐", + "player__sound_effect_biquad_filter_preset_pop": "流行", + "player__sound_effect_biquad_filter_preset_rock": "摇滚", + "player__sound_effect_biquad_filter_preset_slow": "慢歌", + "player__sound_effect_biquad_filter_preset_soft": "柔和", + "player__sound_effect_biquad_filter_preset_subwoofer": "重低音", + "player__sound_effect_biquad_filter_preset_vocal": "人声", + "player__sound_effect_biquad_filter_reset_btn": "重置", + "player__sound_effect_biquad_filter_save_btn": "另存预设", + "player__sound_effect_biquad_filter_save_input": "新预设...", "player__sound_effect_convolution": "环境混响音效", "player__sound_effect_convolution_file_bright_hall": "大厅", - "player__sound_effect_convolution_file_cardiod_35_10_spread": "摇滚", + "player__sound_effect_convolution_file_cardiod_35_10_spread": "心形扩散", "player__sound_effect_convolution_file_cinema_diningroom": "电影院", "player__sound_effect_convolution_file_dining_living_true_stereo": "餐厅", "player__sound_effect_convolution_file_feedback_spring": "反馈弹簧", "player__sound_effect_convolution_file_living_bedroom_leveled": "卫生间", - "player__sound_effect_convolution_file_matrix_1": "矩阵", - "player__sound_effect_convolution_file_matrix_2": "矩阵2", + "player__sound_effect_convolution_file_matrix_1": "矩阵混响", + "player__sound_effect_convolution_file_matrix_2": "矩阵混响2", "player__sound_effect_convolution_file_s2_r4_bd": "教堂", - "player__sound_effect_convolution_file_s3_r1_bd": "教堂2", - "player__sound_effect_convolution_file_spreader25_125ms": "室内2", + "player__sound_effect_convolution_file_s3_r1_bd": "立体声", "player__sound_effect_convolution_file_spreader50_65ms": "室内", "player__sound_effect_convolution_file_telephone": "电话", - "player__sound_effect_convolution_file_tim_omni_35_10_magnetic": "摇滚2", + "player__sound_effect_convolution_file_tim_omni_35_10_magnetic": "磁性立体声", "player__sound_effect_convolution_main_gain": "原始音频增益", "player__sound_effect_convolution_send_gain": "环境音效增益", "player__sound_effect_panner": "3D立体环绕(需使用耳机)", diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json index 6ed30e0a..1bd2cadf 100644 --- a/src/lang/zh-tw.json +++ b/src/lang/zh-tw.json @@ -228,9 +228,20 @@ "player__playing": "播放中...", "player__prev": "上一首", "player__refresh_url": "URL過期,正在刷新URL...", - "player__sound_effect": "音效設置", + "player__sound_effect": "音效設置(實驗性)", "player__sound_effect_biquad_filter": "均衡器", - "player__sound_effect_biquad_filter_reset_btn": "重置均衡器", + "player__sound_effect_biquad_filter_preset_classical": "古典", + "player__sound_effect_biquad_filter_preset_dance": "舞曲", + "player__sound_effect_biquad_filter_preset_electronic": "電子樂", + "player__sound_effect_biquad_filter_preset_pop": "流行", + "player__sound_effect_biquad_filter_preset_rock": "搖滾", + "player__sound_effect_biquad_filter_preset_slow": "慢歌", + "player__sound_effect_biquad_filter_preset_soft": "柔和", + "player__sound_effect_biquad_filter_preset_subwoofer": "重低音", + "player__sound_effect_biquad_filter_preset_vocal": "人聲", + "player__sound_effect_biquad_filter_reset_btn": "重置", + "player__sound_effect_biquad_filter_save_btn": "另存預設", + "player__sound_effect_biquad_filter_save_input": "新預設...", "player__sound_effect_convolution": "環境混響音效", "player__sound_effect_convolution_file_bright_hall": "大廳", "player__sound_effect_convolution_file_cardiod_35_10_spread": "搖滾", @@ -241,7 +252,7 @@ "player__sound_effect_convolution_file_matrix_1": "矩陣", "player__sound_effect_convolution_file_matrix_2": "矩陣2", "player__sound_effect_convolution_file_s2_r4_bd": "教堂", - "player__sound_effect_convolution_file_s3_r1_bd": "教堂2", + "player__sound_effect_convolution_file_s3_r1_bd": "立體聲", "player__sound_effect_convolution_file_spreader25_125ms": "室內2", "player__sound_effect_convolution_file_spreader50_65ms": "室內", "player__sound_effect_convolution_file_telephone": "電話", diff --git a/src/main/modules/winMain/rendererEvent/index.ts b/src/main/modules/winMain/rendererEvent/index.ts index 1f3700d8..240f8a0e 100644 --- a/src/main/modules/winMain/rendererEvent/index.ts +++ b/src/main/modules/winMain/rendererEvent/index.ts @@ -9,6 +9,7 @@ import sync from './sync' import data from './data' import music from './music' import download from './download' +import soundEffect from './soundEffect' import { sendEvent } from '../main' export * from './app' @@ -33,6 +34,7 @@ export default () => { data() music() download() + soundEffect() global.lx.event_app.on('updated_config', (keys, setting) => { sendConfigChange(setting) diff --git a/src/main/modules/winMain/rendererEvent/soundEffect.ts b/src/main/modules/winMain/rendererEvent/soundEffect.ts new file mode 100644 index 00000000..72df4ecb --- /dev/null +++ b/src/main/modules/winMain/rendererEvent/soundEffect.ts @@ -0,0 +1,20 @@ +import { STORE_NAMES } from '@common/constants' +import { WIN_MAIN_RENDERER_EVENT_NAME } from '@common/ipcNames' +import { mainOn, mainHandle } from '@common/mainIpc' +import getStore from '@main/utils/store' + +export default () => { + mainHandle(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_eq_preset, async() => { + return getStore(STORE_NAMES.SOUND_EFFECT).get('eqPreset') as LX.SoundEffect.EQPreset[] | null ?? [] + }) + mainOn(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_eq_preset, ({ params }) => { + getStore(STORE_NAMES.SOUND_EFFECT).set('eqPreset', params) + }) + + mainHandle(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_convolution_preset, async() => { + return getStore(STORE_NAMES.SOUND_EFFECT).get('convolutionPreset') as LX.SoundEffect.ConvolutionPreset[] | null ?? [] + }) + mainOn(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_convolution_preset, ({ params }) => { + getStore(STORE_NAMES.SOUND_EFFECT).set('convolutionPreset', params) + }) +} diff --git a/src/main/types/common.d.ts b/src/main/types/common.d.ts index 68cafe1b..28e03daa 100644 --- a/src/main/types/common.d.ts +++ b/src/main/types/common.d.ts @@ -10,3 +10,4 @@ import '@common/types/player' import '@common/types/desktop_lyric' import '@common/types/theme' import '@common/types/ipc_main' +import '@common/types/sound_effect' diff --git a/src/renderer/components/common/SoundEffectBtn/AddConvolutionPresetBtn.vue b/src/renderer/components/common/SoundEffectBtn/AddConvolutionPresetBtn.vue new file mode 100644 index 00000000..a4be500c --- /dev/null +++ b/src/renderer/components/common/SoundEffectBtn/AddConvolutionPresetBtn.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/renderer/components/common/SoundEffectBtn/AddEQPresetBtn.vue b/src/renderer/components/common/SoundEffectBtn/AddEQPresetBtn.vue new file mode 100644 index 00000000..24bd9015 --- /dev/null +++ b/src/renderer/components/common/SoundEffectBtn/AddEQPresetBtn.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/renderer/components/common/SoundEffectBtn/AudioConvolution.vue b/src/renderer/components/common/SoundEffectBtn/AudioConvolution.vue index de7f3e75..547da43b 100644 --- a/src/renderer/components/common/SoundEffectBtn/AudioConvolution.vue +++ b/src/renderer/components/common/SoundEffectBtn/AudioConvolution.vue @@ -27,13 +27,19 @@ +
+ {{ item.name }} + +
@@ -63,6 +87,7 @@ const handleUpdateSendGain = (value) => { display: flex; flex-flow: column nowrap; gap: 3px; + min-height: 0; } .convolution { display: flex; @@ -110,4 +135,11 @@ const handleUpdateSendGain = (value) => { color: var(--color-primary-font); } } +.saveList { + display: flex; + flex-flow: row wrap; + margin-top: 10px; + gap: 10px; +} + diff --git a/src/renderer/components/common/SoundEffectBtn/AudioPanner.vue b/src/renderer/components/common/SoundEffectBtn/AudioPanner.vue index f664b6f1..ee28f1a8 100644 --- a/src/renderer/components/common/SoundEffectBtn/AudioPanner.vue +++ b/src/renderer/components/common/SoundEffectBtn/AudioPanner.vue @@ -1,7 +1,7 @@ @@ -53,9 +53,19 @@ const handleUpdateSpeed = (value) => { diff --git a/src/renderer/components/common/SoundEffectBtn/index.vue b/src/renderer/components/common/SoundEffectBtn/index.vue index 6e3ac88f..fa67040d 100644 --- a/src/renderer/components/common/SoundEffectBtn/index.vue +++ b/src/renderer/components/common/SoundEffectBtn/index.vue @@ -1,22 +1,27 @@ diff --git a/src/renderer/plugins/player.ts b/src/renderer/plugins/player.ts index 0b4bfacd..6e93a610 100644 --- a/src/renderer/plugins/player.ts +++ b/src/renderer/plugins/player.ts @@ -7,21 +7,32 @@ let analyser: AnalyserNode export const freqs = [31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 16000] as const type Freqs = (typeof freqs)[number] let biquads: Map<`hz${Freqs}`, BiquadFilterNode> +export const freqsPreset = [ + { name: 'pop', hz31: 6, hz62: 5, hz125: -3, hz250: -2, hz500: 5, hz1000: 4, hz2000: -4, hz4000: -3, hz8000: 6, hz16000: 4 }, + { name: 'dance', hz31: 4, hz62: 3, hz125: -4, hz250: -6, hz500: 0, hz1000: 0, hz2000: 3, hz4000: 4, hz8000: 4, hz16000: 5 }, + { name: 'rock', hz31: 7, hz62: 6, hz125: 2, hz250: 1, hz500: -3, hz1000: -4, hz2000: 2, hz4000: 1, hz8000: 4, hz16000: 5 }, + { name: 'classical', hz31: 6, hz62: 7, hz125: 1, hz250: 2, hz500: -1, hz1000: 1, hz2000: -4, hz4000: -6, hz8000: -7, hz16000: -8 }, + { name: 'vocal', hz31: -5, hz62: -6, hz125: -4, hz250: -3, hz500: 3, hz1000: 4, hz2000: 5, hz4000: 4, hz8000: -3, hz16000: -3 }, + { name: 'slow', hz31: 5, hz62: 4, hz125: 2, hz250: 0, hz500: -2, hz1000: 0, hz2000: 3, hz4000: 6, hz8000: 7, hz16000: 8 }, + { name: 'electronic', hz31: 6, hz62: 5, hz125: 0, hz250: -5, hz500: -4, hz1000: 0, hz2000: 6, hz4000: 8, hz8000: 8, hz16000: 7 }, + { name: 'subwoofer', hz31: 8, hz62: 7, hz125: 5, hz250: 4, hz500: 0, hz1000: 0, hz2000: 0, hz4000: 0, hz8000: 0, hz16000: 0 }, + { name: 'soft', hz31: -5, hz62: -5, hz125: -4, hz250: -4, hz500: 3, hz1000: 2, hz2000: 4, hz4000: 4, hz8000: 0, hz16000: 0 }, +] as const export const convolutions = [ { name: 'telephone', mainGain: 0.0, sendGain: 3.0, source: 'filter-telephone.wav' }, // 电话 { name: 's2_r4_bd', mainGain: 1.8, sendGain: 0.9, source: 's2_r4_bd.wav' }, // 教堂 - { name: 's3_r1_bd', mainGain: 1.8, sendGain: 0.8, source: 's3_r1_bd.wav' }, - { name: 'matrix_1', mainGain: 1.5, sendGain: 0.9, source: 'matrix-reverb1.wav' }, - { name: 'matrix_2', mainGain: 1.3, sendGain: 1, source: 'matrix-reverb2.wav' }, { name: 'bright_hall', mainGain: 0.8, sendGain: 2.4, source: 'bright-hall.wav' }, { name: 'cinema_diningroom', mainGain: 0.6, sendGain: 2.3, source: 'cinema-diningroom.wav' }, { name: 'dining_living_true_stereo', mainGain: 0.6, sendGain: 1.8, source: 'dining-living-true-stereo.wav' }, { name: 'living_bedroom_leveled', mainGain: 0.6, sendGain: 2.1, source: 'living-bedroom-leveled.wav' }, { name: 'spreader50_65ms', mainGain: 1, sendGain: 2.5, source: 'spreader50-65ms.wav' }, - { name: 'spreader25_125ms', mainGain: 1, sendGain: 2.5, source: 'spreader25-125ms.wav' }, + // { name: 'spreader25_125ms', mainGain: 1, sendGain: 2.5, source: 'spreader25-125ms.wav' }, // { name: 'backslap', mainGain: 1.8, sendGain: 0.8, source: 'backslap1.wav' }, - { name: 'cardiod_35_10_spread', mainGain: 1.8, sendGain: 0.8, source: 'cardiod-35-10-spread.wav' }, - { name: 'tim_omni_35_10_magnetic', mainGain: 1.8, sendGain: 0.8, source: 'tim-omni-35-10-magnetic.wav' }, + { name: 's3_r1_bd', mainGain: 1.8, sendGain: 0.8, source: 's3_r1_bd.wav' }, + { name: 'matrix_1', mainGain: 1.5, sendGain: 0.9, source: 'matrix-reverb1.wav' }, + { name: 'matrix_2', mainGain: 1.3, sendGain: 1, source: 'matrix-reverb2.wav' }, + { name: 'cardiod_35_10_spread', mainGain: 1.8, sendGain: 0.6, source: 'cardiod-35-10-spread.wav' }, + { name: 'tim_omni_35_10_magnetic', mainGain: 1, sendGain: 0.2, source: 'tim-omni-35-10-magnetic.wav' }, // { name: 'spatialized', mainGain: 1.8, sendGain: 0.8, source: 'spatialized8.wav' }, // { name: 'zing_long_stereo', mainGain: 0.8, sendGain: 1.8, source: 'zing-long-stereo.wav' }, { name: 'feedback_spring', mainGain: 1.8, sendGain: 0.8, source: 'feedback-spring.wav' }, diff --git a/src/renderer/store/soundEffect.ts b/src/renderer/store/soundEffect.ts new file mode 100644 index 00000000..b807bb27 --- /dev/null +++ b/src/renderer/store/soundEffect.ts @@ -0,0 +1,56 @@ +import { reactive, toRaw } from '@common/utils/vueTools' +import { getUserSoundEffectConvolutionPresetList, getUserSoundEffectEQPresetList, saveUserSoundEffectConvolutionPresetList, saveUserSoundEffectEQPresetList } from '@renderer/utils/ipc' + +let userEqPresetList: LX.SoundEffect.EQPreset[] | null = null + +export const getUserEQPresetList = async() => { + if (userEqPresetList == null) { + userEqPresetList = reactive(await getUserSoundEffectEQPresetList()) + } + return userEqPresetList +} +export const saveUserEQPreset = async(preset: LX.SoundEffect.EQPreset) => { + if (userEqPresetList == null) { + userEqPresetList = reactive(await getUserSoundEffectEQPresetList()) + } + const target = userEqPresetList.find(p => p.id == preset.id) + if (target) Object.assign(target, preset) + else userEqPresetList.push(preset) + saveUserSoundEffectEQPresetList(toRaw(userEqPresetList)) +} +export const removeUserEQPreset = async(id: string) => { + if (userEqPresetList == null) { + userEqPresetList = reactive(await getUserSoundEffectEQPresetList()) + } + const index = userEqPresetList.findIndex(p => p.id == id) + if (index < 0) return + userEqPresetList.splice(index, 1) + saveUserSoundEffectEQPresetList(toRaw(userEqPresetList)) +} + + +let userConvolutionPresetList: LX.SoundEffect.ConvolutionPreset[] | null = null +export const getUserConvolutionPresetList = async() => { + if (userEqPresetList == null) { + userConvolutionPresetList = reactive(await getUserSoundEffectConvolutionPresetList()) + } + return userConvolutionPresetList +} +export const saveUserConvolutionPreset = async(preset: LX.SoundEffect.ConvolutionPreset) => { + if (userConvolutionPresetList == null) { + userConvolutionPresetList = reactive(await getUserSoundEffectConvolutionPresetList()) + } + const target = userConvolutionPresetList.find(p => p.id == preset.id) + if (target) Object.assign(target, preset) + else userConvolutionPresetList.push(preset) + saveUserSoundEffectConvolutionPresetList(toRaw(userConvolutionPresetList)) +} +export const removeUserConvolutionPreset = async(id: string) => { + if (userConvolutionPresetList == null) { + userConvolutionPresetList = reactive(await getUserSoundEffectConvolutionPresetList()) + } + const index = userConvolutionPresetList.findIndex(p => p.id == id) + if (index < 0) return + userConvolutionPresetList.splice(index, 1) + saveUserSoundEffectConvolutionPresetList(toRaw(userConvolutionPresetList)) +} diff --git a/src/renderer/types/common.d.ts b/src/renderer/types/common.d.ts index ae344a52..b80afb4c 100644 --- a/src/renderer/types/common.d.ts +++ b/src/renderer/types/common.d.ts @@ -13,3 +13,4 @@ import '@common/types/desktop_lyric' import '@common/types/ipc_renderer' import '@common/types/config_files' import '@common/types/music_metadata' +import '@common/types/sound_effect' diff --git a/src/renderer/utils/ipc.ts b/src/renderer/utils/ipc.ts index c66e455e..e345838a 100644 --- a/src/renderer/utils/ipc.ts +++ b/src/renderer/utils/ipc.ts @@ -291,6 +291,22 @@ export const getSystemFonts = async() => { }) } +export const getUserSoundEffectEQPresetList = async() => { + return await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_eq_preset) +} + +export const saveUserSoundEffectEQPresetList = (list: LX.SoundEffect.EQPreset[]) => { + rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_eq_preset, list) +} + +export const getUserSoundEffectConvolutionPresetList = async() => { + return await rendererInvoke(WIN_MAIN_RENDERER_EVENT_NAME.get_sound_effect_convolution_preset) +} + +export const saveUserSoundEffectConvolutionPresetList = (list: LX.SoundEffect.ConvolutionPreset[]) => { + rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.save_sound_effect_convolution_preset, list) +} + export const allHotKeys = markRaw({ local: [ diff --git a/src/static/medias/filters/spreader25-125ms.wav b/src/static/medias/filters/spreader25-125ms.wav deleted file mode 100644 index 37cc003a..00000000 Binary files a/src/static/medias/filters/spreader25-125ms.wav and /dev/null differ