server: implement wav/mp3 audio download

If set, will save audio transcription to disk.
MP3 conversion is on-request, but cached to disk as well only if it is successfull.

Closes #148
This commit is contained in:
2023-08-15 19:01:39 +02:00
committed by Mathieu Virbel
parent 290b552479
commit a809e5e734
6 changed files with 134 additions and 6 deletions

View File

@@ -7,12 +7,14 @@ from reflector.logger import logger
from aiortc import RTCPeerConnection, RTCSessionDescription, MediaStreamTrack
from json import loads, dumps
from enum import StrEnum
from pathlib import Path
import av
from reflector.processors import (
Pipeline,
AudioChunkerProcessor,
AudioMergeProcessor,
AudioTranscriptAutoProcessor,
AudioFileWriterProcessor,
TranscriptLinerProcessor,
TranscriptTopicDetectorProcessor,
TranscriptFinalSummaryProcessor,
@@ -64,7 +66,11 @@ class PipelineEvent(StrEnum):
async def rtc_offer_base(
params: RtcOffer, request: Request, event_callback=None, event_callback_args=None
params: RtcOffer,
request: Request,
event_callback=None,
event_callback_args=None,
audio_filename: Path | None = None,
):
# build an rtc session
offer = RTCSessionDescription(sdp=params.sdp, type=params.type)
@@ -151,14 +157,18 @@ async def rtc_offer_base(
# create a context for the whole rtc transaction
# add a customised logger to the context
ctx.pipeline = Pipeline(
processors = []
if audio_filename is not None:
processors += [AudioFileWriterProcessor(path=audio_filename)]
processors += [
AudioChunkerProcessor(),
AudioMergeProcessor(),
AudioTranscriptAutoProcessor.as_threaded(callback=on_transcript),
TranscriptLinerProcessor(),
TranscriptTopicDetectorProcessor.as_threaded(callback=on_topic),
TranscriptFinalSummaryProcessor.as_threaded(callback=on_final_summary),
)
]
ctx.pipeline = Pipeline(*processors)
# FIXME: warmup is not working well yet
# await ctx.pipeline.warmup()