diff --git a/api/api/tasks.py b/api/api/tasks.py index ba7ac41..c50f6a1 100644 --- a/api/api/tasks.py +++ b/api/api/tasks.py @@ -9,6 +9,8 @@ from freqsplit.preprocessing.trim import trim_audio from freqsplit.preprocessing.resample import resample from freqsplit.postprocessing.audio_writer import export_audio from freqsplit.separation.demucs_wrapper import separate_audio_with_demucs +from freqsplit.refinement.deepfilternet_wrapper import noisereduce + @shared_task 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 _, 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 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}") return False - \ No newline at end of file + +@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 \ No newline at end of file diff --git a/api/api/views.py b/api/api/views.py index 29e18e9..482d59f 100644 --- a/api/api/views.py +++ b/api/api/views.py @@ -9,6 +9,7 @@ from .tasks import normalize_audio_task from .tasks import trim_audio_task from .tasks import resample_audio_task from .tasks import music_separation_task +from .tasks import noisereduce_task from freqsplit.input.format_checker import is_supported_format 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) else: 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) \ No newline at end of file diff --git a/api/backend/urls.py b/api/backend/urls.py index e8cd6c5..a37ad56 100644 --- a/api/backend/urls.py +++ b/api/backend/urls.py @@ -21,6 +21,7 @@ from api.views import normalize_audio from api.views import trim_audio from api.views import resample_audio from api.views import separate_music +from api.views import noisereduce urlpatterns = [ path('admin/', admin.site.urls), @@ -28,5 +29,6 @@ urlpatterns = [ path('api/normalize', normalize_audio, name="normalize_audio"), path('api/trim', trim_audio, name='trim_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") ]