オーディオファイルの転写、超効率的な録音

5615 ワード

導入
オーディオをテキストに変換するアプリケーションの広い範囲があります:ビデオ字幕を生成し、会議の議事録を取り、インタビューのコピーを書く.Huawei MLキットのサービスはこれまで以上に簡単に行うには、同様に正しい句読点で細心の注意を払って正確なテキストにオーディオファイルを変換することができます!
実際効果
ビルドし、オーディオファイルの転写を統合してアプリケーションを実行します.次に、ローカルオーディオファイルを選択し、テキストに変換します.
![画像のaltテキスト]
開発準備
Huawei Mavenリポジトリの設定とオーディオファイルの転写SDKの統合については、Huawei開発者のMLキットのDevelopment Guideを参照してください.
AndroidManifestのパーミッションの宣言.XMLファイル
AndroidManifestを開きます.メインフォルダのXML.ネットワーク接続、ネットワーク状態へのアクセスを追加します
これらのアクセス許可を動的に適用する必要があることに注意してください.それ以外の場合、許可されていない許可が報告されます.
開発手順
オーディオファイルの転写エンジンを作成し、初期化
メインアクティビティでOnCreateをオーバーライドしてオーディオ転写エンジンを作成します.
プライベートMultiRemoteAtEngine Manalyzer;
Malalyzer = mlRemoteFtEngine.getInstant ();
マナリザ.init ( getApplicationContext ());
マナリザ.setaftlistener ( masrlistener );
MelRemoteAfSettingsを使用して、エンジンを構成します.サービスは現在、中国語と英語をサポートしています、つまり、MLanguageのオプションは、ZHとENです.
新しいmlRemoteAftSettingsを設定します.factory ()
setlangagecode ( mlanguage )
. EnablePuntation ( true )
. EnableWordTimeOffset ( true )
を返します.
create ()を使用します.
EnablePuntUtation既定のfalse値を使用して、変換されたテキストを自動的に中断するかどうかを示します.
このパラメータをtrueに設定すると、変換されたテキストが自動的に句読点となりますそれ以外の場合はfalse.
EnableWordTimeOffset各オーディオセグメントのテキストの転写結果を対応するオフセットで生成するかどうかを示します.デフォルト値はfalseです.オーディオ持続時間が1分未満であるときにのみ、このパラメータを設定する必要があります.
このパラメータがtrueに設定されている場合、オフセット情報はテキストの転写結果とともに返されます.これは、1分以下の短いオーディオファイルの転写に適用される.
このパラメータがfalseに設定されている場合、オーディオファイルのテキストの転写結果のみが返されます.
EnableSentenceTimeOffsetオーディオファイル内の各文のオフセットを出力するかどうかを示します.デフォルト値はfalseです.
このパラメータがtrueに設定されている場合、オフセット情報はテキストの転写結果とともに返されます.
このパラメータがfalseに設定されている場合、オーディオファイルのテキストの転写結果のみが返されます.
転写結果を処理するためのリスナーコールバックの作成
private mlremoteaftlistener masrlistener = new mlRemoteAfList ()
リスナーが初期化された後、AttListenerでStartTaskを呼び出して転写を開始します.
(
@Override
public void onInitComplete(String taskId, Object ext) {
    Log.i(TAG, "MLRemoteAftListener onInitComplete" + taskId);
    mAnalyzer.startTask(taskId);
}

Override onUploadProgress, onEvent, and onResult in MLRemoteAftListener.

@Override
public void onUploadProgress(String taskId, double progress, Object ext) {
    Log.i(TAG, " MLRemoteAftListener onUploadProgress is " + taskId + " " + progress);
}

@Override
public void onEvent(String taskId, int eventId, Object ext) {
    Log.e(TAG, "MLAsrCallBack onEvent" + eventId);
    if (MLAftEvents.UPLOADED_EVENT == eventId) { // The file is uploaded successfully.
        showConvertingDialog();
        startQueryResult(); // Obtain the transcription result.
    }
}

@Override
public void onResult(String taskId, MLRemoteAftResult result, Object ext) {
    Log.i(TAG, "onResult get " + taskId);
    if (result != null) {
        Log.i(TAG, "onResult isComplete " + result.isComplete());
        if (!result.isComplete()) {
            return;
        }
        if (null != mTimerTask) {
            mTimerTask.cancel();
        }
        if (result.getText() != null) {
            Log.e(TAG, result.getText());
            dismissTransferringDialog();
            showCovertResult(result.getText());
        }

        List<MLRemoteAftResult.Segment> segmentList = result.getSegments();
        if (segmentList != null && segmentList.size() != 0) {
            for (MLRemoteAftResult.Segment segment : segmentList) {
                Log.e(TAG, "MLAsrCallBack segment  text is : " + segment.getText() + ", startTime is : " + segment.getStartTime() + ". endTime is : " + segment.getEndTime());
            }
        }

        List<MLRemoteAftResult.Segment> words = result.getWords();
        if (words != null && words.size() != 0) {
            for (MLRemoteAftResult.Segment word : words) {
                Log.e(TAG, "MLAsrCallBack word  text is : " + word.getText() + ", startTime is : " + word.getStartTime() + ". endTime is : " + word.getEndTime());
            }
        }

        List<MLRemoteAftResult.Segment> sentences = result.getSentences();
        if (sentences != null && sentences.size() != 0) {
            for (MLRemoteAftResult.Segment sentence : sentences) {
                Log.e(TAG, "MLAsrCallBack sentence  text is : " + sentence.getText() + ", startTime is : " + sentence.getStartTime() + ". endTime is : " + sentence.getEndTime());
            }
        }
    }

}
(```

)


Processing the Transcription Result in Polling Mode
After the transcription is completed, call getLongAftResult to obtain the transcription result. Process the obtained result every 10 seconds.


(

```)
private void startQueryResult() {
    Timer mTimer = new Timer();
    mTimerTask = new TimerTask() {
        @Override
        public void run() {
            getResult();
        }
    };
    mTimer.schedule(mTimerTask, 5000, 10000); // Process the obtained long speech transcription result every 10s.
}

private void getResult() {
    Log.e(TAG, "getResult");
    mAnalyzer.setAftListener(mAsrListener);
    mAnalyzer.getLongAftResult(mLongTaskId);
}

(```

)


(https://stackoverflow.com/questions/tagged/huawei-mobile-services)

Follow our official account for the latest HMS Core-related news and updates.