mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-10-26 19:14:12 +00:00 
			
		
		
		
	サウンド再生方法の変更に追従できていなかった所を修正 (#12368)
Co-authored-by: osamu <46447427+sam-osamu@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									481bca4cf2
								
							
						
					
					
						commit
						4b13179ff9
					
				
					 3 changed files with 22 additions and 13 deletions
				
			
		|  | @ -20,6 +20,7 @@ | |||
| 
 | ||||
| ### Client | ||||
| - fix: 「設定のバックアップ」で一部の項目がバックアップに含まれていなかった問題を修正 | ||||
| - Fix: ウィジェットのジョブキューにて音声の発音方法変更に追従できていなかったのを修正 #12367 | ||||
| 
 | ||||
| ### Server | ||||
| - Fix: 時間経過により無効化されたアンテナを再有効化したとき、サーバ再起動までその状況が反映されないのを修正 #12303 | ||||
|  |  | |||
|  | @ -61,7 +61,7 @@ export const soundsTypes = [ | |||
| 	'noizenecio/kick_gaba7', | ||||
| ] as const; | ||||
| 
 | ||||
| export async function getAudio(file: string, useCache = true) { | ||||
| export async function loadAudio(file: string, useCache = true) { | ||||
| 	if (useCache && cache.has(file)) { | ||||
| 		return cache.get(file)!; | ||||
| 	} | ||||
|  | @ -77,12 +77,6 @@ export async function getAudio(file: string, useCache = true) { | |||
| 	return audioBuffer; | ||||
| } | ||||
| 
 | ||||
| export function setVolume(audio: HTMLAudioElement, volume: number): HTMLAudioElement { | ||||
| 	const masterVolume = defaultStore.state.sound_masterVolume; | ||||
| 	audio.volume = masterVolume - ((1 - volume) * masterVolume); | ||||
| 	return audio; | ||||
| } | ||||
| 
 | ||||
| export function play(type: 'noteMy' | 'note' | 'antenna' | 'channel' | 'notification') { | ||||
| 	const sound = defaultStore.state[`sound_${type}`]; | ||||
| 	if (_DEV_) console.log('play', type, sound); | ||||
|  | @ -91,16 +85,22 @@ export function play(type: 'noteMy' | 'note' | 'antenna' | 'channel' | 'notifica | |||
| } | ||||
| 
 | ||||
| export async function playFile(file: string, volume: number) { | ||||
| 	const buffer = await loadAudio(file); | ||||
| 	createSourceNode(buffer, volume)?.start(); | ||||
| } | ||||
| 
 | ||||
| export function createSourceNode(buffer: AudioBuffer, volume: number) : AudioBufferSourceNode | null { | ||||
| 	const masterVolume = defaultStore.state.sound_masterVolume; | ||||
| 	if (masterVolume === 0 || volume === 0) { | ||||
| 		return; | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	const gainNode = ctx.createGain(); | ||||
| 	gainNode.gain.value = masterVolume * volume; | ||||
| 
 | ||||
| 	const soundSource = ctx.createBufferSource(); | ||||
| 	soundSource.buffer = await getAudio(file); | ||||
| 	soundSource.buffer = buffer; | ||||
| 	soundSource.connect(gainNode).connect(ctx.destination); | ||||
| 	soundSource.start(); | ||||
| 
 | ||||
| 	return soundSource; | ||||
| } | ||||
|  |  | |||
|  | @ -99,7 +99,10 @@ const current = reactive({ | |||
| 	}, | ||||
| }); | ||||
| const prev = reactive({} as typeof current); | ||||
| const jammedSound = sound.setVolume(sound.getAudio('syuilo/queue-jammed'), 1); | ||||
| let jammedAudioBuffer: AudioBuffer | null = $ref(null); | ||||
| let jammedSoundNodePlaying: boolean = $ref(false); | ||||
| 
 | ||||
| sound.loadAudio('syuilo/queue-jammed').then(buf => jammedAudioBuffer = buf); | ||||
| 
 | ||||
| for (const domain of ['inbox', 'deliver']) { | ||||
| 	prev[domain] = deepClone(current[domain]); | ||||
|  | @ -113,8 +116,13 @@ const onStats = (stats) => { | |||
| 		current[domain].waiting = stats[domain].waiting; | ||||
| 		current[domain].delayed = stats[domain].delayed; | ||||
| 
 | ||||
| 		if (current[domain].waiting > 0 && widgetProps.sound && jammedSound.paused) { | ||||
| 			jammedSound.play(); | ||||
| 		if (current[domain].waiting > 0 && widgetProps.sound && jammedAudioBuffer && !jammedSoundNodePlaying) { | ||||
| 			const soundNode = sound.createSourceNode(jammedAudioBuffer, 1); | ||||
| 			if (soundNode) { | ||||
| 				jammedSoundNodePlaying = true; | ||||
| 				soundNode.onended = () => jammedSoundNodePlaying = false; | ||||
| 				soundNode.start(); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| }; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue