mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-21 12:51:17 -05:00
76 lines
1.5 KiB
TypeScript
76 lines
1.5 KiB
TypeScript
import * as vscode from "vscode"
|
|
import * as path from "path"
|
|
|
|
/**
|
|
* Minimum interval (in milliseconds) to prevent continuous playback
|
|
*/
|
|
const MIN_PLAY_INTERVAL = 500
|
|
|
|
/**
|
|
* Timestamp of when sound was last played
|
|
*/
|
|
let lastPlayedTime = 0
|
|
|
|
/**
|
|
* Determine if a file is a WAV file
|
|
* @param filepath string
|
|
* @returns boolean
|
|
*/
|
|
export const isWAV = (filepath: string): boolean => {
|
|
return path.extname(filepath).toLowerCase() === ".wav"
|
|
}
|
|
|
|
let isSoundEnabled = false
|
|
let volume = 0.5
|
|
|
|
/**
|
|
* Set sound configuration
|
|
* @param enabled boolean
|
|
*/
|
|
export const setSoundEnabled = (enabled: boolean): void => {
|
|
isSoundEnabled = enabled
|
|
}
|
|
|
|
/**
|
|
* Set sound volume
|
|
* @param volume number
|
|
*/
|
|
export const setSoundVolume = (newVolume: number): void => {
|
|
volume = newVolume
|
|
}
|
|
|
|
/**
|
|
* Play a sound file
|
|
* @param filepath string
|
|
* @return void
|
|
*/
|
|
export const playSound = (filepath: string): void => {
|
|
try {
|
|
if (!isSoundEnabled) {
|
|
return
|
|
}
|
|
|
|
if (!filepath) {
|
|
return
|
|
}
|
|
|
|
if (!isWAV(filepath)) {
|
|
throw new Error("Only wav files are supported.")
|
|
}
|
|
|
|
const currentTime = Date.now()
|
|
if (currentTime - lastPlayedTime < MIN_PLAY_INTERVAL) {
|
|
return // Skip playback within minimum interval to prevent continuous playback
|
|
}
|
|
|
|
const sound = require("sound-play")
|
|
sound.play(filepath, volume).catch(() => {
|
|
throw new Error("Failed to play sound effect")
|
|
})
|
|
|
|
lastPlayedTime = currentTime
|
|
} catch (error: any) {
|
|
vscode.window.showErrorMessage(error.message)
|
|
}
|
|
}
|