from banban.service.message_audio_storage import MessageAudioStorageService from utils.logger import session_logger message_audio_storage_service = MessageAudioStorageService() # async def save_audio_file(audio_data: bytes, device_id: str) -> str: # """Upload device audio to COS and return its object key.""" # try: # stored = await message_audio_storage_service.upload_audio( # device_id=device_id, # content=audio_data, # ) # session_logger.info(device_id, "audio", f"audio uploaded to COS: {stored.file_key}") # return stored.file_key # except Exception as e: # session_logger.error(device_id, "audio", f"failed to store audio: {e}", exc_info=True) # raise import os import uuid from config import settings from utils.logger import session_logger # from utils.audio_denoiser import reduce_background_noise async def save_audio_file(audio_data: bytes, device_id: str) -> str: """ 保存音频数据到 assets/audio 目录 Args: audio_data: 音频二进制数据 device_id: 设备ID Returns: 音频文件的相对路径 """ try: audio_dir = os.path.join(settings.assets_dir, "audio") os.makedirs(audio_dir, exist_ok=True) filename = f"{device_id}_{uuid.uuid4().hex[:8]}.mp3" filepath = os.path.join(audio_dir, filename) with open(filepath, 'wb') as f: f.write(audio_data) # relative_path = f"assets/audio/{filename}" session_logger.info(device_id, "audio", f"音频文件已保存: {filepath}") # reduce_background_noise(filepath, relative_path,noise_path='assets/audio/noise_sample.wav',normalize_volume=True) return filepath except Exception as e: session_logger.error(device_id, "audio", f"保存音频文件时出错: {e}", exc_info=True) raise