,我發現我的問題的解決方案。我寫了一個繼承自流的類AudioStream
,它緩衝輸入並等待Read方法被調用並且其緩衝區爲空時等待。這防止了識別器停止,因爲所讀取的方法總是返回一個值> 0 下面是這個類的重要組成部分的代碼:
public class AudioStream : Stream {
private AutoResetEvent _waitEvent = new AutoResetEvent(false);
internal void AddData(byte[] buffer, int count) {
_buffer.Add(buffer, count);
// Enable Read
_waitEvent.Set();
}
public override int Read(byte[] buffer, int offset, int count) {
int readCount = 0;
if ((_buffer.Empty) {
// Wait for input
_waitEvent.WaitOne();
}
......
// Fill buffer from _buffer;
_waitEvent.Reset();
return length;
}
protected override void Dispose(bool disposing) {
// Make sure, that there is no waiting Read
// Clear buffer, dispose wait event etc.
}
......
}
由於音頻數據被接收汽車無,讀取方法不會「掛起」超過一些毫秒(例如RTP包全部收到20毫秒)。
你只是想在實時發送音頻,並取回結果有人在說話?或者你想發送一個任意長的音頻流?也許如果你鏈接到麥克風的例子,你的問題會更清楚。 –
我想在實時發送音頻以獲得部分結果。原則上類似於示例文件夾中的[麥克風示例](https://github.com/Microsoft/Cognitive-Speech-STT-Windows),但適用於不同的來源(例如RTP)。但我希望我找到了一個解決方案(必須做更多的測試)。如果有效,我會用描述創建一個答案。 –