Update audio.py

This commit is contained in:
DINMAY KUMAR BRAHMA 2025-01-01 21:11:23 +05:30 committed by GitHub
parent 7938de0f4a
commit 94b6fc22ea
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4,7 +4,6 @@ from io import BytesIO
import numpy as np import numpy as np
import soundfile as sf import soundfile as sf
import scipy.io.wavfile as wavfile
from loguru import logger from loguru import logger
@ -20,7 +19,7 @@ class AudioService:
Args: Args:
audio_data: Numpy array of audio samples audio_data: Numpy array of audio samples
sample_rate: Sample rate of the audio sample_rate: Sample rate of the audio
output_format: Target format (wav, mp3, etc.) output_format: Target format (wav, mp3, opus, flac, pcm)
Returns: Returns:
Bytes of the converted audio Bytes of the converted audio
@ -30,46 +29,32 @@ class AudioService:
try: try:
if output_format == "wav": if output_format == "wav":
logger.info("Writing to WAV format...") logger.info("Writing to WAV format...")
wavfile.write(buffer, sample_rate, audio_data) # Ensure audio_data is in int16 format for WAV
return buffer.getvalue() audio_data_wav = audio_data.astype(np.int16)
sf.write(buffer, audio_data_wav, sample_rate, format="WAV")
elif output_format == "mp3": elif output_format == "mp3":
# For MP3, we need to convert to WAV first
logger.info("Converting to MP3 format...") logger.info("Converting to MP3 format...")
wav_buffer = BytesIO() # soundfile can write MP3 if ffmpeg or libsox is installed
wavfile.write(wav_buffer, sample_rate, audio_data) sf.write(buffer, audio_data, sample_rate, format="MP3")
wav_buffer.seek(0)
# Convert WAV to MP3 using soundfile
buffer = BytesIO()
sf.write(buffer, audio_data, sample_rate, format="mp3")
return buffer.getvalue()
elif output_format == "opus": elif output_format == "opus":
logger.info("Converting to Opus format...") logger.info("Converting to Opus format...")
sf.write(buffer, audio_data, sample_rate, format="ogg", subtype="opus") sf.write(buffer, audio_data, sample_rate, format="OGG", subtype="OPUS")
return buffer.getvalue()
elif output_format == "flac": elif output_format == "flac":
logger.info("Converting to FLAC format...") logger.info("Converting to FLAC format...")
sf.write(buffer, audio_data, sample_rate, format="flac") sf.write(buffer, audio_data, sample_rate, format="FLAC")
return buffer.getvalue()
elif output_format == "aac":
raise ValueError(
"AAC format is not currently supported. Please use wav, mp3, opus, or flac."
)
elif output_format == "pcm": elif output_format == "pcm":
raise ValueError( logger.info("Extracting PCM data...")
"PCM format is not currently supported. Please use wav, mp3, opus, or flac." # Ensure audio_data is in int16 format for PCM
) audio_data_pcm = audio_data.astype(np.int16)
buffer.write(audio_data_pcm.tobytes())
else: else:
raise ValueError( raise ValueError(
f"Format {output_format} not supported. Supported formats are: wav, mp3, opus, flac." f"Format {output_format} not supported. Supported formats are: wav, mp3, opus, flac, pcm."
) )
buffer.seek(0)
return buffer.getvalue()
except Exception as e: except Exception as e:
logger.error(f"Error converting audio to {output_format}: {str(e)}") logger.error(f"Error converting audio to {output_format}: {str(e)}")
raise ValueError(f"Failed to convert audio to {output_format}: {str(e)}") raise ValueError(f"Failed to convert audio to {output_format}: {str(e)}")