mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-03-18 04:25:14 +08:00
feat(wechatcomapp): add support for splitting long audio files
This commit is contained in:
@@ -92,6 +92,7 @@ def any_to_amr(any_path, amr_path):
|
||||
audio = AudioSegment.from_file(any_path)
|
||||
audio = audio.set_frame_rate(8000) # only support 8000
|
||||
audio.export(amr_path, format="amr")
|
||||
return audio.duration_seconds * 1000
|
||||
|
||||
|
||||
def sil_to_wav(silk_path, wav_path, rate: int = 24000):
|
||||
@@ -101,3 +102,26 @@ def sil_to_wav(silk_path, wav_path, rate: int = 24000):
|
||||
wav_data = pysilk.decode_file(silk_path, to_wav=True, sample_rate=rate)
|
||||
with open(wav_path, "wb") as f:
|
||||
f.write(wav_data)
|
||||
|
||||
|
||||
def split_audio(file_path, max_segment_length_ms=60000):
|
||||
"""
|
||||
分割音频文件
|
||||
"""
|
||||
audio = AudioSegment.from_file(file_path)
|
||||
audio_length_ms = len(audio)
|
||||
if audio_length_ms <= max_segment_length_ms:
|
||||
return [file_path]
|
||||
segments = []
|
||||
for start_ms in range(0, audio_length_ms, max_segment_length_ms):
|
||||
end_ms = min(audio_length_ms, start_ms + max_segment_length_ms)
|
||||
segment = audio[start_ms:end_ms]
|
||||
segments.append(segment)
|
||||
file_prefix = file_path[: file_path.rindex(".")]
|
||||
format = file_path[file_path.rindex(".") + 1 :]
|
||||
files = []
|
||||
for i, segment in enumerate(segments):
|
||||
path = f"{file_prefix}_{i+1}" + f".{format}"
|
||||
segment.export(path, format=format)
|
||||
files.append(path)
|
||||
return files
|
||||
|
||||
Reference in New Issue
Block a user