cringe sfx
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { createSharedComposable } from '@vueuse/core'
|
||||
import { Howl, Howler } from 'howler'
|
||||
import { Howl } from 'howler'
|
||||
|
||||
const CONNECTION_SOUNDS = Object.keys(import.meta.glob('@/../public/sfx/connection/*.ogg')).map(path => path.replace('../public', ''))
|
||||
|
||||
@@ -13,10 +13,20 @@ function hashStringToNumber(str: string, cap: number): number {
|
||||
return Math.abs(hash) % cap
|
||||
}
|
||||
|
||||
const oneShots: Howl[] = []
|
||||
|
||||
type SfxEvent = 'mic-on' | 'mic-off' | 'stream-on' | 'stream-off' | 'connection'
|
||||
|
||||
const EVENT_VOLUME: Record<SfxEvent, number> = {
|
||||
'mic-on': 0.2,
|
||||
'mic-off': 0.2,
|
||||
'stream-on': 0.03,
|
||||
'stream-off': 0.03,
|
||||
'connection': 0.1,
|
||||
}
|
||||
|
||||
export const useSfx = createSharedComposable(() => {
|
||||
async function play(src: string, volume = 0.2): Promise<void> {
|
||||
Howler.stop()
|
||||
|
||||
return new Promise((resolve) => {
|
||||
const howl = new Howl({
|
||||
src,
|
||||
@@ -31,13 +41,46 @@ export const useSfx = createSharedComposable(() => {
|
||||
})
|
||||
}
|
||||
|
||||
async function playOneShot(src: string, volume = 0.2): Promise<void> {
|
||||
for (const oneShot of oneShots) {
|
||||
oneShot.stop()
|
||||
}
|
||||
|
||||
oneShots.length = 0
|
||||
|
||||
return new Promise((resolve) => {
|
||||
const howl = new Howl({
|
||||
src,
|
||||
autoplay: true,
|
||||
loop: false,
|
||||
volume,
|
||||
})
|
||||
|
||||
oneShots.push(howl)
|
||||
|
||||
howl.on('end', () => {
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function playEvent(event: SfxEvent) {
|
||||
switch (event) {
|
||||
default:
|
||||
await playOneShot(`/sfx/${event}.ogg`, EVENT_VOLUME[event])
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
async function playRandomConnectionSound(seed: string) {
|
||||
await play('/sfx/on_trans.ogg', 0.03)
|
||||
await playEvent('stream-on')
|
||||
await play(CONNECTION_SOUNDS[hashStringToNumber(seed, CONNECTION_SOUNDS.length + 1)]!, 0.1)
|
||||
}
|
||||
|
||||
return {
|
||||
playOneShot,
|
||||
play,
|
||||
playRandomConnectionSound,
|
||||
playEvent,
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user