NAV
javascript

Giới thiệu

Pronunciation module is an Fcloud service developed by Ftech. The module allows checking English pronunciation and evaluating pronunciation and average score of the whole sentence. To integrate and use this service, you must use Fcloud's SDK. And here are instructions for integrating the SDK.

Xác thực

To authorize, use this code: ```

Fcloud(function () {
  this.init('ClientID', 'SecretKey')
    .then((data) => {
      //init success
    })
    .catch((error) => {
      //init fail
    })
})

Bạn chắc chắn rằng mình đã thay thế ClientIDSecretKey mà Fcloud cung cấp trên trang (https://fcloud-partner-cms.ftech.ai).

Để gọi được các API chúng ta sẽ phải init SDK tham số truyền vào là ClientIDSecretKey được lấy khi bạn tạo Application trên CMS dành cho đối tác theo hướng dẫn sau:

Server Integrator

Sau khi tích hợp SDK, service Fcloud hỗ trợ callback server-server giúp hỗ trợ việc lấy thông tin request nhanh và chính xác nhất.

Web SDK

Get Phoneme

Fcloud(function() {
    this.getPhoneme('How are you', (response) => {
        // Xử lý nghiệp vụ sử dụng thông tin phoneme
    })
});

Đoạn code trên sẽ trả ra cấu trúc json có dạng như sau:

{
  "cleaned_reference_text": "how are you",
  "target_phoneme_word": "haʊ ɑː juː",
  "target_phoneme_char": "['h aʊ'] ['ɑː', 'ə r'] ['j uː', 'j ə', 'j ʊ']",
  "target_phoneme_list": [
    [
      [
        "h",
        "aʊ"
      ]
    ],
    [
      [
        "ɑː"
      ],
      [
        "ə",
        "r"
      ]
    ],
    [
      [
        "j",
        "uː"
      ],
      [
        "j",
        "ə"
      ],
      [
        "j",
        "ʊ"
      ]
    ]
  ],
  "syllable_info": [
    1,
    1,
    1
  ],
  "request_id": "47671c30-2159-45e3-bae2-d094fd937b32"
}

Chúng tôi cung cấp API cho phép lấy thông tin phát âm. Để sử dụng các bạn gọi hàm sau:

HTTP Request

PÓST https://fcloud-streaming-socket-api.ftech.ai/ioe/phoneme

Body Request

Parameter Description
reference_text Chuỗi mà bạn mong muốn lấy phiên âm
english_accent Mã định danh ngôn ngữ
extra_data Một số các thông tin kèm theo. Fcloud sẽ trả về chuỗi này khi callback kết quả

Start Recording

Chúng tôi cung cấp API cho phép Start Recording. Để sử dụng các bạn gọi hàm sau:

Fcloud(function() {
    this.startRecord(curText, extra_data, (data) => {
      //Callback trả về kết quả sau khi sau khi stop recording
    });
  });

Đoạn code trên sẽ trả ra cấu trúc json có dạng như sau:

{
  "code": 0, /*Mã lõi 0: Thành công; 1: Thất bại*/
  "data": {
    "request_id": "367ce6ed-08ca-4106-91e0-4934ea7b2bd8"
  }
}

HTTP Request

POST https://fcloud-streaming-socket-api.dev.ftech.ai/ioe/start_stream_v2

Body Request

Parameter Description
reference_text Chuỗi mà bạn mong muốn lấy phiên âm
english_accent Mã định danh ngôn ngữ
extra_data Một số các thông tin kèm theo. Fcloud sẽ trả về chuỗi này khi callback kết quả

Stop Recording

Khi stop recording bắt đầu tính toán và trả về kết quả phát âm theo callback của hàm start recording ```

Fcloud(function () {
  this.stopRecord()
})

Code trên sẽ trả ra cấu trúc json có dạng như sau:

    {
    "code": 0,
    "data": {
        "request_id": "5d2400e5-b039-4219-b2af-f5ae733ce294",
        "score_data": {
            "accuracy_score": 22,
            "processing_time": 0.025,
            "words_per_min": 0,
            "fluency_score": "",
            "speaking_duration": 0,
            "user_phoneme": "əʊ",
            "words_score_detail": [
                {
                    "word": "hello",
                    "phoneme_word": "heləʊ",
                    "accuracy_score": 22,
                    "phonemes_score_detail": [
                        {
                            "phoneme": "h",
                            "accuracy_score": 0,
                            "audio_link": "https://minio.ftech.ai/fcloud/phoneme_tips/39.wav",
                            "description": "<ul><li>nâng ngạc mềm lên cao</li><li>đẩy luồng khí thoát ra</li><li>dây thanh quản trong cổ họng không rung khi phát âm</li></ul>"
                        },
                        {
                            "phoneme": "e",
                            "accuracy_score": 0,
                            "audio_link": "https://minio.ftech.ai/fcloud/phoneme_tips/6.wav",
                            "description": "<ul><li>hạ thấp lưỡi một chút</li><li>miệng mở rộng sang hai bên</li><li>phát âm ngắn</li></ul>"
                        },
                        {
                            "phoneme": "l",
                            "accuracy_score": 0,
                            "audio_link": "https://minio.ftech.ai/fcloud/phoneme_tips/40.wav",
                            "description": "<ul><li>đặt mặt lưỡi chạm phần lợi ngay sau răng cửa hàm trên, chặn luồng khí trong miệng</li><li>đẩy luồng khí thoát ra ngoài qua hai bên của lưỡi</li><li>dây thanh quản trong cổ họng rung khi phát âm</li></ul>"
                        },
                        {
                            "phoneme": "əʊ",
                            "accuracy_score": 88,
                            "audio_link": "https://minio.ftech.ai/fcloud/phoneme_tips/12.wav",
                            "description": "<ul><li>bắt đầu với vị trí âm <b>/ə/</b> rồi nhanh chóng sang âm <b>/ʊ/</b></li><li>lưỡi nâng lên và lùi về phía sau</li><li>chuyển môi từ hơi mở sang hơi tròn</li><li>phần âm <b>/ə/</b> được phát âm dài và to hơn so với phần âm <b>/ʊ/</b></li></ul>"
                        }
                    ]
                }
            ],
            "phoneme_score_statistics": [
                {
                    "group_name": [
                        "/s/, /z/, /ʃ/"
                    ],
                    "phones": [
                        "s",
                        "z",
                        "ʃ"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/p/, /t/, /k/"
                    ],
                    "phones": [
                        "p",
                        "t",
                        "k"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/i/, /ɪ/"
                    ],
                    "phones": [
                        "i",
                        "ɪ"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/æ/, /ʌ/, /ɑ/"
                    ],
                    "phones": [
                        "æ",
                        "ʌ",
                        "ɑ"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/l/, /r/"
                    ],
                    "phones": [
                        "l",
                        "r"
                    ],
                    "score": [
                        0
                    ],
                    "mean_score": 0.0
                },
                {
                    "group_name": [
                        "Schwa: /ə/"
                    ],
                    "phones": [
                        "ə"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/eɪ/, /ɛ/, /æ/"
                    ],
                    "phones": [
                        "eɪ",
                        "ɛ",
                        "æ"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/ʃ/, /ʒ/, /tʃ/, /dʒ/"
                    ],
                    "phones": [
                        "ʃ",
                        "ʒ",
                        "tʃ",
                        "dʒ"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/h/, /f/, /v/"
                    ],
                    "phones": [
                        "h",
                        "f",
                        "v"
                    ],
                    "score": [
                        0
                    ],
                    "mean_score": 0.0
                },
                {
                    "group_name": [
                        "Nasals: /m/, /n/, /ɳ/"
                    ],
                    "phones": [
                        "m",
                        "ɳ",
                        "n"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "R sounds"
                    ],
                    "phones": [
                        "ɹ"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "/j/, /ʒ/, /dʒ/"
                    ],
                    "phones": [
                        "j",
                        "ʒ",
                        "dʒ"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "Dipthongs"
                    ],
                    "phones": [
                        "aɪ",
                        "eɪ",
                        "əʊ",
                        "aʊ",
                        "eə",
                        "iə",
                        "ɔɪ",
                        "ʊə",
                        "oʊ"
                    ],
                    "score": [
                        88
                    ],
                    "mean_score": 88.0
                },
                {
                    "group_name": [
                        "/w/, /v/, /b/"
                    ],
                    "phones": [
                        "w",
                        "v",
                        "b"
                    ],
                    "score": [],
                    "mean_score": "None"
                },
                {
                    "group_name": [
                        "TH sounds: /θ/, /ð/"
                    ],
                    "phones": [
                        "θ",
                        "ð"
                    ],
                    "score": [],
                    "mean_score": "None"
                }
            ],
            "request_id": "5d2400e5-b039-4219-b2af-f5ae733ce294",
            "kenlm_log": {
                "request_id": "5d2400e5-b039-4219-b2af-f5ae733ce294",
                "reference_text": "hello",
                "user_phoneme": "əʊ",
                "accuracy_score": 22,
                "latency": 0.025
            }
        },
        "minio_link": "https://minio.dev.ftech.ai/platform/ioe/5d2400e5-b039-4219-b2af-f5ae733ce294.wav",
        "audio_duration": 1
    }

HTTP Request

POST https://fcloud-streaming-socket-api.dev.ftech.ai/ioe/stop_stream

Parameter Request

Parameter Description
request_id Request_ID được trả về từ bước start recording

Body Request

Parameter Description
form-data File audio mà người dùng ghi âm

Android SDK

Install SDK Android

Setup gradle maven

allprojects {
    repositories {
        google()  
        mavenCentral()
        maven { url 'https://jitpack.io' } <- thêm dòng này
    }
}

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' } <- thêm dòng này
    }
}

Open file app/build.grade then add

dependencies {
...
      implementation "com.github.ftechmobile:ioe-sdk-android:1.0.7"
}

Init in file Application

override fun onCreate() {
        super.onCreate()
        ...
        FTechIOEManager.init(this)
    }

SDK Android Integration

Init

Tham số Kiểu Mô tả
appId String Application id
secretKey String IOE secret key
FTechIOEManager.initRecord(appId, secretKey, new IFTechIOECallback<Boolean>() {
            @Override
            public void onSuccess(Boolean info) {

            }

            @Override
            public void onFail(APIException error) {

            }

            @Override
            public void onCancel() {

            }
        });

Register callback

Sau khi đăng kí, SDK sẽ trả lại trạng thái tương ứng trong callback

Trạng thái Mô tả
initRecord Triệu gọi khi khởi tạo thành công
onStart Triệu gọi khi bắt đầu ghi âm thành công
onRecording Triệu gọi khi trong tiến trình ghi âm
onFail Triệu gọi khi có lỗi xảy ra trong quá trình ghi âm
onComplete Triệu gọi khi ghi âm thành công và trả lại kết quả
FTechIOEManager.registerRecordingListener(new IFTechRecordingCallback() {
            @Override
            public void onStart() {

            }

            @Override
            public void onRecording() {

            }

            @Override
            public void onFail(@NonNull APIException error) {

            }

            @Override
            public void onComplete(@NonNull StopRecordIOEResponse result) {

            }
        });

SDK Android Feature

Start record

Tham số Kiểu Mô tả
referenceText String Văn bản cần phát âm
languageAccent LanguageAccent Ngôn ngữ phát âm (Tùy chọn - Giọng Anh mặc định)
extraData String Dữ liệu kèm theo (Tùy chọn)
FTechIOEManager.startRecord(referText, accent, extraData);

Stop record

FTechIOEManager.stopRecord();

IOS SDK

Install SDK IOS

Dowload SDK

Bạn tải xuống tại đây

Add existing frameworks

  1. Trong project navigator, chọn project của bạn.
  2. Chọn your target
  3. Chọn tab Build Phases
  4. Mở phần mở rộng Link Binaries With Libraries
  5. Bấm vào nút +
  6. Bấm vào Add Other...
  7. Chọn framework FSound.xcframework

SDK IOS Integration

Init

Tham số Kiểu Mô tả
appId String Application id
secretKey String IOE secret key
        FTechIOEManager.instance().initRecord(appId: "", key: "")

Register callback

Sau khi đăng kí, SDK sẽ trả lại trạng thái tương ứng trong callback

Trạng thái Mô tả
initRecord Triệu gọi khi khởi tạo thành công
onStart Triệu gọi khi bắt đầu ghi âm thành công
onRecording Triệu gọi khi trong tiến trình ghi âm
onFail Triệu gọi khi có lỗi xảy ra trong quá trình ghi âm
onComplete Triệu gọi khi ghi âm thành công và trả lại kết quả
func initRecord(success: Bool) {
}

func onStart() {
}

func onRecording() {
}

func onFailure(error: FSoundError) {
}

func onCompletionRecord(data: StopRecordIOEResponse) {
}

SDK IOS Feature

Start record

Tham số Kiểu Mô tả
referenceText String Văn bản cần phát âm
languageAccent LanguageAccent Ngôn ngữ phát âm (Tùy chọn - Giọng Anh mặc định)
extraData String Dữ liệu kèm theo (Tùy chọn)
FTechIOEManager.instance().startRecord(referenceText: "")

Stop record

    FTechIOEManager.instance().stopRecord()