我正在使用谷歌语音到文本api将音频文件转换为文本。以下是我的代码(Qt):
`QString fileName = QDir::currentPath() + "/audio.wav"; //this is my audio file QFile audioFile(fileName); if(!audioFile.open(QIODevice::ReadOnly | QIODevice::Text)){ QMessageBox::critical(0,"Error",fileName+" Not found!"); ui->pushButton_4->setText("Speech to text"); return; } int idx = ui->comboBox->currentIndex(); QString enc; if (idx == -1) enc = "en-US"; else enc = ui->comboBox->itemData(idx).toString(); //Language selected by user QByteArray audioData=audioFile.readAll(); QUrl url("https://speech.googleapis.com/v1/speech:recognize"); QUrlQuery query; query.addQueryItem("key","myKeyHere..."); url.setQuery(query); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader,"audio/x-flac"); QJsonObject json; QJsonObject config; config["encoding"]="FLAC"; config["sampleRateHertz"]=44100; config["languageCode"]=enc; json["config"]=config; QJsonObject audio; audio["content"]=QString::fromLatin1(audioData.toBase64()); json["audio"]=audio; QByteArray jsonData=QJsonDocument(json).toJson(); QNetworkAccessManager *manager=new QNetworkAccessManager(); QNetworkReply *reply=manager->post(request,jsonData); QObject::connect(reply,&QNetworkReply::finished,[this,reply](){ if(reply->error()!=QNetworkReply::NoError){ QMessageBox::critical(0,"Error Occured",reply->errorString()); qDebug() << reply->readAll(); ui->pushButton_4->setText("Speech to text"); return; } else if(reply->error()==QNetworkReply::UnknownNetworkError){ QMessageBox::warning(0,"Network Error","Please check your internet connection and try again!"); ui->pushButton_4->setText("Speech to text"); } else if(reply->isFinished() && reply->error()==QNetworkReply::NoError){ QJsonDocument responseJson=QJsonDocument::fromJson(reply->readAll()); QJsonObject object=responseJson.object(); QString ResponseText=object["results"].toArray()[0].toObject() ["alternatives"].toArray()[0].toObject()["transcript"].toString(); QTextCursor cur = curr_browser->textCursor(); qDebug() << "Response Data :" << ResponseText; cur.insertText(ResponseText); ui->pushButton_4->setText("Speech to text"); } reply->deleteLater(); });`
这段代码在Ubuntu上运行得很好,但在windows上却不行。当我在Ubunanuu上运行此程序时,我收到了响应,但在windows上,我收到以下错误:传输错误https://speech.googleapis.com/v1/speech:recognize?key=,myKey>;-服务器答复:请求错误
以下是录制音频文件的代码:
`if (m_audioRecorder->state() == QMediaRecorder::StoppedState) { QString fileName = QDir::currentPath() + "/audio.wav"; m_audioRecorder->setOutputLocation(QUrl::fromLocalFile(fileName)); qDebug()<<"Recording your audio!!"; ui->pushButton_4->setText("Stop ?"); QAudioEncoderSettings settings; settings.setCodec("audio/x-flac"); settings.setSampleRate(0); settings.setBitRate(0); settings.setChannelCount(1); settings.setQuality(QMultimedia::EncodingQuality(2)); settings.setEncodingMode(QMultimedia::ConstantQualityEncoding); m_audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), ""); m_audioRecorder->record(); } else { qDebug()<<"stopped your recording!"; ui->pushButton_4->setText("Processing ..."); m_audioRecorder->stop(); speechToTextCall(); //calling the code to send request to google api }`
有人能帮忙吗?
我尝试更改编码和容器类型,但在Windows上没有任何效果。