У меня есть URL-адрес аудиофайла MP4, который мне нужно отправить в Speech-To-Text API. API принимает только поток WAV. Я использую NAudio 1.7.3 и следующий код, чтобы загрузить файл и получить соответствующий поток для отправки API:Создайте поток WAV в памяти
string filePath = "C:\Windows\Temp\file.wav";
using (MediaFoundationReader reader = new MediaFoundationReader(audioFileURL))
{
WaveFileWriter.CreateWaveFile(filePath, reader);
}
System.IO.FileStream fs = new FileStream(filePath, FileMode.Open);
Затем я отправить fs
поток в API и все работает правильно, хотя и очень медленно из-за ввода-вывода на диск.
Я решил переписать этот код и выполнить все необходимое в памяти. Для этого я написал следующий код (который не дает мне правильный поток):
using (MediaFoundationReader reader = new MediaFoundationReader(audioLocation)){
MemoryStream ms = new MemoryStream();
IgnoreDisposeStream ids = new IgnoreDisposeStream(ms);
WaveFileWriter writer = new WaveFileWriter(ids, reader.WaveFormat);
//Doing one of the following (both provide the same outcome):
//1. reader.CopyTo(ids);
//or
//2. this code from NAudio source:
var buffer = new byte[reader.WaveFormat.AverageBytesPerSecond * 4];
while (true)
{
int bytesRead = reader.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
// end of source provider
break;
}
// Write will throw exception if WAV file becomes too large
writer.Write(buffer, 0, bytesRead);
}
writer.Dispose();
Stream streamToSendToAPI = ids.SourceStream;
//Send streamToSendToAPI to Speech-To-Text API
}
Я ожидаю, что с помощью второго примера кода, где я создаю поток с заголовком WAV, а затем добавить данные в поток , предоставит мне действительный поток WAV. Однако, когда я отправляю его в API-интерфейс с текстом, API дает ошибку, указывающую, что поток не может быть обработан (это означает, что поток недействителен).
Пожалуйста, посоветуйте, как исправить пример кода в памяти, чтобы создать допустимый WAV класс, сформированный с учетом способностей учащихся
Спасибо, Марк. Это сработало! –