{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "knife-slice",
  "type": "registry:block",
  "title": "Knife Slice",
  "author": "Kenney <https://kenney.nl>",
  "description": "A sharp, quick slicing sound, perfect for melee attacks, swift UI transitions, or an impactful swipe gesture in a game or app.",
  "files": [
    {
      "path": "registry/soundcn/sounds/knife-slice/knife-slice.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const knifeSliceSound: SoundAsset = {\n  name: \"knife-slice\",\n  dataUri: \"data:audio/mpeg;base64,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L9YUyXB8LET1ou47/mTlOj309Puo20NVNI1K6P+BTKoBgeLp8eltCcPm11EBSTjJUm6TjKEvTWyWuktkb+hdG7s5y3b+72bZ61jvTJhEoUJlEmF+Z723eLNUropsxmL3zKft39DtYiFCBVsXg8JbOrUSVqNDeKRCFSpMt6pOGZQcqEJMUZmyLONkDGD/+1LEhAAKxK0QB5kjwRQQY2SQmSA4JjQ0QmGChQCMNJcplJoXlW39/2//5xbEOa30fXLYwCpFagCB0EB3DoZOdRQkGT0WpQTQsJzgZQTYFpJWWqsWKFQpdRjFTo8Aw8wXQts0CpBRUywC4obbc/vv+hq6+uiMm9NB3rtR7MRaRcGVrBUEplFqBoSZqXGDChKCoCPHgk/xLKjO09g0SrlRj8Gkfa71Hp1bqthYcDRU7lajyg6Vd/ERXzs788C1TEFNRTMuMTAwVVVVVVVVVVVVVf/7UsSUA4kQlxImDMlBFw5iAYYMIFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxKqDCQhnECYkZwD1hSDIYwyQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=\",\n  duration: 0.600,\n  format: \"mp3\",\n  license: \"CC0\",\n  author: \"Kenney\",\n};\n",
      "type": "registry:lib"
    },
    {
      "path": "registry/soundcn/lib/sound-types.ts",
      "content": "export interface SoundAsset {\r\n  /** Unique identifier for the sound */\r\n  name: string;\r\n  /** Base64-encoded data URI (data:audio/mpeg;base64,...) */\r\n  dataUri: string;\r\n  /** Duration in seconds */\r\n  duration: number;\r\n  /** Audio format */\r\n  format: \"mp3\" | \"wav\" | \"ogg\";\r\n  /** License identifier */\r\n  license: \"CC0\" | \"OGA-BY\" | \"MIT\";\r\n  /** Original author/creator */\r\n  author: string;\r\n}\r\n\r\nexport interface UseSoundOptions {\r\n  /** Volume level from 0 to 1. Default: 1 */\r\n  volume?: number;\r\n  /** Playback speed multiplier. Default: 1 */\r\n  playbackRate?: number;\r\n  /** If true, calling play() stops current playback first. Default: false */\r\n  interrupt?: boolean;\r\n  /** If false, play() does nothing. Useful for user preferences. Default: true */\r\n  soundEnabled?: boolean;\r\n  /** Called when playback starts */\r\n  onPlay?: () => void;\r\n  /** Called when playback ends naturally */\r\n  onEnd?: () => void;\r\n  /** Called when pause() is called */\r\n  onPause?: () => void;\r\n  /** Called when stop() is called */\r\n  onStop?: () => void;\r\n}\r\n\r\nexport type PlayFunction = (overrides?: {\r\n  volume?: number;\r\n  playbackRate?: number;\r\n}) => void;\r\n\r\nexport interface SoundControls {\r\n  stop: () => void;\r\n  pause: () => void;\r\n  isPlaying: boolean;\r\n  duration: number | null;\r\n  sound: SoundAsset;\r\n}\r\n\r\nexport type UseSoundReturn = readonly [PlayFunction, SoundControls];\r\n",
      "type": "registry:lib"
    },
    {
      "path": "registry/soundcn/lib/sound-engine.ts",
      "content": "let audioContext: AudioContext | null = null;\nconst bufferCache = new Map<string, AudioBuffer>();\n\nexport function getAudioContext(): AudioContext {\n  if (!audioContext) {\n    audioContext = new AudioContext();\n  }\n  return audioContext;\n}\n\nexport async function decodeAudioData(dataUri: string): Promise<AudioBuffer> {\n  const cached = bufferCache.get(dataUri);\n  if (cached) return cached;\n\n  const ctx = getAudioContext();\n  const base64 = dataUri.split(\",\")[1];\n  const binaryString = atob(base64);\n  const bytes = new Uint8Array(binaryString.length);\n  for (let i = 0; i < binaryString.length; i++) {\n    bytes[i] = binaryString.charCodeAt(i);\n  }\n\n  const audioBuffer = await ctx.decodeAudioData(bytes.buffer.slice(0));\n  bufferCache.set(dataUri, audioBuffer);\n  return audioBuffer;\n}\n\nexport interface PlaySoundOptions {\n  volume?: number;\n  playbackRate?: number;\n  onEnd?: () => void;\n}\n\nexport interface SoundPlayback {\n  stop: () => void;\n}\n\nexport async function playSound(\n  dataUri: string,\n  options: PlaySoundOptions = {}\n): Promise<SoundPlayback> {\n  const { volume = 1, playbackRate = 1, onEnd } = options;\n  const ctx = getAudioContext();\n  if (ctx.state === \"suspended\") {\n    await ctx.resume();\n  }\n\n  const buffer = await decodeAudioData(dataUri);\n  const source = ctx.createBufferSource();\n  const gain = ctx.createGain();\n\n  source.buffer = buffer;\n  source.playbackRate.value = playbackRate;\n  gain.gain.value = volume;\n\n  source.connect(gain);\n  gain.connect(ctx.destination);\n\n  source.onended = () => {\n    onEnd?.();\n  };\n\n  source.start(0);\n\n  return {\n    stop: () => {\n      try {\n        source.stop();\n      } catch {\n        // No-op if already stopped.\n      }\n    },\n  };\n}\n",
      "type": "registry:lib"
    }
  ],
  "meta": {
    "duration": 0.6,
    "format": "mp3",
    "sizeKb": 5,
    "license": "CC0",
    "tags": [
      "knife",
      "slice"
    ],
    "keywords": [
      "knife",
      "slice",
      "cut",
      "sharp",
      "quick",
      "swipe",
      "slash",
      "melee",
      "attack",
      "game",
      "transition",
      "gesture",
      "impactful",
      "aggressive",
      "short",
      "action",
      "fast",
      "whoosh",
      "foley"
    ]
  },
  "categories": [
    "knife"
  ]
}