yzwwxm commited on
Commit
ff1e270
·
verified ·
1 Parent(s): 24511dd

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +59 -59
main.py CHANGED
@@ -1,59 +1,59 @@
1
- from fastapi import FastAPI, Query
2
- from fastapi.staticfiles import StaticFiles
3
- from kokoro import KPipeline
4
- import soundfile as sf
5
- from pydub import AudioSegment
6
- import os
7
- from fastapi.responses import JSONResponse
8
- from pydantic import BaseModel
9
- import uuid
10
- import time
11
- app = FastAPI()
12
-
13
- # 挂载 static 目录
14
- os.makedirs("static", exist_ok=True)
15
- app.mount("/static", StaticFiles(directory="static"), name="static")
16
-
17
- class AudioResponse(BaseModel):
18
- audio_url: str
19
- time: float
20
- # 初始化KPipeline
21
- pipeline = KPipeline(lang_code='z')
22
- @app.get("/generate_audio/", response_model=AudioResponse)
23
- async def generate_audio(text: str = Query(..., description="输入要转换为语音的文本"),
24
- voice: str = Query("zf_xiaoxiao", description="选择语音类型")):
25
- per=time.time()
26
- # 生成音频
27
- generator = pipeline(text, voice=voice, speed=1, split_pattern=r'\n+')
28
-
29
- # 保存每个音频片段
30
- audio_files = []
31
- for i, (gs, ps, audio) in enumerate(generator):
32
- audio_filename = f"temp_{i}.wav"
33
- sf.write(audio_filename, audio, 24000)
34
- audio_files.append(audio_filename)
35
-
36
- # 合并音频片段
37
- combined_audio = AudioSegment.empty()
38
- for audio_file in audio_files:
39
- audio_segment = AudioSegment.from_wav(audio_file)
40
- combined_audio += audio_segment
41
-
42
- # 生成唯一的音频文件名
43
- unique_filename = f"audio_{uuid.uuid4().hex}.wav"
44
- combined_filepath = os.path.join("static", unique_filename)
45
-
46
- # 保存合并后的音频文件
47
- combined_audio.export(combined_filepath, format="wav")
48
-
49
- # 清理临时音频文件
50
- for audio_file in audio_files:
51
- os.remove(audio_file)
52
- end=time.time()
53
- # 返回合并后的音频文件URL
54
- audio_url = f"/static/{unique_filename}"
55
- return {"audio_url": audio_url,"time": end-per}
56
-
57
- if __name__ == "__main__":
58
- import uvicorn
59
- uvicorn.run(app, host="0.0.0.0", port=8000)
 
1
+ from fastapi import FastAPI, Query
2
+ from fastapi.staticfiles import StaticFiles
3
+ from kokoro import KPipeline
4
+ import soundfile as sf
5
+ from pydub import AudioSegment
6
+ import os
7
+ from fastapi.responses import JSONResponse
8
+ from pydantic import BaseModel
9
+ import uuid
10
+ import time
11
+ app = FastAPI()
12
+
13
+ # 挂载 static 目录
14
+ os.makedirs("static", exist_ok=True)
15
+ app.mount("/static", StaticFiles(directory="static"), name="static")
16
+
17
+ class AudioResponse(BaseModel):
18
+ audio_url: str
19
+ time: float
20
+ # 初始化KPipeline
21
+ pipeline = KPipeline(lang_code='z')
22
+ @app.get("/generate_audio/", response_model=AudioResponse)
23
+ async def generate_audio(text: str = Query(..., description="输入要转换为语音的文本"),
24
+ voice: str = Query("zf_xiaoxiao", description="选择语音类型")):
25
+ per=time.time()
26
+ # 生成音频
27
+ generator = pipeline(text, voice=voice, speed=1, split_pattern=r'\n+')
28
+
29
+ # 保存每个音频片段
30
+ audio_files = []
31
+ for i, (gs, ps, audio) in enumerate(generator):
32
+ audio_filename = f"static/temp_{i}.wav"
33
+ sf.write(audio_filename, audio, 24000)
34
+ audio_files.append(audio_filename)
35
+
36
+ # 合并音频片段
37
+ combined_audio = AudioSegment.empty()
38
+ for audio_file in audio_files:
39
+ audio_segment = AudioSegment.from_wav(audio_file)
40
+ combined_audio += audio_segment
41
+
42
+ # 生成唯一的音频文件名
43
+ unique_filename = f"audio_{uuid.uuid4().hex}.wav"
44
+ combined_filepath = os.path.join("static", unique_filename)
45
+
46
+ # 保存合并后的音频文件
47
+ combined_audio.export(combined_filepath, format="wav")
48
+
49
+ # 清理临时音频文件
50
+ for audio_file in audio_files:
51
+ os.remove(audio_file)
52
+ end=time.time()
53
+ # 返回合并后的音频文件URL
54
+ audio_url = f"/static/{unique_filename}"
55
+ return {"audio_url": audio_url,"time": end-per}
56
+
57
+ if __name__ == "__main__":
58
+ import uvicorn
59
+ uvicorn.run(app, host="0.0.0.0", port=8000)