Я пытаюсь записать звук с помощью NAudio и отправить его в Google Speech API для возврата текста (у меня нет потоковой передачи, поскольку языковая поддержка недостаточно хороша), и я не могу соединить запись и отправку под одной кнопкойнажмите (это точка приложения), потому что я получаю сообщение об ошибке, что файл используется, хотя я закрываю файл и затем вызываю функцию Google Speech
Я попытался поместить запись и отправку в две разные кнопки и при нажатии кнопки отправкиВызываю функцию закрытия записи перед отправкой.Я все еще получаю ту же ошибку.Так что мне просто нужно дождаться окончания записи и затем использовать send.
//code from google speach documentations page
public string GoogleSpeach()
{
var speech = SpeechClient.Create();
var text = "";
var response = speech.Recognize(new RecognitionConfig()
{
Encoding = RecognitionConfig.Types.AudioEncoding.Linear16,
SampleRateHertz = 16000,
LanguageCode = "ka",
}, RecognitionAudio.FromFile("C:/Temp/Test0001.wav"));
foreach (var result in response.Results)
{
foreach (var alternative in result.Alternatives)
{
text += (alternative.Transcript).ToString();
}
}
return text;
}
//recording button click code
Timer timer = new Timer();
timer.Interval = 5000;
timer.Tick += StopSoundRecording;
timer.Start();
waveSource = new WaveIn();
waveSource.WaveFormat = new WaveFormat(16000, 1);
waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
waveFile = new WaveFileWriter("C:/Temp/Test0001.wav", waveSource.WaveFormat);
waveSource.StartRecording();
//sending button click code
if (recordingStopped == false)
{
waveSource.StopRecording();
waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
recordingStopped = true;
timer.Stop();
}
string text = GoogleSpeach();
void waveSource_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveFile != null)
{
waveFile.Write(e.Buffer, 0, e.BytesRecorded);
waveFile.Flush();
}
}
void waveSource_RecordingStopped(object sender, StoppedEventArgs e)
{
if (waveSource != null)
{
waveSource.Dispose();
waveSource = null;
}
if (waveFile != null)
{
waveFile.Dispose();
waveFile = null;
}
}