当前位置: 首页 > 知识库问答 >
问题:

Google Speech API为一些返回空结果,但不为其他返回空结果(C#)

方茂
2023-03-14

空结果如下所示:

json[0] "{\"result\":[]}"
json[1] ""

非空结果(所需结果)如下所示:

json[0] "{\"result\":[]}"
json[1] "{\"result\":[{\"alternative\":[{\"transcript\":\"good morning Google how are you feeling today\",\"confidence\":0.987629}],\"final\":true}],\"result_index\":0}"
json[2] ""

我有这个函数,它应该获取“. flac”文件并将其转换为文本。出于某种原因,只有这两个示例“. flac”文件在通过Google Speech API时返回字符串,其他flac文件返回EMPTY结果。这些人遇到的同样问题:链接

这是我所有的flac文件:链接

<代码>我的。flac和此\u is\u a\u测试。flac工作得很好,google语音API给了我一个jason对象,其中包含文本。

但是,记录了。flac不能与google语音API一起使用,它给了我空的json对象。

调试

>

  • 我以为是麦克风出了问题,于是我录了下来。flac多次,声音清晰,并使用ffmpeg将其转换为flac。但谷歌语音API仍然无法识别录制的语音。flac
  • 我想我把代码的格式弄错了,所以我试着

    _HWR_SpeechToTextContentType="音频/116;速率=16000";

    而不是

    _HWR_SpeechToTextContentType="音频/x-flac;速率=44100";

    Then, none of them worked, not a single flac file. so i changed it back.
    

    这是我的谷歌语音API代码,它可以将FLAC文件转换为TEXT(我认为没有必要,但是,无论如何):

    public void convert_to_text()
        {
            FileStream fileStream = File.OpenRead("recorded.flac");//my.flac
            MemoryStream memoryStream = new MemoryStream();
            memoryStream.SetLength(fileStream.Length);
            fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);
            byte[] BA_AudioFile = memoryStream.GetBuffer();
            HttpWebRequest _HWR_SpeechToText = null;
            _HWR_SpeechToText = (HttpWebRequest)HttpWebRequest.Create("https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=" + ACCESS_GOOGLE_SPEECH_KEY);
            _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials;
            _HWR_SpeechToText.Method = "POST";
            _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100";
            _HWR_SpeechToText.ContentLength = BA_AudioFile.Length;
            Stream stream = _HWR_SpeechToText.GetRequestStream();
            stream.Write(BA_AudioFile, 0, BA_AudioFile.Length);
            stream.Close();
            HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse();
    
            StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream());
            string responseFromServer = (SR_Response.ReadToEnd());
    
            String[] jsons = responseFromServer.Split('\n');
            foreach (String j in jsons)
            {
                dynamic jsonObject = JsonConvert.DeserializeObject(j);
                if (jsonObject == null || jsonObject.result.Count <= 0)
                {
                    continue;
                }
                text = jsonObject.result[0].alternative[0].transcript;
                jsons = null;
            }
            label1.Content = text;
        }
    
  • 共有1个答案

    熊烨
    2023-03-14

    首先检查文件是否为16位PCM单声道而不是立体声。易于使用http://www.audacityteam.org/

    然后,您可以使用以下简单代码来执行此操作:

    string api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    string path = @"C:\temp\good-morning-google.flac";
    
    byte[] bytes = System.IO.File.ReadAllBytes(path);
    
    WebClient client = new WebClient();
    client.Headers.Add("Content-Type", "audio/x-flac; rate=44100");
    byte[] result = client.UploadData(string.Format(
                    "https://www.google.com/speech-api/v2/recognize?client=chromium&lang=en-us&key={0}", api_key), "POST", bytes);
    
    string s = client.Encoding.GetString(result);
    
     类似资料:
    • 问题内容: 我正在使用JDBC来实现非常简单的数据库连接。 我已经创建了连接/语句并执行了查询。我在调试器中检查语句的查询对象,以确认它正在发送正确的查询。然后,我再次检查了数据库中的查询(直接从调试器复制),以确保其返回数据。但是,返回的结果集在.next()上给出false 这里有我遗漏的常见陷阱吗? 还有myDB类(一个简单的包装程序,使我可以将连接/语句代码放入任何项目中) 编辑:根据建议

    • 方法返回空结果。我正在尝试使用Spring-boot、h2数据库和JPA来实现rest服务。 下面是我的 我的文件包括: 实体: 接口:

    • 你好,我有一个问题与elasticsearch php api,Elastica。 如果我运行这个: 我得到0个结果

    • 我有一个如下所示的查询:,它返回所有实体(当前为15个)。我只想选择某些字段来提高查询的内存效率(有很多我不需要的嵌入实体)。 我有2个多对一关系,a和b,其中一个通常为空,另一个有一个值。如果执行,我将得到a不为null的10个结果,而执行时,我将得到b不为null的另外5个结果。但是,如果执行,则返回0个结果。我假定它全部为15,并将其作为返回。为什么会发生这种情况,我是否可以更改它,以便返回

    • 我正在尝试处理新的AndroidLollipopMediaProjection API。 我发现(至少在我的股票三星Galaxy S4 jfltexx上),当我开始意图获取捕获屏幕的权限()时,除非我在前面的尝试中选中了“不要再次询问”,否则在中不会有结果... 和结果处理: 权限对话框显示得很好,但是我的活动被隐藏了,它永远不会转到。 知道出什么问题了吗?

    • 我有以下表格结构: 1-课程(course_id、course_nam、语言、course_price、create_date、average_rating、course_description、certifica_price、course_creator_id) 2-学生(学生证、钱包) 3-折扣(折扣id、折扣课程id、允许的许可课程id、开始日期、结束日期、百分比) 4-报名(student