63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
from banban.service.message_audio_storage import StoredMessageAudio, message_audio_storage_service
|
|
from utils.logger import session_logger
|
|
|
|
|
|
async def upload_message_audio(
|
|
audio_data: bytes,
|
|
device_id: str,
|
|
*,
|
|
content_type: str = "audio/mpeg",
|
|
extension: str = "mp3",
|
|
) -> StoredMessageAudio:
|
|
"""Upload message audio to COS and return its storage metadata."""
|
|
try:
|
|
stored = await message_audio_storage_service.upload_audio(
|
|
device_id=device_id,
|
|
content=audio_data,
|
|
content_type=content_type,
|
|
extension=extension,
|
|
)
|
|
session_logger.info(device_id, "audio", f"audio uploaded to COS: {stored.file_key}")
|
|
return stored
|
|
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
|