Я полагаю, что неправильно распределяю данные в Direct Line Speech, чтобы гарантировать получение полного звука для правильного преобразования S2T.
DialogServiceConnector.ListenOnceAsync
будет прослушивать, пока поток не будет закрыт (или обнаружена достаточная тишина) . Вы не закрываете свой поток, за исключением случаев, когда вы утилизируете его в конце своего блока использования. Вы можете подождать ListenOnceAsync
, но сначала убедитесь, что закрыли поток. Если вы не ожидаете ListenOnceAsync
, вы можете закрыть поток, когда захотите, но, вероятно, вам следует сделать это, как только вы закончите запись в поток, и вы должны быть уверены, что не избавляетесь от потока (илиКонфигурация) до того, как ListenOnceAsync
успел завершиться.
Вы также хотите убедиться, что ListenOnceAsync
получает полное высказывание. Если вы получаете только 4 байта за раз, тогда это определенно не полное высказывание. Если вы хотите, чтобы ваши чанки составляли 4 байта, то может быть хорошей идеей продолжать работу ListenOnceAsync
в течение нескольких итераций этого цикла, а не вызывать его снова и снова для каждых 4 байтов, которые вы получаете.
Я знаю, что DLS API поддерживает ListenOnceAsync (), но не уверен, поддерживает ли он ASR (он знает, когда говорящий на другой стороне перестал говорить)
Я думаю, вам придется определить, когдаДинамик перестает говорить на стороне клиента, а затем получает сообщение от вашего WebSocket, указывающее, что вы должны закрыть аудиопоток на ListenOnceAsync
.
Похоже, ListenOnceAsync
поддерживает ASR.
Могу ли я просто получить URL веб-сокета для конечной точки прямой линии речи и предположить, что DLS правильно использует прямой поток веб-сокета?
Вы можете попробовать, ноЯ бы не предположил, что сам. Direct Line Speech все еще находится в предварительном просмотре, и я не ожидаю, что совместимость будет легкой.