|
|
from ninja import NinjaAPI, File
|
|
|
from ninja.files import UploadedFile
|
|
|
from django.http import HttpResponse
|
|
|
from .midi_utils import process_midi
|
|
|
|
|
|
api = NinjaAPI(
|
|
|
title="MIDI Processor API (Django Ninja)",
|
|
|
version="2.0.0",
|
|
|
description="A robust MIDI processing API built with Django Ninja."
|
|
|
)
|
|
|
|
|
|
@api.get("/")
|
|
|
def home(request):
|
|
|
"""
|
|
|
A simple welcome endpoint.
|
|
|
The interactive docs will be at /api/docs
|
|
|
"""
|
|
|
return {"message": "Welcome to the Django Ninja MIDI API!", "docs_url": "/api/docs"}
|
|
|
|
|
|
|
|
|
@api.post("/process-midi")
|
|
|
def process_midi_file(request, file: UploadedFile = File(...)):
|
|
|
"""
|
|
|
Receives a MIDI file, transposes it, and returns the processed file.
|
|
|
"""
|
|
|
try:
|
|
|
|
|
|
if not file.name.lower().endswith(('.mid', '.midi')):
|
|
|
return api.create_response(request, {"error": "Invalid file type"}, status=400)
|
|
|
|
|
|
|
|
|
midi_bytes = file.read()
|
|
|
|
|
|
|
|
|
processed_buffer = process_midi(midi_bytes)
|
|
|
|
|
|
|
|
|
response = HttpResponse(
|
|
|
processed_buffer.getvalue(),
|
|
|
content_type='audio/midi'
|
|
|
)
|
|
|
response['Content-Disposition'] = f'attachment; filename="processed_{file.name}"'
|
|
|
return response
|
|
|
|
|
|
except Exception as e:
|
|
|
return api.create_response(request, {"error": str(e)}, status=500) |