From 5bdae9f6d03bbb1fc1cf341b2e6b3e5d15d03fad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sun, 26 Nov 2023 13:04:44 +0900 Subject: [PATCH] =?UTF-8?q?enhance(frontend):=20=E3=83=AA=E3=82=A2?= =?UTF-8?q?=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E9=81=B8=E6=8A=9E=E6=99=82?= =?UTF-8?q?=E3=81=AB=E9=9F=B3=E3=82=92=E6=B5=81=E3=81=9B=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=20(#12441)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * (add) リアクション選択時に音を鳴らせるように * Update Changelog * tweak sound * tweak sound --------- Co-authored-by: syuilo --- CHANGELOG.md | 1 + locales/index.d.ts | 1 + locales/ja-JP.yml | 1 + .../frontend/assets/sounds/syuilo/bubble1.mp3 | Bin 0 -> 19328 bytes .../frontend/assets/sounds/syuilo/bubble2.mp3 | Bin 0 -> 19328 bytes packages/frontend/src/components/MkNote.vue | 5 +++++ .../frontend/src/components/MkNoteDetailed.vue | 5 +++++ .../components/MkReactionsViewer.reaction.vue | 7 +++++++ packages/frontend/src/pages/settings/sounds.vue | 3 ++- packages/frontend/src/scripts/sound.ts | 4 +++- packages/frontend/src/store.ts | 4 ++++ 11 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 packages/frontend/assets/sounds/syuilo/bubble1.mp3 create mode 100644 packages/frontend/assets/sounds/syuilo/bubble2.mp3 diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf6709117..7f02d462b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ ### Client - Enhance: 絵文字のオートコンプリート機能強化 #12364 - Enhance: ユーザーのRawデータを表示するページが復活 +- Enhance: リアクション選択時に音を鳴らせるように - fix: 「設定のバックアップ」で一部の項目がバックアップに含まれていなかった問題を修正 - Fix: ウィジェットのジョブキューにて音声の発音方法変更に追従できていなかったのを修正 #12367 - Fix: コードエディタが正しく表示されない問題を修正 diff --git a/locales/index.d.ts b/locales/index.d.ts index 042c7750e1..6e9fe311f1 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1943,6 +1943,7 @@ export interface Locale { "notification": string; "antenna": string; "channel": string; + "reaction": string; }; "_ago": { "future": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 58e0dd0b19..0b051b6190 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1848,6 +1848,7 @@ _sfx: notification: "通知" antenna: "アンテナ受信" channel: "チャンネル通知" + reaction: "リアクション選択時" _ago: future: "未来" diff --git a/packages/frontend/assets/sounds/syuilo/bubble1.mp3 b/packages/frontend/assets/sounds/syuilo/bubble1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..05b8ef8b10056c66a6e1a9b401d86530ecdc3296 GIT binary patch literal 19328 zcmeZtF=k-^fwB;%0AB_M26hGpWRV1_mAm24+u?9EvC}0|RqOYHmS3 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 literal 0 HcmV?d00001 diff --git a/packages/frontend/assets/sounds/syuilo/bubble2.mp3 b/packages/frontend/assets/sounds/syuilo/bubble2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8b4f8df6e9c17daec54da10bb50e790194c767d2 GIT binary patch literal 19328 zcmeZtF=k-^fwB;%0AB_M26hGpWRV1_mAm24+u?9EvC}0|RqOYHmS3 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 literal 0 HcmV?d00001 diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 6349df2e30..d047495dc9 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -163,6 +163,7 @@ import { focusPrev, focusNext } from '@/scripts/focus.js'; import { checkWordMute } from '@/scripts/check-word-mute.js'; import { userPage } from '@/filters/user.js'; import * as os from '@/os.js'; +import * as sound from '@/scripts/sound.js'; import { defaultStore, noteViewInterruptors } from '@/store.js'; import { reactionPicker } from '@/scripts/reaction-picker.js'; import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm.js'; @@ -336,6 +337,8 @@ function react(viaKeyboard = false): void { pleaseLogin(); showMovedDialog(); if (appearNote.reactionAcceptance === 'likeOnly') { + sound.play('reaction'); + if (props.mock) { return; } @@ -354,6 +357,8 @@ function react(viaKeyboard = false): void { } else { blur(); reactionPicker.show(reactButton.value, reaction => { + sound.play('reaction'); + if (props.mock) { emit('reaction', reaction); return; diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index d1bc3f676f..d8089ac36f 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -210,6 +210,7 @@ import { checkWordMute } from '@/scripts/check-word-mute.js'; import { userPage } from '@/filters/user.js'; import { notePage } from '@/filters/note.js'; import * as os from '@/os.js'; +import * as sound from '@/scripts/sound.js'; import { defaultStore, noteViewInterruptors } from '@/store.js'; import { reactionPicker } from '@/scripts/reaction-picker.js'; import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm.js'; @@ -369,6 +370,8 @@ function react(viaKeyboard = false): void { pleaseLogin(); showMovedDialog(); if (appearNote.reactionAcceptance === 'likeOnly') { + sound.play('reaction'); + os.api('notes/reactions/create', { noteId: appearNote.id, reaction: '❤️', @@ -383,6 +386,8 @@ function react(viaKeyboard = false): void { } else { blur(); reactionPicker.show(reactButton.value, reaction => { + sound.play('reaction'); + os.api('notes/reactions/create', { noteId: appearNote.id, reaction: reaction, diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue index 9a107c3674..65a5c2374e 100644 --- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue +++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue @@ -28,6 +28,7 @@ import MkReactionEffect from '@/components/MkReactionEffect.vue'; import { claimAchievement } from '@/scripts/achievements.js'; import { defaultStore } from '@/store.js'; import { i18n } from '@/i18n.js'; +import * as sound from '@/scripts/sound.js'; const props = defineProps<{ reaction: string; @@ -59,6 +60,10 @@ async function toggleReaction() { }); if (confirm.canceled) return; + if (oldReaction !== props.reaction) { + sound.play('reaction'); + } + if (mock) { emit('reactionToggled', props.reaction, (props.count - 1)); return; @@ -75,6 +80,8 @@ async function toggleReaction() { } }); } else { + sound.play('reaction'); + if (mock) { emit('reactionToggled', props.reaction, (props.count + 1)); return; diff --git a/packages/frontend/src/pages/settings/sounds.vue b/packages/frontend/src/pages/settings/sounds.vue index cd1707a594..244bb1e0e2 100644 --- a/packages/frontend/src/pages/settings/sounds.vue +++ b/packages/frontend/src/pages/settings/sounds.vue @@ -38,7 +38,7 @@ import { defaultStore } from '@/store.js'; const masterVolume = computed(defaultStore.makeGetterSetter('sound_masterVolume')); -const soundsKeys = ['note', 'noteMy', 'notification', 'antenna', 'channel'] as const; +const soundsKeys = ['note', 'noteMy', 'notification', 'antenna', 'channel', 'reaction'] as const; const sounds = ref>>({ note: defaultStore.reactiveState.sound_note, @@ -46,6 +46,7 @@ const sounds = ref>>({ notification: defaultStore.reactiveState.sound_notification, antenna: defaultStore.reactiveState.sound_antenna, channel: defaultStore.reactiveState.sound_channel, + reaction: defaultStore.reactiveState.sound_reaction, }); async function updated(type: keyof typeof sounds.value, sound) { diff --git a/packages/frontend/src/scripts/sound.ts b/packages/frontend/src/scripts/sound.ts index 2b604bd98a..4d7ef9bdee 100644 --- a/packages/frontend/src/scripts/sound.ts +++ b/packages/frontend/src/scripts/sound.ts @@ -38,6 +38,8 @@ export const soundsTypes = [ 'syuilo/waon', 'syuilo/popo', 'syuilo/triple', + 'syuilo/bubble1', + 'syuilo/bubble2', 'syuilo/poi1', 'syuilo/poi2', 'syuilo/pirori', @@ -77,7 +79,7 @@ export async function loadAudio(file: string, useCache = true) { return audioBuffer; } -export function play(type: 'noteMy' | 'note' | 'antenna' | 'channel' | 'notification') { +export function play(type: 'noteMy' | 'note' | 'antenna' | 'channel' | 'notification' | 'reaction') { const sound = defaultStore.state[`sound_${type}`]; if (_DEV_) console.log('play', type, sound); if (sound.type == null) return; diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index 12660e9e8d..f2ed4e7c0b 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -411,6 +411,10 @@ export const defaultStore = markRaw(new Storage('base', { where: 'device', default: { type: 'syuilo/square-pico', volume: 1 }, }, + sound_reaction: { + where: 'device', + default: { type: 'syuilo/bubble2', volume: 1 }, + }, })); // TODO: 他のタブと永続化されたstateを同期