Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Protocol::Request_SPEECH(QByteArray & audioData)
- {
- if (!Nt_SPEECH)
- {
- QNetworkRequest request;
- QString speechAPI = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1";
- request.setUrl(speechAPI);
- request.setRawHeader("User-Agent", "Mozilla/5.0");
- request.setRawHeader("Content-Type", "audio/x-flac; rate=16000");
- qDebug(audioData);
- Nt_SPEECH = NetworkMGR.post(request, audioData);
- connect(Nt_SPEECH, SIGNAL(readyRead()), this, SLOT(Read_SPEECH()));
- }
- }
- void Protocol::Read_SPEECH()
- {
- QString content = QString::fromUtf8( Nt_SPEECH->readAll() );
- try
- {
- qDebug(content.toAscii());
- replyCheck(Nt_SPEECH);
- contentCheck(content);
- Json::Value root;
- Json::Reader reader;
- reader.parse( std::string( content.toAscii().data() ), root);
- QList<QString> list;
- list.append(QString("status"));
- list.append(QString("id"));
- list.append(QString("hypotheses"));
- checkJsonKeys(root, list);
- jsonConvertableTo(root["status"], Json::intValue);
- jsonConvertableTo(root["id"], Json::stringValue);
- jsonConvertableTo(root["hypotheses"], Json::arrayValue);
- switch(root["status"].asInt())
- {
- case SPEECH_INPUT_ERROR_NONE:
- break;
- case SPEECH_INPUT_ERROR_NO_SPEECH:
- throw SPEECH_INPUT_ERROR_NO_SPEECH;
- break;
- case SPEECH_INPUT_ERROR_NO_MATCH:
- throw SPEECH_INPUT_ERROR_NO_MATCH;
- break;
- default:
- throw UndefinedError;
- break;
- }
- // Empty response can be handled above
- // So there is no need to check "hypotheses" size
- Json::Value hypotheses = root["hypotheses"];
- Json::Value result = hypotheses[0];
- QList<QString> list_2;
- list_2.append(QString("utterance"));
- list_2.append(QString("confidence"));
- checkJsonKeys(result, list_2);
- emit Signal_SPEECH(0, QString( result["utterance"].asCString() ), result["confidence"].asDouble() );
- }
- catch (Protocol::RequestError &e)
- {
- emit Signal_SPEECH( (int) e, QString(), 0);
- }
- catch (Protocol::SpeechInputError &e)
- {
- emit Signal_SPEECH( (int) e, QString(), 0);
- }
- catch (...)
- {
- emit Signal_SPEECH( (int) UndefinedError, QString(), 0);
- }
- disconnect(Nt_SPEECH, SIGNAL(readyRead()), this, SLOT(Read_SPEECH()));
- //delete Nt_SPEECH;
- Nt_SPEECH = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement