endpoint /api/noisereduce, params: file_uuid
- Add endpoint /api/noisereduce, to reduce background noise. - TODO: Split audio into chunks to prevent OOM issues.
This commit is contained in:
+16
-2
@@ -9,6 +9,8 @@ from freqsplit.preprocessing.trim import trim_audio
|
|||||||
from freqsplit.preprocessing.resample import resample
|
from freqsplit.preprocessing.resample import resample
|
||||||
from freqsplit.postprocessing.audio_writer import export_audio
|
from freqsplit.postprocessing.audio_writer import export_audio
|
||||||
from freqsplit.separation.demucs_wrapper import separate_audio_with_demucs
|
from freqsplit.separation.demucs_wrapper import separate_audio_with_demucs
|
||||||
|
from freqsplit.refinement.deepfilternet_wrapper import noisereduce
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def save_and_classify(file_path, file_content):
|
def save_and_classify(file_path, file_content):
|
||||||
@@ -18,7 +20,7 @@ def save_and_classify(file_path, file_content):
|
|||||||
|
|
||||||
# Read the saved audio file
|
# Read the saved audio file
|
||||||
_, org_sr = read_audio(file_path) # Get original sampling rate
|
_, org_sr = read_audio(file_path) # Get original sampling rate
|
||||||
waveform, sr = read_audio(file_path, 16000, mono=True)
|
waveform, sr = read_audio(file_path, 32000, mono=True)
|
||||||
|
|
||||||
# Classify the audio
|
# Classify the audio
|
||||||
audio_class = classify_audio(waveform, sr)
|
audio_class = classify_audio(waveform, sr)
|
||||||
@@ -111,4 +113,16 @@ def music_separation_task(file_path):
|
|||||||
raise RuntimeError(f"Music source separation task failed: {e}")
|
raise RuntimeError(f"Music source separation task failed: {e}")
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@shared_task
|
||||||
|
def noisereduce_task(file_path):
|
||||||
|
"""Celery task to remov noise from audio"""
|
||||||
|
file_path = Path(file_path)
|
||||||
|
|
||||||
|
# Run noisereduction
|
||||||
|
try:
|
||||||
|
noisereduce(file_path, file_path)
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
raise RuntimeError(f"Noise removal from audio failed")
|
||||||
|
return False
|
||||||
@@ -9,6 +9,7 @@ from .tasks import normalize_audio_task
|
|||||||
from .tasks import trim_audio_task
|
from .tasks import trim_audio_task
|
||||||
from .tasks import resample_audio_task
|
from .tasks import resample_audio_task
|
||||||
from .tasks import music_separation_task
|
from .tasks import music_separation_task
|
||||||
|
from .tasks import noisereduce_task
|
||||||
from freqsplit.input.format_checker import is_supported_format
|
from freqsplit.input.format_checker import is_supported_format
|
||||||
|
|
||||||
UPLOAD_DIR = "/tmp/freqsplit"
|
UPLOAD_DIR = "/tmp/freqsplit"
|
||||||
@@ -122,3 +123,19 @@ def separate_music(request):
|
|||||||
return Response({"message": f"Audio separated into sources successfully"}, status=status.HTTP_200_OK)
|
return Response({"message": f"Audio separated into sources successfully"}, status=status.HTTP_200_OK)
|
||||||
else:
|
else:
|
||||||
return Response({"error": "Failed to source separate audio"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
return Response({"error": "Failed to source separate audio"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
|
|
||||||
|
# Endpoint to reduce noise from audio
|
||||||
|
@api_view(['POST'])
|
||||||
|
def noisereduce(request):
|
||||||
|
"""Handles the reduction of noise from audio"""
|
||||||
|
stat, result, status_code = get_audio_file_path(request, UPLOAD_DIR)
|
||||||
|
if stat == False:
|
||||||
|
return Response({"error": result}, status=status_code)
|
||||||
|
|
||||||
|
# Call Celery task synchronously
|
||||||
|
task = noisereduce_task.apply(args=(result,))
|
||||||
|
|
||||||
|
if task.get():
|
||||||
|
return Response({"message": f"Removed noise from audio successfully"}, status=status.HTTP_200_OK)
|
||||||
|
else:
|
||||||
|
return Response({"error": "Failed to remove noise from audio"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
+3
-1
@@ -21,6 +21,7 @@ from api.views import normalize_audio
|
|||||||
from api.views import trim_audio
|
from api.views import trim_audio
|
||||||
from api.views import resample_audio
|
from api.views import resample_audio
|
||||||
from api.views import separate_music
|
from api.views import separate_music
|
||||||
|
from api.views import noisereduce
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
@@ -28,5 +29,6 @@ urlpatterns = [
|
|||||||
path('api/normalize', normalize_audio, name="normalize_audio"),
|
path('api/normalize', normalize_audio, name="normalize_audio"),
|
||||||
path('api/trim', trim_audio, name='trim_audio'),
|
path('api/trim', trim_audio, name='trim_audio'),
|
||||||
path('api/resample', resample_audio, name='resample_audio'),
|
path('api/resample', resample_audio, name='resample_audio'),
|
||||||
path('api/separate', separate_music, name="separate_music")
|
path('api/separate', separate_music, name="separate_music"),
|
||||||
|
path('api/noisereduce', noisereduce, name="noisreduce")
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user