30db513d52
CI/CD Pipeline / Build Staging API Image (push) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Failing after 0s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
/**
|
||
* BGM 预设音乐 API
|
||
* 对接后端 BGM 混音能力:预设列表查询(按风格分类 + 关键词搜索)
|
||
*/
|
||
import apiClient from "./client"
|
||
|
||
/* ──────────── 类型 ──────────── */
|
||
|
||
/** BGM 风格分类 */
|
||
export type BgmCategory = "轻快" | "治愈" | "科技" | "电商"
|
||
|
||
/** BGM 预设项 */
|
||
export interface BgmPreset {
|
||
id: string
|
||
name: string
|
||
category: BgmCategory
|
||
/** 音频文件 URL */
|
||
url: string
|
||
/** 时长(秒) */
|
||
duration: number
|
||
/** 关键词标签 */
|
||
tags: string[]
|
||
/** 封面图 URL */
|
||
cover_url?: string
|
||
}
|
||
|
||
/** BGM 预设列表查询参数 */
|
||
export interface BgmPresetsQuery {
|
||
category?: BgmCategory | string
|
||
keyword?: string
|
||
}
|
||
|
||
/** BGM 混音配置(嵌入模板) */
|
||
export interface BgmMixConfig {
|
||
/** 是否启用 BGM */
|
||
enabled: boolean
|
||
/** 选中的 BGM ID */
|
||
music_id: string
|
||
/** BGM 音量 0-100 */
|
||
volume: number
|
||
/** 淡入时长(秒) 0-3 */
|
||
fade_in: number
|
||
/** 淡出时长(秒) 0-3 */
|
||
fade_out: number
|
||
/** 人声闪避(sidechain) */
|
||
voice_dodge: boolean
|
||
}
|
||
|
||
/** 默认 BGM 混音配置 */
|
||
export const DEFAULT_BGM_MIX_CONFIG: BgmMixConfig = {
|
||
enabled: false,
|
||
music_id: "",
|
||
volume: 50,
|
||
fade_in: 0.5,
|
||
fade_out: 0.5,
|
||
voice_dodge: true,
|
||
}
|
||
|
||
/* ──────────── API ──────────── */
|
||
|
||
/** 获取 BGM 预设列表 */
|
||
export const getBgmPresets = async (params?: BgmPresetsQuery): Promise<BgmPreset[]> => {
|
||
const searchParams: Record<string, string> = {}
|
||
if (params?.category) searchParams.category = params.category
|
||
if (params?.keyword) searchParams.keyword = params.keyword
|
||
const res = await apiClient.get("/bgm/presets", { params: searchParams })
|
||
return res.data?.data ?? res.data ?? []
|
||
}
|