- Loop: toggle via POST /api/media/loop → COMMAND_MEDIA_LOOP; gateway replays finished music track on natural end (queue untouched); status payload exposes loop flag; FE tombol Loop di music-player + mini-player. - Kualitas suara: music playback sekarang di-transcode sekali via ffmpeg ke OggOpus 48kHz stereo 192kbps dengan volume di-bake ke encode — menghindari double lossy encode (inlineVolume) yang bikin suara buram. Screen share tetap pakai jalur lama. - Backend: MediaState.loop, setLoop service, route + schema validation.
14 lines
388 B
TypeScript
14 lines
388 B
TypeScript
import { z } from "zod";
|
|
|
|
export const mediaQueueSchema = z.object({
|
|
source: z.string().min(1, "source is required"),
|
|
mode: z.enum(["music", "screen"]).default("music"),
|
|
});
|
|
|
|
export const mediaLoopSchema = z.object({
|
|
loop: z.boolean().default(false),
|
|
});
|
|
|
|
export type MediaQueueInput = z.infer<typeof mediaQueueSchema>;
|
|
export type MediaLoopInput = z.infer<typeof mediaLoopSchema>;
|