gpt4 book ai didi

c# - 从内存流读取时的 Naudio 和 Syn 语音空引用错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:44 25 4
gpt4 key购买 nike

我很确定我做的是对的,但我似乎无法弄清楚是什么导致了这个错误或如何修复它。任何帮助,将不胜感激。代码在下面,下面是错误。

代码。我发布了所有内容,因为我不知道与此错误相关的内容。

    public class voiceStuff
{
public WaveInEvent waveInStream;
private static StreamSpeechRecognizer _recognizer;
WaveFileWriter writer;
private MemoryStream mem;
public void record()
{

waveInStream.NumberOfBuffers = 2;
waveInStream.StartRecording();
recognize();
}

public void recognize()
{
Console.ReadKey();
waveInStream.StopRecording();
}

public voiceStuff()
{
Logger.LogReceived += Logger_LogReceived;
waveInStream = new WaveInEvent();
waveInStream.NumberOfBuffers =2;
waveInStream.WaveFormat = new WaveFormat(16000, 1);
mem = new MemoryStream();
writer = new WaveFileWriter(mem, waveInStream.WaveFormat);
waveInStream.DataAvailable += onDataAvailable;
var modelPath = Path.Combine(Directory.GetCurrentDirectory(), "model/en-us");
var dictionaryPath = Path.Combine(modelPath, "cmudict-en-us.dict");
var languageModelPath = Path.Combine(modelPath, "en-us.lm.dmp");
var configuration = new Configuration
{
AcousticModelPath = modelPath,
DictionaryPath = dictionaryPath,
LanguageModelPath = languageModelPath,
UseGrammar = true,
GrammarPath = "Models",
GrammarName = "hello"
};
_recognizer = new StreamSpeechRecognizer(configuration);
waveInStream.StartRecording();
Console.ReadKey();
waveInStream.StopRecording();
Thread.Sleep(50);

_recognizer.StartRecognition(mem, new TimeFrame(mem.Length));
SpeechResult result = _recognizer.GetResult();
_recognizer.StopRecognition();
Console.WriteLine("result: " + result?.GetHypothesis());

//syn speech
}

public void onDataAvailable(object sender, WaveInEventArgs e)
{
writer.Write(e.Buffer, 0, e.BytesRecorded);

}
static void Logger_LogReceived(object sender, LogReceivedEventArgs e)
{
Console.WriteLine(e.Message);
}
}

错误

     9/12/2016 9:55:42 PM Error StreamSpeechRecognizer System.NullReferenceException: Object reference not set to an instance of an object.
at Syn.Speech.Linguist.Dictionary.TextDictionary.Allocate()
at Syn.Speech.Linguist.Language.Grammar.Grammar.Allocate()
at Syn.Speech.Linguist.Flat.FlatLinguist.Allocate()
at Syn.Speech.Decoders.Search.SimpleBreadthFirstSearchManager.Allocate()
at Syn.Speech.Recognizers.Recognizer.Allocate()
at Syn.Speech.Api.StreamSpeechRecognizer.StartRecognition(Stream stream, TimeFrame timeFrame)
9/12/2016 9:55:42 PM Error StreamSpeechRecognizer Syn.Speech.Helper.IllegalStateException: Expected state Ready actual state Allocating
at Syn.Speech.Recognizers.Recognizer.CheckState(State desiredState)
at Syn.Speech.Recognizers.Recognizer.Recognize(String referenceText)
at Syn.Speech.Api.AbstractSpeechRecognizer.GetResult()
9/12/2016 9:55:42 PM Error StreamSpeechRecognizer Syn.Speech.Helper.IllegalStateException: Expected state Ready actual state Allocating
at Syn.Speech.Recognizers.Recognizer.CheckState(State desiredState)
at Syn.Speech.Recognizers.Recognizer.Deallocate()
at Syn.Speech.Api.StreamSpeechRecognizer.StopRecognition()

最佳答案

至少您需要Dispose 您的WaveFileWriter 以最终确定WAV 文件结构。但是,也要注意处理内存流。我通常将它包装在 NAudio 的实用程序类 IgnoreDisposeStream

然后您需要将您的 MemoryStream 倒回到开头,然后再将其传递给语音识别。

关于c# - 从内存流读取时的 Naudio 和 Syn 语音空引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39461255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com