tencent cloud

Game Multimedia Engine

製品アップデート情報
製品紹介
製品概要
優位性のある特徴
製品機能
ユースケース
セキュリティコンプライアンス認証
初心者ガイド
SDKダウンロードガイド
製品機能体験
基本機能Demo
シーン化体験
コンソールガイド
使用量の表示
サービスの有効化
クイックスタート
Quick Integration of SDK
Quick Integration of Sample Project
基本機能開発ガイド
Authentication Key
リアルタイム音声ロール設定
音質設定
拡張機能開発ガイド
サーバー側のレコーディング
レンジボイス
3Dサウンド
効果音と伴奏
ネットワークオーディオストリーム転送ルーティング
カスタムメッセージチャネル
社内ファイアーフォール制限への対応について
Language Parameter Reference List
GMEルーム管理機能の導入
クライアントAPI
SDK for Unity
SDK for Unreal Engine
Cocos2D SDK
SDK for Windows
SDK for iOS
SDK for Android
SDK for macOS
H5 SDK
Electron SDK
SDK for Flutter
SDK Version Upgrade Guide
エラーコード
Toolchain
Server APIs
History
Introduction
API Category
Usage APIs
Recording APIs
Making API Requests
Voice Chat APIs
Application APIs
Data Types
Error Codes
よくある質問
製品機能質問
問題解決ガイド
課金について
Sample Projectの使用上の問題
一般的な質問
認証について
リアルタイム音声ルーム参加失敗について
リアルタイム音声利用時に音声が聞こえない問題とオーディオ関連について
ネットワークについて
ボイス・ツー・テキスト変換について
プロジェクトエクスポートについて
Service Agreement
Service Level Agreement
お問い合わせ
用語集
GME ポリシー
データ処理とセキュリティ契約
プライバシーポリシー

Unreal SDKのクイック導入

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-10-16 19:47:54
開発者がGME製品APIのデバッグアクセスを行いやすいように、ここで、Unreal Engine開発に適用されるクイックアクセスドキュメントを説明します。
GMEクイックスタート文書は、ユーザーのアクセスを助けるための最も主要なアクセスインターフェースのみを提供しています。

GME利用上の重要事項

GMEは2つの部分に分かれます。リアルタイム音声サービス、音声メッセージおよびテキスト変換サービスを提供しており、これらのサービスの利用はInitやPollなどのコアインターフェースに依存しています。
关于 Init 接口
例えば、リアルタイムの音声サービスを使用する同時に音声メッセージ・サービスも使用する場合、Init初期化インターフェースを1回だけ呼び出す必要があります

インターフェース呼び出しのフローチャート


image



統合の手順

SDKの統合

プロジェクトにSDKを統合するには、Unreal SDK統合ドキュメントをご参照ください。

コアインターフェース

リアルタイム音声

音声メッセージ

コアインターフェースのアクセス

1. SDKのダウンロード

ダウンロード案内ページにアクセスして、必要なクライアンSDKをダウンロードします

2. ヘッダーファイルを取り込む

#include "tmg_sdk.h"

class UEDEMO1_API AUEDemoLevelScriptActor : public ALevelScriptActor, public ITMGDelegate
{
public:
...
private:
...

3. シングルトンの設定

EnterRoom関数を呼び出す前に、ITMGContextの取得が必要です、全ての呼び出しはITMGContextから始まっており、ITMGDelegateによってコールバックでアプリケーションに返送されています、事前に設定してください。

サンプルコード

ITMGContext* context = ITMGContextGetInstance();
context->SetTMGDelegate(this);

4. SDKを初期化する

このインターフェースはGMEサービスの初期化に使用され、アプリケーションの初期化時にアプリケーション側で呼び出すことをお勧めします。
OpenIdはユーザーを一意に識別するために使用されます。現在はINT64のみがサポートされています。ルールはApp開発者が独自に設定し、App内で重複しないようにしてください
ユーザーがログインアカウントを切り替えた場合、Uninitを呼び出してから新しいOpenIdを使用してGMEサービスを再Initしてください

関数のプロトタイプ

//class ITMGContext
ITMGContext virtual int Init(const char* sdkAppId, const char* openId)
パラメータ
タイプ
意味
sdkAppId
const char*
Tencent CloudコンソールのGME サービスが提供するAppId。
OpenId
const char*
OpenIdはInt64型のみをサポートします(stringに変換されて渡されます)。

サンプルコード

std::string appid = TCHAR_TO_UTF8(CurrentWidget->editAppID->GetText().ToString().operator*());
std::string userId = TCHAR_TO_UTF8(CurrentWidget->editUserID->GetText().ToString().operator*());
ITMGContextGetInstance()->Init(appid.c_str(), userId.c_str());

5. イベントコールバックのトリガー

updateで周期的にPollを呼び出すことで、イベントのコールバックをトリガできます。GMEは定期的にPoll APIを呼び出してイベントコールバックをトリガしてください。Pollが呼び出されないと、SDKサービス全体が異常に動作します。 詳細については、DemoのUEDemoLevelScriptActor.cppファイルをご参照ください。

サンプルコード

//ヘッダファイルにおける宣言
virtual void Tick(float DeltaSeconds);

void AUEDemoLevelScriptActor::Tick(float DeltaSeconds) {
Super::Tick(DeltaSeconds);
ITMGContextGetInstance()->Poll();
}

6. コールバックの設定

インターフェースなどは、Delegate方式でアプリケーションにコールバック通知を送信します、メッセージタイプはITMG_MAIN_EVENT_TYPEを参考してください、Windowsプラットフォームにおけるdataはjson文字列の形であり、具体的なkey-valueは、説明ドキュメントを参考してください。

サンプルコード

//関数の実現:
//UEDemoLevelScriptActor.h:
class UEDEMO1_API AUEDemoLevelScriptActor : public ALevelScriptActor, public SetTMGDelegate
{
public:
void OnEvent(ITMG_MAIN_EVENT_TYPE eventType, const char* data);

//UEDemoLevelScriptActor.cpp:
void AUEDemoLevelScriptActor::OnEvent(ITMG_MAIN_EVENT_TYPE eventType, const char* data){
//ここで、eventTypeの判断と操作を行います
}

7. 認証情報

関連する機能の暗号化と認証のためのAuthBufferを生成します。音声メッセージやテキスト変換の認証を取得する場合、ルーム番号のパラメータをnullに設定してください。

関数のプロトタイプ

int QAVSDK_AuthBuffer_GenAuthBuffer(unsigned int dwSdkAppID, const char* strRoomID, const char* strOpenID,
const char* strKey, unsigned char* strAuthBuffer, unsigned int bufferLength);
参数
タイプ
意味
dwSdkAppID
int
Tencent CloudコンソールからのAppId番号
strRoomID
char*
ルーム番号です。最大127バイトまでをサポートします
strOpenID
char*
ユーザーID。Initの場合のopenIDと同じです。
strKey
char*
Tencent Cloudコンソールからの権限キー
strAuthBuffer
char*
返されたauthbuff
bufferLength
int
渡されるauthbuffの長さです。推奨値は500です

サンプルコード

unsigned int bufferLen = 512;
unsigned char retAuthBuff[512] = {0};
QAVSDK_AuthBuffer_GenAuthBuffer(atoi(SDKAPPID3RD), roomId, "10001", AUTHKEY,retAuthBuff,bufferLen);

リアルタイム音声アクセス

1. ルームに参加

生成された認証情報を用いて入室します。ルームに参加するとき、デフォルトでマイクとスピーカーはオフです。インターフェースの戻り値が0の場合は、正常に入室することでなく、呼び出しインタフェースが正常に終了したことを意味します。
ルームオーディオタイプについては、音質選択をご参照ください。

関数のプロトタイプ

ITMGContext virtual int EnterRoom(const char* roomID, ITMG_ROOM_TYPE roomType, const char* authBuff, int buffLen)

パラメータ
タイプ
意味
roomID
char*
ルーム番号であり、最大127バイトまでをサポートします
roomType
ITMG_ROOM_TYPE
ルームオーディオタイプ
authBuffer
char*
認証コード
buffLen
int
認証コードの長さ

サンプルコード

ITMGContext* context = ITMGContextGetInstance();
context->EnterRoom(roomID, ITMG_ROOM_TYPE_FLUENCY, (char*)retAuthBuff,bufferLen);

入室イベントのコールバック

入室が完了すると入室通知が届き、監視処理関数で判断して処理します。err=0のコールバックは成功を意味し、つまりこの時点の入室が成功しました。課金が開始されます。本日の合計通話時間が700分未満の場合は無料です。
サンプルコードコールバック処理の関連参照コード
void UBaseViewController::OnEvent(ITMG_MAIN_EVENT_TYPE eventType, const char *data) {

FString jsonData = FString(UTF8_TO_TCHAR(data));
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(FString(UTF8_TO_TCHAR(data)));
FJsonSerializer::Deserialize(Reader, JsonObject);


if (eventType == ITMG_MAIN_EVENT_TYPE_ENTER_ROOM) {
int32 result = JsonObject->GetIntegerField(TEXT("result"));
FString error_info = JsonObject->GetStringField(TEXT("error_info"));
if (result == 0) {
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 20.0f, FColor::Yellow, TEXT("Enter room success."));
}
else {
FString msg = FString::Printf(TEXT("Enter room failed. result=%d, info = %ls"), result, *error_info);
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 20.0f, FColor::Yellow, *msg);
}
onEnterRoomCompleted(result, error_info);
}
}
エラーコード
エラーコードの値
原因と解決策
7006
次の理由で認証に失敗しました:
AppIDが存在しないか、エラーです
authbuff認証エラーです
認証期限切れです
openIdが仕様に準拠していません
7007
他のルームにいます
1001
ルーム参加中でこの操作を繰り返しています。コールバックが戻るまで、ルーム参加インターフェースを呼び出さないことをお勧めします
1003
ルームに参加してルームにいますが、もう1回ルーム参加インターフェースを呼び出しました
1101
SDKが初期化されていること、openIdが規則に準拠していること、またはインターフェースが同じスレッドで呼び出されていること、およびPollインタフェースが正常に呼び出されていることを確認してください

2. マイクのオン/オフ

このインターフェースは、マイクのオン/オフに使用されます。入室する際、マイクとスピーカーはデフォルトでオフになっています。

サンプルコード

void UBaseViewController::OnEvent(ITMG_MAIN_EVENT_TYPE eventType, const char *data) {

FString jsonData = FString(UTF8_TO_TCHAR(data));
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(FString(UTF8_TO_TCHAR(data)));
FJsonSerializer::Deserialize(Reader, JsonObject);


if (eventType == ITMG_MAIN_EVENT_TYPE_ENTER_ROOM) {
int32 result = JsonObject->GetIntegerField(TEXT("result"));
FString error_info = JsonObject->GetStringField(TEXT("error_info"));
if (result == 0) {
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 20.0f, FColor::Yellow, TEXT("Enter room success."));
// マイクの起動
ITMGContextGetInstance()->GetAudioCtrl()->EnableMic(true);
}
else {
FString msg = FString::Printf(TEXT("Enter room failed. result=%d, info = %ls"), result, *error_info);
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 20.0f, FColor::Yellow, *msg);
}
onEnterRoomCompleted(result, error_info);
}
}

3. スピーカーのオン/オフ

このインターフェースは、スピーカーのオン/オフに使用されます。

サンプルコード

void UBaseViewController::OnEvent(ITMG_MAIN_EVENT_TYPE eventType, const char *data) {

FString jsonData = FString(UTF8_TO_TCHAR(data));
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(FString(UTF8_TO_TCHAR(data)));
FJsonSerializer::Deserialize(Reader, JsonObject);


if (eventType == ITMG_MAIN_EVENT_TYPE_ENTER_ROOM) {
int32 result = JsonObject->GetIntegerField(TEXT("result"));
FString error_info = JsonObject->GetStringField(TEXT("error_info"));
if (result == 0) {
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 20.0f, FColor::Yellow, TEXT("Enter room success."));
//スピーカーをオンにする
ITMGContextGetInstance()->GetAudioCtrl()->EnableSpeaker(true);
}
else {
FString msg = FString::Printf(TEXT("Enter room failed. result=%d, info = %ls"), result, *error_info);
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 20.0f, FColor::Yellow, *msg);
}
onEnterRoomCompleted(result, error_info);
}
}


4. 退室

このインターフェースを呼び出すと、退室することができます。処理の実行は退室のコールバックを待つ必要があります。

サンプルコード

ITMGContext* context = ITMGContextGetInstance();
context->ExitRoom();


退室コールバック

退室してからはコールバックが発生します、サンプルコードは次の通りです:
void TMGTestScene::OnEvent(ITMG_MAIN_EVENT_TYPE eventType,const char* data){
switch (eventType) {
case ITMG_MAIN_EVENT_TYPE_EXIT_ROOM:
{
//処理します
break;
}
}
}


音声メッセージの導入

1. 認証初期化

SDKを初期化してから認証の初期化を呼び出します。authBufferの取得については、前記のリアルタイム音声の認証情報インターフェースgenAuthBufferをご参照ください。

関数のプロトタイプ

ITMGPTT virtual int ApplyPTTAuthbuffer(const char* authBuffer, int authBufferLen)

パラメータ
タイプ
意味
authBuffer
char*
認証
authBufferLen
int
認証の長さ

サンプルコード

ITMGContextGetInstance()->GetPTT()->ApplyPTTAuthbuffer(authBuffer,authBufferLen);


2. ストリーミング音声認識を起動

このインターフェースは、ストリーミング音声識別の開始に使われています。コールバックにおいて、音声はリアルタイムでテキストに変換されて返されます。言語を指定し識別することができるし、音声から識別した情報を指定した言語に翻訳してから返すこともできます。録音の停止にはStopRecordingを呼び出します。停止後にコールバックが発生します。

関数のプロトタイプ

ITMGPTT virtual int StartRecordingWithStreamingRecognition(const char* filePath)
ITMGPTT virtual int StartRecordingWithStreamingRecognition(const char* filePath,const char* translateLanguage,const char* translateLanguage)

参数
タイプ
意味
filePath
char*
ボイスの保存パス
speechLanguage
char*
指定した言語のテキストに識別するパラメータです。パラメータについては、音声のテキスト変換の言語パラメータ参照リストをご参照ください
translateLanguage
char*
指定した言語のテキストに翻訳するパラメータです。パラメータについては、音声のテキスト変換の言語パラメータ参照リストをご参照ください。(このパラメータは一時的に無効です。speechLanguageと同じのパラメータを入力してください)

サンプルコード

ITMGContextGetInstance()->GetPTT()->StartRecordingWithStreamingRecognition(filePath,"cmn-Hans-CN","cmn-Hans-CN");


ストリーミング音声識別コールバック

ストリーミング音声認識を開始した後、コールバック関数OnEventでコールバックメッセージを受信する必要があります。イベントメッセージはITMG_MAIN_EVNET_TYPE_PTT_STREAMINGRECOGNITION_COMPLETEがあり、録音を停止して認識を完了した後にテキストを返します。これは、話が終わってから認識されたテキストを返すことに相当します。
OnEvent関数で、必要に応じて適切なイベントメッセージを判断します。渡されるパラメータには次の4つの情報が含まれます。
メッセージ名称
意味
result
ストリーミングボイス認識が完了したかどうかを判断するための戻りコード
text
ボイステキスト変換で認識されたテキスト
file_path
録音を保存するローカルアドレス
file_id
録音はバックグラウンドのURLアドレスにあり、録音はサーバーで90日間保存されます
サンプルコード
void UBaseViewController::OnEvent(ITMG_MAIN_EVENT_TYPE eventType, const char *data) {

FString jsonData = FString(UTF8_TO_TCHAR(data));
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(FString(UTF8_TO_TCHAR(data)));
FJsonSerializer::Deserialize(Reader, JsonObject);
...
else if(eventType == ITMG_MAIN_EVNET_TYPE_PTT_STREAMINGRECOGNITION_COMPLETE)
{
int32 nResult = JsonObject->GetIntegerField(TEXT("result"));
FString text = JsonObject->GetStringField(TEXT("text"));
FString fileid = JsonObject->GetStringField(TEXT("file_id"));
FString file_path = JsonObject->GetStringField(TEXT("file_path"));
onPttStreamRecognitionCompleted(nResult,file_path, fileid, text);
}
else if(eventType == ITMG_MAIN_EVNET_TYPE_PTT_STREAMINGRECOGNITION_IS_RUNNING)
{
int32 nResult = JsonObject->GetIntegerField(TEXT("result"));
FString text = JsonObject->GetStringField(TEXT("text"));
FString fileid = TEXT("STREAMINGRECOGNITION_IS_RUNNING");
FString file_path = JsonObject->GetStringField(TEXT("file_path"));
onPttStreamRecognitionisRunning(nResult,file_path, fileid, text);
}
}
エラーコード
エラーコード
意味
処理方式
32775
ストリーミング音声をテキストに変更できませんが、録音は成功しました
UploadRecordedFileインターフェースを呼び出して録音をアップロードし、SpeechToTextインターフェースを呼び出して音声を文字に変換します
32777
ストリーミング音声をテキストに変更できませんが、録音とアップロードは成功しました
返されたメッセージには正常にアップロードしたバックグラウンドURLがあり、SpeechToTextインターフェースを呼び出して音声から文字への変換操作を行います
32786
ストリーミング音声をテキストに変更できませんでした
ストリーミングレコーディングステータスでは、ストリーミングレコーディングインターフェースの実行結果が返されるまで待ってください

3. 録音を停止

このインターフェースは、録音の停止に使われています。このインターフェースが非同期インターフェースであるため、録音を停止した後には録音完了のコールバックがあります。コールバックが成功してから、録音ファイルが利用できるようになります。

関数のプロトタイプ

ITMGPTT virtual int StopRecording()

サンプルコード

ITMGContextGetInstance()->GetPTT()->StopRecording();


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック