File size: 1,618 Bytes
fba6023
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from __future__ import annotations

from fastapi import APIRouter, Request

from app.api.media import execute_operation
from app.core.response import SuccessResponse
from app.operations.compress import normalize_audio
from app.operations.concat import concat_audio
from app.operations.convert import convert_audio
from app.operations.extract_audio import (
    extract_audio,
    fade_audio,
    noise_reduction,
    remove_silence,
    set_volume,
)
from app.operations.merge import merge_audio
from app.operations.trim import trim_audio
from app.services.media_service import Operation

router = APIRouter(prefix="/v1/audio", tags=["audio"])


def operation_route(path: str, name: str, operation: Operation) -> None:
    async def endpoint(request: Request) -> SuccessResponse:
        return await execute_operation(request, name, operation)

    endpoint.__name__ = name.replace(".", "_")
    router.add_api_route(
        path, endpoint, methods=["POST"], response_model=SuccessResponse, name=name
    )


operation_route("/extract", "audio.extract", extract_audio)
operation_route("/convert", "audio.convert", convert_audio)
operation_route("/normalize", "audio.normalize", normalize_audio)
operation_route("/trim", "audio.trim", trim_audio)
operation_route("/merge", "audio.merge", merge_audio)
operation_route("/concat", "audio.concat", concat_audio)
operation_route("/fade", "audio.fade", fade_audio)
operation_route("/volume", "audio.volume", set_volume)
operation_route("/remove-silence", "audio.remove_silence", remove_silence)
operation_route("/noise-reduction", "audio.noise_reduction", noise_reduction)