【问题标题】:Transcribe MP3 audio file with Bing Speech API (speech to text)使用 Bing Speech API(语音转文本)转录 MP3 音频文件
【发布时间】:2024-01-17 06:29:01
【问题描述】:

我有一个 MP3 格式的长录音(小时+)。以下是我设法从 FFMPEG 获得的有关音频文件的信息:

[mp3 @ 000001fe666da320] Skipping 0 bytes of junk at 58650.
[mjpeg @ 000001fe666effe0] Changing bps to 8
[mp3 @ 000001fe666da320] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from '1.mp3':
Duration: 00:57:18.52, start: 0.000000, bitrate: 192 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, mono, s16p, 192 kb/s
    Stream #0:1: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1300x1370, 90k tbr, 90k tbn, 90k tbc

我想使用Bing Speech API (Microsoft Oxford - Cognitive Services - Speech API) 转录此文件(语音转文本)。

我相信这可以通过使用类似下面的代码来实现。

选项 1: 在发送任何音频数据之前,您必须首先通过 DataRecognitionClient 的 sendAudioFormat() 方法发送 SpeechAudioFormat 描述符来描述原始音频数据的布局和格式。 您能否提供此选项的代码示例?

选项 2: 将文件转换为目标可接受的格式。我已经用 FFMPEG 做到了,这就是我得到的:

Duration: 00:57:23.67, bitrate: 256 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, 1 channels, s16, 256 kb/s

据我从documentation 了解到,这应该是可以接受的:音频必须是 PCM、单声道、16 位采样,采样率为 8000 Hz 或 16000 Hz。

我尝试将音频发送到服务器,但没有得到任何回复。我在正确的轨道上吗?最大缓冲区大小是多少?

您是否看到其他可能更简单的方法来转录我的音频文件?

private void SendAudioHelper(string wavFileName)
        {
            using (FileStream fileStream = new FileStream(wavFileName, FileMode.Open, FileAccess.Read))
            {
                int bytesRead = 0;
                byte[] buffer = new byte[1024];

                try
                {
                    do
                    {
                        // Get more Audio data to send into byte buffer.
                        bytesRead = fileStream.Read(buffer, 0, buffer.Length);

                        // Send of audio data to service.
                        this.dataClient.SendAudio(buffer, bytesRead);
                    }
                    while (bytesRead > 0);
                }
                finally
                {
                    // We are done sending audio.  Final recognition results will arrive in OnResponseReceived event call.
                    this.dataClient.EndAudio();
                }
            }
        }

【问题讨论】:

  • 我会改用speechmatics.com/examples#examples 之类的东西,它对于较长的文件要好得多。它允许您分隔扬声器、分配标点符号并做许多其他好事。也可以考虑开源包,相对于 web 服务来说是相当有效的。
  • @NikolayShmyrev 感谢您的提示。我一定会试一试的。我仍然希望对我最初的问题有所了解。

标签: speech-to-text microsoft-cognitive


【解决方案1】:

使用 REST 实现时有 15 秒的限制。 SDK 有 2 分钟的限制。

必应语音团队

【讨论】: