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 Sample Projectのクイックスタート

PDF
フォーカスモード
フォントサイズ
最終更新日: 2024-01-18 15:42:47
このドキュメントでは、GME Unreal Sample Projectをすばやく実行し、プロジェクトにプロジェクトサンプルコードを導入する方法について説明します。

Unreal Sample Projectのクイックスタート

環境要件

UnrealEngine 4.22以降のバージョンを推奨します。
Microsoft Visual Studio。
UnrealEngineプロジェクトを実行できる構成環境。

前提条件

事前にGMEリアルタイム音声、音声メッセージサービスを有効化し、AppIdとKeyを取得してください。GMEサービスの有効化については、サービスの有効化をご参照ください。appIdはコンソールのAppID、authKeyはコンソールの秘密鍵に対応します。

操作手順

ステップ1:プロジェクトのダウンロード

ダウンロードガイドでUnreal Sample Projectをダウンロードしてください。UE5とUE4ではDemoの設定が異なるため、対応するエンジンバージョンのSample Projectをダウンロードする必要があります。




ステップ2:プロジェクトの設定

ダウンロード後にプロジェクトディレクトリを開き、パスSource\\UEDemo1からUserConfig.cppを探し、図中の赤枠内のappID及びappKeyを申請したGMEコンソールサービス管理-アプリケーション設定のAppID及び権限キーに変更します。




ステップ3:コンパイルと実行

1)プログラムの実行
「エディタを実行」ボタン

をクリックして、実行プログラムに移行します。



2)初期化
UserID:openIDに相当します。openIDはアプリケーション内でユーザを識別する唯一の識別子です。各端末で一意のopenidを確保しなければなりません。
Voice Chat:リアルタイム音声機能インターフェース。
Voice Message:音声メッセージ機能のインターフェース。
Loginをクリックして初期化を行い、Voice Chatをクリックしてリアルタイムボイスルームの設定画面を開きます。



3)リアルタイム音声ルームへ参加
RoomId:部屋番号です。同じルームのメンバーが音声で話すことができます。
RoomType:Fluencyを使用してルームに参加してください。
JoinRoom:音声ルームに参加します。
Back:前の画面に戻ります。
リアルタイムボイスルーム番号を設定したら、JoinRoomをクリックして、リアルタイムボイスルームに入ります。



4)リアルタイム音声機能 ルームに参加したRoomidとローカル端末のopenidが画面に表示されます。
Mic:マイクをオンにします。
Speaker:スピーカーをオンにします。
3D Voice Effect:3Dサウンドをオンにします。
Voice Change:ボイス・チェンジエフェクトを選択します。
ローカル端末でMicおよびSpeakerにチェックを入れ、もう一方の端末の機器も以上の手順を繰り返し、同じルームに参加し、MicおよびSpeakerにチェックを入れ、互いにコミュニケーションを行うことができます。 両端末とも3D Voice Effectにチェックを入れ、キーボード【A】【S】【D】【W】で方位を変え、3D音声方位感を体験できます。



5)音声メッセージ機能
Language:テキスト変換対象音声を選択し、例えば中国語を話す場合は北京語を選択します。
Audio:録音後にクリックすると聴くことができます。
Audio-to-Text:音声から変換されるテキスト内容。
Push To Talk:長押しすると録音できます。
Back:前の画面に戻ります。
Push to Talkボタンを長押ししたままマイクに向かって話しかけ、ボタンを離すと音声がテキストに変換されて画面に表示されます。




Sample Projectコードの説明

GMEリアルタイム音声を利用する主な手順は、Init>EnterRoom>EnableMic>EnableSpeakerです。Sample Projectの主なコードは、BaseViewController.cppおよびExperientialDemoViewController.cppにあります。

初期化関連

初期化に関連するコードは、BaseViewController.cppファイルのInitGME関数にあります。これには、初期化、音声メッセージの認証初期化、およびコールバックTMGDelegateの設定が含まれます。
int UBaseViewController::InitGME(std::string sdkAppId, std::string sdkAppKey, std::string userId) {

int nAppid = atoi(sdkAppId.c_str());
int ret = ITMGContextGetInstance()->Init(sdkAppId.c_str(), userId.c_str());
ITMGContextGetInstance()->SetTMGDelegate(this);

int RetCode = (int) ITMGContextGetInstance()->CheckMicPermission();
FString msg = FString::Printf(TEXT("check Permission retcode =%d"), RetCode);
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 10.0f, FColor::Yellow, *msg);

char strSig[128] = {0};
unsigned int nLength = 128;
nLength = QAVSDK_AuthBuffer_GenAuthBuffer(nAppid, "0", userId.c_str(), sdkAppKey.c_str(), (unsigned char *)strSig, nLength);
ITMGContextGetInstance()->GetPTT()->ApplyPTTAuthbuffer(strSig, nLength);

m_appId = sdkAppId;
m_appKey = sdkAppKey;
m_userId = userId;
m_isEnableTips = false;
m_tipsMark = 0;
return ret;
}
GMEを使用するにはPoll関数を定期的に呼び出してください。UEDemoLevelScriptActor.cppスクリプトのTickで呼び出されます。
void AUEDemoLevelScriptActor::Tick(float DeltaSeconds) {
Super::Tick(DeltaSeconds);

m_pTestDemoViewController->UpdateTips();
m_pCurrentViewController->UpdatePosition();
ITMGContextGetInstance()->Poll();
}

入室関連

入室関連のコードは、BaseViewController.cppファイルのEnterRoom関数にあります。
void UBaseViewController::EnterRoom(std::string roomID, ITMG_ROOM_TYPE roomType) {
int nAppid = atoi(m_appId.c_str());
UserConfig::SetRoomID(roomID);

char strSig[128] = {0};
unsigned int nLength = 128;
nLength = QAVSDK_AuthBuffer_GenAuthBuffer(nAppid, roomID.c_str(), m_userId.c_str(), m_appKey.c_str(), (unsigned char *)strSig, nLength);
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 10.0f, FColor::Yellow, TEXT("onEnterRoom"));
ITMGContextGetInstance()->EnterRoom(roomID.c_str(), roomType, strSig, nLength);
}
入室のコールバックは同じスクリプト内のOnEvent関数中にあります。
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);

デバイスをオンにする

正常に入室すると、デバイスをオンにします。関連コードはExperientialDemoViewController.cppにあります。
void UExperientialDemoViewController::onCheckMic(bool isChecked) {
//GEngine->AddOnScreenDebugMessage(INDEX_NONE, 10.0f, FColor::Yellow, L"onCheckMic");
ITMGContext *pContext = ITMGContextGetInstance();
if (pContext) {
ITMGAudioCtrl *pTmgCtrl = pContext->GetAudioCtrl();
if (pTmgCtrl) {
pTmgCtrl->EnableMic(isChecked);
}
}
}

void UExperientialDemoViewController::onCheckSpeaker(bool isChecked) {
//GEngine->AddOnScreenDebugMessage(INDEX_NONE, 10.0f, FColor::Yellow, L"onCheckSpeaker");
ITMGContext *pContext = ITMGContextGetInstance();
if (pContext) {
ITMGAudioCtrl *pTmgCtrl = pContext->GetAudioCtrl();
if (pTmgCtrl) {
pTmgCtrl->EnableSpeaker(isChecked);
}
}
}

3Dサウンド関連

3Dサウンドの導入について、3Dサウンドドキュメントをご参照ください。プロジェクトでは、まず3Dサウンド機能が初期化され、関連コードはExperientialDemoViewController.cppにあります。
void UExperientialDemoViewController::onCheckSpatializer(bool isChecked) {
char buffer[256]={0};
// snprintf(buffer, sizeof(buffer), "%s3d_model", getFilePath().c_str());
snprintf(buffer, sizeof(buffer), "%sgme_2.8_3d_model.dat", getFilePath().c_str());
int ret1 = ITMGContextGetInstance()->GetAudioCtrl()->InitSpatializer(buffer);
int ret2 = ITMGContextGetInstance()->GetAudioCtrl()->EnableSpatializer(isChecked, false);
FString msg = FString::Printf(TEXT("InitSpatializer=%d, EnableSpatializer ret=%d"), ret1, ret2);
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 10.0f, FColor::Yellow, msg);
}
UEDemoLevelScriptActor.cppスクリプトのTickでUpdatePosition関数が呼び出されます。
void AUEDemoLevelScriptActor::Tick(float DeltaSeconds) {
Super::Tick(DeltaSeconds);

m_pTestDemoViewController->UpdateTips();
m_pCurrentViewController->UpdatePosition();
ITMGContextGetInstance()->Poll();
}


void UBaseViewController::UpdatePosition() {
if (!m_isCreated)
return;

ITMGRoom *pTmgRoom = ITMGContextGetInstance()->GetRoom();
if (!pTmgRoom)
{
return;
}

int nRange = GetRange();
pTmgRoom->UpdateAudioRecvRange(nRange);

FVector cameraLocation = UGameplayStatics::GetPlayerCameraManager(m_pActor->GetWorld(), 0)->GetCameraLocation();
FRotator cameraRotation = UGameplayStatics::GetPlayerCameraManager(m_pActor->GetWorld(), 0)->GetCameraRotation();

FString msg = FString::Printf(TEXT("location(x=%.2f,y=%.2f,z=%.2f), rotation(pitch=%.2f,yaw=%.2f,roll=%.2f)"),
cameraLocation.X, cameraLocation.Y, cameraLocation.Z, cameraRotation.Pitch, cameraRotation.Yaw, cameraRotation.Roll);

int position[] = { (int)cameraLocation.X,(int)cameraLocation.Y, (int)cameraLocation.Z };
FMatrix matrix = ((FRotationMatrix)cameraRotation);
float forward[] = { matrix.GetColumn(0).X,matrix.GetColumn(1).X,matrix.GetColumn(2).X };
float right[] = { matrix.GetColumn(0).Y,matrix.GetColumn(1).Y,matrix.GetColumn(2).Y };
float up[] = { matrix.GetColumn(0).Z,matrix.GetColumn(1).Z,matrix.GetColumn(2).Z };


pTmgRoom->UpdateSelfPosition(position, forward, right, up);
SetPositionInfo(msg);
}

ExperientialDemoViewController.cppで3Dサウンドをオンにします。
void UExperientialDemoViewController::onCheckSpatializer(bool isChecked) {
char buffer[256]={0};
// snprintf(buffer, sizeof(buffer), "%s3d_model", getFilePath().c_str());
snprintf(buffer, sizeof(buffer), "%sgme_2.8_3d_model.dat", getFilePath().c_str());
int ret1 = ITMGContextGetInstance()->GetAudioCtrl()->InitSpatializer(buffer);
int ret2 = ITMGContextGetInstance()->GetAudioCtrl()->EnableSpatializer(isChecked, false);
FString msg = FString::Printf(TEXT("InitSpatializer=%d, EnableSpatializer ret=%d"), ret1, ret2);
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 10.0f, FColor::Yellow, msg);
}



ヘルプとサポート

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

フィードバック