You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Voice2Text转写音频报错:totalBilledTime is unknown

解决Google语音转写报错totalBilledTime is unknown的问题

核心问题分析

你遇到的解析错误,大概率是音频编码和采样率配置与实际文件不匹配导致的。WhatsApp导出的OGG音频默认采用OPUS编码,采样率通常为16000Hz,而你的代码中错误指定了LINEAR16编码和44100Hz采样率,导致API无法正确解析音频,进而触发解析错误。

针对性修复方案

1. 修正音频编码与采样率配置

将代码中的RecognitionConfig部分替换为以下内容(适配WhatsApp的OGG音频):

$config = (new RecognitionConfig())
    ->setEncoding(AudioEncoding::OGG_OPUS) // 改为OGG_OPUS编码,匹配WhatsApp音频格式
    ->setSampleRateHertz(16000) // 改为WhatsApp常用的16000Hz采样率
    ->setLanguageCode('pt-BR');

2. 若使用WAV格式的补充说明

如果你转成WAV格式后仍报错,需确保WAV文件满足以下要求:

  • 编码为LINEAR16(PCM无压缩)
  • 采样率16000Hz
  • 单声道
    可以通过ffmpeg等工具转换:
ffmpeg -i input.ogg -acodec pcm_s16le -ar 16000 -ac 1 output.wav

此时代码中需将编码改回AudioEncoding::LINEAR16,采样率保持16000Hz。

3. 其他排查点

  • 确认GOOGLE_APPLICATION_CREDENTIALS指向的服务账号密钥文件有效,且该账号拥有Cloud Speech-to-Text API的权限。
  • 检查$RecordingUrl是否为可访问的路径,file_get_contents能正确读取音频内容(可通过var_dump($audioContent)验证)。

修复后的完整代码片段

function getAudio2Text($RecordingUrl, &$text, &$error)
{
    putenv('GOOGLE_APPLICATION_CREDENTIALS=' . GOOGLE_APPLICATION_CREDENTIALS);

    $text = null;
    $error = null;

    $client = new SpeechClient();

    try {
        // 适配WhatsApp OGG音频的配置
        $config = (new RecognitionConfig())
            ->setEncoding(AudioEncoding::OGG_OPUS)
            ->setSampleRateHertz(16000)
            ->setLanguageCode('pt-BR');

        $audioContent = file_get_contents($RecordingUrl);
        if (!$audioContent) {
            throw new Exception("无法读取音频文件");
        }

        $audio = (new RecognitionAudio())
            ->setContent($audioContent);

        $response = $client->recognize($config, $audio);

        $alternatives = [];
        $mostLikely = null;
        foreach ($response->getResults() as $result) {
            $alternatives = $result->getAlternatives();
            $mostLikely = $alternatives[0];
            $text .= $mostLikely->getTranscript();
        }

        return [
            'success' => true,
            'alternatives' => $alternatives,
            'mostLikely' => $mostLikely,
            'text' => $text
        ];
    } catch (Exception $e) {
        $error = $e->getMessage();
        return [
            'success' => false,
            'error' => $error
        ];
    } finally {
        $client->close();
    }

    if (empty($text)) {
        $error = "Não foi possível transcrever o áudio.";
    }
}

内容的提问来源于stack exchange,提问作者costamatrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:15:32