mirror of
https://github.com/HiMeditator/auto-caption.git
synced 2026-02-04 04:14:42 +08:00
- 修复gummy字幕引擎长时间空置报错的问题 - 将 python-subprocess 文件夹重命名为 caption-engine - 删除未使用的 prototype 代码
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
import sys
|
|
|
|
if sys.platform == 'win32':
|
|
from sysaudio.win import AudioStream, mergeStreamChannels
|
|
elif sys.platform == 'linux':
|
|
from sysaudio.linux import AudioStream, mergeStreamChannels
|
|
else:
|
|
raise NotImplementedError(f"Unsupported platform: {sys.platform}")
|
|
|
|
from audio2text.gummy import GummyTranslator
|
|
import sys
|
|
import argparse
|
|
|
|
def convert_audio_to_text(s_lang, t_lang, audio_type):
|
|
sys.stdout.reconfigure(line_buffering=True) # type: ignore
|
|
stream = AudioStream(audio_type)
|
|
stream.openStream()
|
|
|
|
if t_lang == 'none':
|
|
gummy = GummyTranslator(stream.RATE, s_lang, None)
|
|
else:
|
|
gummy = GummyTranslator(stream.RATE, s_lang, t_lang)
|
|
gummy.translator.start()
|
|
|
|
while True:
|
|
try:
|
|
if not stream.stream: continue
|
|
data = stream.stream.read(stream.CHUNK)
|
|
data = mergeStreamChannels(data, stream.CHANNELS)
|
|
try:
|
|
gummy.translator.send_audio_frame(data)
|
|
except:
|
|
gummy.translator.start()
|
|
gummy.translator.send_audio_frame(data)
|
|
except KeyboardInterrupt:
|
|
stream.closeStream()
|
|
gummy.translator.stop()
|
|
break
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description='Convert system audio stream to text')
|
|
parser.add_argument('-s', '--source_language', default='en', help='Source language code')
|
|
parser.add_argument('-t', '--target_language', default='zh', help='Target language code')
|
|
parser.add_argument('-a', '--audio_type', default='0', help='Audio stream source: 0 for output audio stream, 1 for input audio stream')
|
|
args = parser.parse_args()
|
|
convert_audio_to_text(
|
|
args.source_language,
|
|
args.target_language,
|
|
0 if args.audio_type == '0' else 1
|
|
)
|