0
我有一个需要发送到Speech-To-Text API的MP4音频文件的URL。该API只接受WAV流。我使用n音讯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和一切工作正常,虽然很慢因为I/O到/从磁盘。
我决定重写这段代码并执行所有在内存中所需的代码。为此我写了下面的代码(即不提供我一个正确的视频流):
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流
谢谢,马克。有效! –