diff --git a/server/MMVCServerSIO.py b/server/MMVCServerSIO.py index 5dcec5f9..4d3c8d25 100755 --- a/server/MMVCServerSIO.py +++ b/server/MMVCServerSIO.py @@ -1,11 +1,11 @@ -import sys, os, struct, argparse, shutil, base64, traceback +import sys, os, struct, argparse, shutil, traceback, base64, struct +import numpy as np import misc.log_control from dataclasses import dataclass from datetime import datetime from distutils.util import strtobool -import numpy as np from scipy.io.wavfile import write, read sys.path.append("MMVC_Trainer") @@ -41,13 +41,10 @@ from mods.ssl import create_self_signed_cert from voice_changer.VoiceChangerManager import VoiceChangerManager from sio.MMVC_SocketIOServer import MMVC_SocketIOServer -@dataclass -class ExApplicationInfo(): - external_tensorboard_port: int - - -exApplitionInfo = ExApplicationInfo(external_tensorboard_port=0) +from restapi.MMVC_Rest_VoiceChanger import MMVC_Rest_VoiceChanger +from restapi.MMVC_Rest_Hello import MMVC_Rest_Hello +from pydantic import BaseModel class VoiceModel(BaseModel): gpu: int @@ -57,6 +54,16 @@ class VoiceModel(BaseModel): prefixChunkSize: int buffer: str +@dataclass +class ExApplicationInfo(): + external_tensorboard_port: int + + +exApplitionInfo = ExApplicationInfo(external_tensorboard_port=0) + + + + def setupArgParser(): parser = argparse.ArgumentParser() parser.add_argument("-t", type=str, default="MMVC", @@ -146,17 +153,16 @@ if __name__ == thisFilename or args.colab == True: app_fastapi.mount( "/recorder", StaticFiles(directory="../frontend/dist", html=True), name="static") - # sio = socketio.AsyncServer( - # async_mode='asgi', - # cors_allowed_origins='*' - # ) - voiceChangerManager = VoiceChangerManager.get_instance() - # namespace = MMVC_Namespace.get_instance(voiceChangerManager) - # sio.register_namespace(namespace) - sio = MMVC_SocketIOServer.get_instance(voiceChangerManager) + voiceChangerManager = VoiceChangerManager.get_instance() if CONFIG and MODEL: voiceChangerManager.loadModel(CONFIG, MODEL) - # namespace.loadWhisperModel("base") + sio = MMVC_SocketIOServer.get_instance(voiceChangerManager) + + restHello = MMVC_Rest_Hello() + app_fastapi.include_router(restHello.router) + restVoiceChanger = MMVC_Rest_VoiceChanger(voiceChangerManager) + app_fastapi.include_router(restVoiceChanger.router) + app_socketio = socketio.ASGIApp( sio, @@ -171,10 +177,6 @@ if __name__ == thisFilename or args.colab == True: } ) - @app_fastapi.get("/api/hello") - async def index(): - return {"result": "Index"} - ############ # File Uploder # ########## @@ -233,8 +235,8 @@ if __name__ == thisFilename or args.colab == True: # Voice Changer # ########## - @app_fastapi.post("/test") - async def post_test(voice: VoiceModel): + @app_fastapi.post("/test2") + async def post_test2(voice: VoiceModel): try: # print("POST REQUEST PROCESSING....") gpu = voice.gpu @@ -342,7 +344,7 @@ if __name__ == thisFilename or args.colab == True: return JSONResponse(content=json_compatible_item_data) if __name__ == '__mp_main__': - printMessage(f"PHASE2adasdfadfasd:{__name__}", level=2) + printMessage(f"PHASE2:{__name__}", level=2) if __name__ == '__main__': printMessage(f"PHASE1:{__name__}", level=2) diff --git a/server/restapi/MMVC_Rest_Hello.py b/server/restapi/MMVC_Rest_Hello.py new file mode 100644 index 00000000..aa3eebaf --- /dev/null +++ b/server/restapi/MMVC_Rest_Hello.py @@ -0,0 +1,13 @@ +from fastapi import APIRouter +from fastapi.encoders import jsonable_encoder +from fastapi.responses import JSONResponse +class MMVC_Rest_Hello: + def __init__(self): + self.router = APIRouter() + self.router.add_api_route("/api/hello", self.hello, methods=["GET"]) + + def hello(self): + return {"result": "Index"} + + + diff --git a/server/restapi/MMVC_Rest_VoiceChanger.py b/server/restapi/MMVC_Rest_VoiceChanger.py new file mode 100644 index 00000000..14aaf18a --- /dev/null +++ b/server/restapi/MMVC_Rest_VoiceChanger.py @@ -0,0 +1,71 @@ +import base64, struct +import numpy as np + +from fastapi import APIRouter +from fastapi.encoders import jsonable_encoder +from fastapi.responses import JSONResponse + +from voice_changer.VoiceChangerManager import VoiceChangerManager +from pydantic import BaseModel +import threading + +class VoiceModel(BaseModel): + gpu: int + srcId: int + dstId: int + timestamp: int + prefixChunkSize: int + buffer: str + +class MMVC_Rest_VoiceChanger: + def __init__(self, voiceChangerManager:VoiceChangerManager): + self.voiceChangerManager = voiceChangerManager + self.router = APIRouter() + self.router.add_api_route("/test", self.test, methods=["POST"]) + self.tlock = threading.Lock() + + + def test(self, voice: VoiceModel): + try: + gpu = voice.gpu + srcId = voice.srcId + dstId = voice.dstId + timestamp = voice.timestamp + prefixChunkSize = voice.prefixChunkSize + buffer = voice.buffer + wav = base64.b64decode(buffer) + + if wav == 0: + samplerate, data = read("dummy.wav") + unpackedData = data + else: + unpackedData = np.array(struct.unpack( + '<%sh' % (len(wav) // struct.calcsize('