perf: use pysilk instead of pilk 避免构建问题

This commit is contained in:
Soulter
2025-01-25 20:18:40 +08:00
parent 7f539090dd
commit 685c0a106a
2 changed files with 30 additions and 18 deletions

View File

@@ -2,29 +2,41 @@ import wave
from io import BytesIO
async def tencent_silk_to_wav(silk_path: str, output_path: str) -> str:
import pilk
import pysilk
with open(silk_path, "rb") as f:
pcm_path = f"{output_path}.pcm"
pilk.decode(silk_path, pcm_path)
input_data = f.read()
if input_data.startswith(b'\x02'):
input_data = input_data[1:]
input_io = BytesIO(input_data)
output_io = BytesIO()
pysilk.decode(input_io, output_io, 24000)
output_io.seek(0)
with wave.open(output_path, 'wb') as wav:
wav.setnchannels(1)
wav.setsampwidth(2)
wav.setframerate(24000)
wav.writeframes(output_io.read())
with open(pcm_path, "rb") as pcm:
with wave.open(output_path, 'wb') as wav:
wav.setnchannels(1)
wav.setsampwidth(2)
wav.setframerate(24000)
wav.writeframes(pcm.read())
return output_path
async def wav_to_tencent_silk(wav_path: str, output_path: str) -> int:
'''返回 duration'''
import pilk
# wav to pcm
import pysilk
with wave.open(wav_path, 'rb') as wav:
pcm_path = f"{wav_path}.pcm"
with open(pcm_path, "wb") as f:
f.write(wav.readframes(wav.getnframes()))
wav_data = wav.readframes(wav.getnframes())
wav_data = BytesIO(wav_data)
output_io = BytesIO()
pysilk.encode(wav_data, output_io, 24000, 24000)
output_io.seek(0)
return pilk.encode(pcm_path, output_path, pcm_rate=24000, tencent=True)
# 在首字节添加 \x02,去除结尾的\xff\xff
silk_data = output_io.read()
silk_data_with_prefix = b'\x02' + silk_data[:-2]
# return BytesIO(silk_data_with_prefix)
with open(output_path, "wb") as f:
f.write(silk_data_with_prefix)
return 0

View File

@@ -17,4 +17,4 @@ pyjwt
apscheduler
docstring_parser
aiodocker
pilk
silk-python