modify tts handle
This commit is contained in:
parent
4e98ee0e76
commit
c4eb191e18
@ -68,7 +68,7 @@ class SherpaNcnnAsr(AsrBase):
|
|||||||
self._notify_complete('介绍中国5000年历史文学')
|
self._notify_complete('介绍中国5000年历史文学')
|
||||||
logger.info(f'_recognize_loop111')
|
logger.info(f'_recognize_loop111')
|
||||||
segment_id += 1
|
segment_id += 1
|
||||||
time.sleep(50)
|
time.sleep(150)
|
||||||
logger.info(f'_recognize_loop222')
|
logger.info(f'_recognize_loop222')
|
||||||
logger.info(f'_recognize_loop exit')
|
logger.info(f'_recognize_loop exit')
|
||||||
'''
|
'''
|
||||||
|
@ -3,7 +3,8 @@ import heapq
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from threading import Lock
|
import time
|
||||||
|
from threading import Lock, Thread
|
||||||
|
|
||||||
from eventbus import EventBus
|
from eventbus import EventBus
|
||||||
from utils import save_wav
|
from utils import save_wav
|
||||||
@ -62,8 +63,21 @@ class TTSAudioSplitHandle(TTSAudioHandle):
|
|||||||
self._lock = Lock()
|
self._lock = Lock()
|
||||||
self._current = 0
|
self._current = 0
|
||||||
self._is_running = True
|
self._is_running = True
|
||||||
|
self._thread = Thread(target=self._process_loop)
|
||||||
|
self._thread.start()
|
||||||
logger.info("TTSAudioSplitHandle init")
|
logger.info("TTSAudioSplitHandle init")
|
||||||
|
|
||||||
|
def _process_loop(self):
|
||||||
|
while self._is_running:
|
||||||
|
with self._lock:
|
||||||
|
if self._priority_queue and self._priority_queue[0][0] == self._current:
|
||||||
|
self._current += 1
|
||||||
|
chunks, txt = heapq.heappop(self._priority_queue)[1]
|
||||||
|
if chunks is not None:
|
||||||
|
for chunk in chunks:
|
||||||
|
self.on_next_handle((chunk, txt), 0)
|
||||||
|
time.sleep(0.01) # Sleep briefly to prevent busy-waiting
|
||||||
|
|
||||||
def on_handle(self, stream, index):
|
def on_handle(self, stream, index):
|
||||||
if not self._is_running:
|
if not self._is_running:
|
||||||
logger.info('TTSAudioSplitHandle::on_handle is not running')
|
logger.info('TTSAudioSplitHandle::on_handle is not running')
|
||||||
@ -71,13 +85,6 @@ class TTSAudioSplitHandle(TTSAudioHandle):
|
|||||||
|
|
||||||
logger.info(f'TTSAudioSplitHandle::on_handle {index}')
|
logger.info(f'TTSAudioSplitHandle::on_handle {index}')
|
||||||
s, txt = stream
|
s, txt = stream
|
||||||
current = 0
|
|
||||||
with self._lock:
|
|
||||||
if len(self._priority_queue) != 0:
|
|
||||||
current = self._priority_queue[0][0]
|
|
||||||
if current == 0:
|
|
||||||
self._current = 0
|
|
||||||
|
|
||||||
if s is None:
|
if s is None:
|
||||||
heapq.heappush(self._priority_queue, (index, None))
|
heapq.heappush(self._priority_queue, (index, None))
|
||||||
else:
|
else:
|
||||||
@ -85,7 +92,6 @@ class TTSAudioSplitHandle(TTSAudioHandle):
|
|||||||
idx = 0
|
idx = 0
|
||||||
chunks = []
|
chunks = []
|
||||||
while stream_len >= self._chunk and self._is_running:
|
while stream_len >= self._chunk and self._is_running:
|
||||||
# self.on_next_handle(stream[idx:idx + self._chunk], 0)
|
|
||||||
chunks.append(s[idx:idx + self._chunk])
|
chunks.append(s[idx:idx + self._chunk])
|
||||||
stream_len -= self._chunk
|
stream_len -= self._chunk
|
||||||
idx += self._chunk
|
idx += self._chunk
|
||||||
@ -93,31 +99,14 @@ class TTSAudioSplitHandle(TTSAudioHandle):
|
|||||||
return
|
return
|
||||||
heapq.heappush(self._priority_queue, (index, (chunks, txt)))
|
heapq.heappush(self._priority_queue, (index, (chunks, txt)))
|
||||||
|
|
||||||
logger.info(f'TTSAudioSplitHandle::on_handle {index}, {current}, {self._current}, {len(self._priority_queue)}')
|
|
||||||
if current == self._current:
|
|
||||||
self._current = self._current + 1
|
|
||||||
chunks = heapq.heappop(self._priority_queue)[1]
|
|
||||||
chunks, txt = chunks
|
|
||||||
|
|
||||||
if chunks is not None:
|
|
||||||
for chunk in chunks:
|
|
||||||
# logger.info(f'TTSAudioSplitHandle::on_handle push')
|
|
||||||
self.on_next_handle((chunk, txt), 0)
|
|
||||||
# logger.info(f'TTSAudioSplitHandle::on_handle push finish')
|
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self._is_running = False
|
self._is_running = False
|
||||||
|
self._thread.join()
|
||||||
|
|
||||||
def on_clear_cache(self, *args, **kwargs):
|
def on_clear_cache(self, *args, **kwargs):
|
||||||
super().on_clear_cache()
|
super().on_clear_cache()
|
||||||
if self._priority_queue is None or len(self._priority_queue) == 0:
|
|
||||||
return
|
|
||||||
|
|
||||||
with self._lock:
|
with self._lock:
|
||||||
print('TTSAudioSplitHandle::on_clear_cache', self._current)
|
|
||||||
self._current = 0
|
self._current = 0
|
||||||
print('TTSAudioSplitHandle::on_clear_cache', self._current)
|
|
||||||
|
|
||||||
self._priority_queue.clear()
|
self._priority_queue.clear()
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,4 +59,3 @@ class AsyncTaskQueue:
|
|||||||
self.stop_workers()
|
self.stop_workers()
|
||||||
for thread in self._threads:
|
for thread in self._threads:
|
||||||
thread.join()
|
thread.join()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user