シナリオ紹介
iiMediaのデータによると、2021年中国のオンラインカラオケユーザーの規模は約5.1億人で、普及率は約49.7%です。オンラインカラオケはより強い没入感の体験を提供し、多様な遊び方も異なるユーザーグループの個性的なニーズに応えています。現在、オンライン総合エンターテインメント分野の主要なプロジェクトの1つとなっています。ネットワーク技術の革新に基づき、オンラインカラオケAppは多様な歌唱モードと遊び方を次々と導入し、機能が豊富になることでオンラインカラオケAppの実用性と遊びやすさが向上しています。本文では、後続の章でTencent Real-Time Communication TRTCに基づくオンラインカラオケシナリオソリューションを詳しく紹介します。
実装方法
|
ルーム管理 | ルームリスト、ルームの作成、ルームの参加、ルームから退出、ルームの削除 |
座席管理 | マイクオン/オフ、マイク管理、マイク交換、マイクのロック、マイクオン招待、マイクミュート |
曲予約管理 | プレイリスト表示、曲検索、曲予約、マイク順番待ち、予約済みリスト |
カラオケ管理 | 歌プレイ、開始/停止/曲の切り替え、伴奏とボーカルの音量調整、エコー/エフェクト、原曲と伴奏の切り替え、歌詞同期 |
スコアリング管理 | 歌スコア、音程ライン表示 |
オンラインカラオケシナリオの全体的な業務フローは以下の図に示されています。ルームマスターがカラオケルームを作成し、ユーザーは興味のある歌のルームを選んで参加することができます。ルームに入った後、ユーザーはマイクオンにしてインタラクションに参加することができ、マイクオンにした後は、好きな曲を選んで予約し、マイクの順番を待ちます。順番が来たら、伴奏に合わせて歌うことができます。もちろん、ユーザーは直接マイクオンにして合唱に参加することも選択できます。これらは2つの異なるカラオケの遊び方です。歌唱中には、一節ごとの歌唱に対する音程のスコアリングがあり、歌唱が終わった後には、全曲の歌唱に対するスコアリングもあります。
ルーム管理
ルーム管理モジュールは、ルームリストのメンテナンスを主に担当し、ルームの作成、ルームへの参加、ルームからの退出、ルームの削除などの機能を含んでいます。また、カラオケルームは通常のルームとは異なり、関連する管理コンポーネントを起動するため、専用のカラオケルーム識別子が必要です:曲予約管理、カラオケ管理、スコアリング管理など。 ルームの作成:ユーザーが業務システムにログインした後、ルームを作成できます。ルームを作成した後、ルームリストには追加する操作が必要です。
ルームに参加:ユーザーは既存のルームに参加することができ、参加後は現在のルームのメンバーリストに追加する操作が必要です。
ルームから退出:ユーザーは現在のルームを退出することができます。ルームを退出した後、現在のルームの人員リストから削除する操作が必要です。
ルームの削除:全てのユーザーがルームから退出した後、ルームを削除する必要があり、ルームを削除した後はルームリストから削除する操作が必要です。
説明:
ルーム管理はオンラインカラオケを実装するための必要なモジュールですが、主要な機能モジュールではありません。具体的には業務システムおよびIM&TRTC SDKと組み合わせて実装できます。詳細はボイスチャットルーム-ルーム管理を参照してください。 座席管理
カラオケルーム内のマイクポジションは一般的に順序があり、限られています。座席管理は主に、業務シナリオに基づいてルーム内のマイクポジションの数を定義し、現在のルームのすべてのマイクの状態を管理することを担当します。座席管理には、マイクオンオフ、マイク交換、マイクのロック、マイクオン招待、マイクのミュートなどが含まれます。
ユーザーがルームに入った後、空いているマイクポジションにのみマイクオンの申請ができます。
ルームマスターがユーザーのマイクオンを承認した後、対応するマイクポジションの状態を非アイドル状態に変更する必要があります。
ユーザーがプッシュを停止し、マイクオフした後、対応するマイクポジションの状態をアイドル状態に戻す必要があります。
ルームマスターは、マイクポジションをロック、マイクオン招待、強制マイクオフ、マイク禁言などの権限を持っています。
説明:
座席管理はオンラインカラオケを実装するための必要なモジュールですが、主要な機能モジュールではありません。具体的には業務システムおよび&IM&TRTC SDKと組み合わせて実装できます。詳細はボイスチャットルーム-座席管理を参照してください。 曲予約管理
基本紹介
曲予約管理はオンラインカラオケシナリオの中で比較的重要な部分で、主に次の機能があります。プレイリストの展示、曲の検索、曲予約と順番待ち、予約曲のリスト。各カラオケルームは、予約曲のリストと自動で順番を待つ機能を維持する必要があります。この部分は業務バックエンドで実現する必要があります。一方、プレイリストの展示、曲の検索など音楽リソースに関連する部分は、海外のユーザーは音楽ライブラリのような製品と組み合わせて実現することをお勧めします。
実装の流れ
曲予約管理全体において、主に関わるのは業務端App、業務バックエンド、音楽ライブラリーバックエンドであり、それぞれの機能は以下の通りです。
業務端App:
曲予約インターフェースを呼び出して、曲情報をアップロードします。
曲切り替えインターフェースを呼び出して、業務バックエンドに通知します。
シング確認インターフェースを呼び出して、業務バックエンドに通知します。
業務バックエンド:
予約済み曲リストを管理します。
業務端Appに通知を送信して曲を切り替えます。
音楽ライブラリ:
TRTCが再生可能な正規の音楽リソースを提供します。
音楽リソースにマッチした歌詞ファイルや楽譜ファイルなどを提供します。
カラオケ管理
カラオケシステムの主な機能には、カラオケプレイ、開始/停止/曲の切り替え、伴奏とボーカルの音量調整、エコー/エフェクト、原曲と伴奏の切り替え、歌詞同期などが含まれます。以下では、マイク順番待ちソロとリアルタイム合唱の2つの典型的なカラオケのプレイ方法を通じて、カラオケ管理モジュールの実装プロセスを詳しく紹介します。
マイク順番待ちソロ
マイク順番待ちソロ:主に多人数のカラオケシナリオで、アンカー/視聴者がマイクオンした後に、曲予約が可能となり、曲予約に成功すると、曲予約画面に一覧表示されます。誰かが予約した曲の順番が来たら、その人が曲の伴奏を再生し、歌い始めてスコアリングを行います。
ソリューションアーキテクチャ
全体的な計画では、主に音楽ライブラリを使用して曲や歌詞などのリソースを提供し、TRTCを使用して歌手ボーカルのプッシュ、曲の伴奏の再生およびプッシュを実現します。全体のソリューションアーキテクチャは以下の通りです。
具体的な実装
マイク順番待ちソロシナリオでは、異なるロールが異なる実装を持っており、歌い手と視聴者の2種類のロールが存在します。そのロールの説明と違いについては、以下の表を参照してください。
|
歌い手 | カラオケルームの歌い手は、ルームのアンカー/視聴者が曲予約した後に変化したものですが、マイクオンでなければ曲予約できず、マイクオフで自動的に予約した曲が切り替わります。 | ロールは必ずアンカーでなければなりません オーディオ・ビデオアップストリームをプッシュ(ビデオがない場合はブラックフレームをプッシュ) BGMを再生 SEI情報を送信(歌詞情報を送信) 曲予約 |
視聴者 | カラオケルームの視聴者に、歌い手/他の人のメディアストリームを再生します。 | ロールは視聴者で、マイクオンしてアンカーになることもできます。 オーディオ・ビデオストリームをプル SEI情報を受信(歌詞情報を受信) |
実装の流れ
歌い手
1. アンカー/視聴者、TRTCのルームを作成/参加し、マイクオン後、曲を予約して歌い手になる。
2. 曲の歌い手の順番になったら、歌い手は曲/歌詞をダウンロードし、BGMインターフェースを通じて曲を再生する必要があります。
3. 歌い手にビデオのアップストリームがない場合、ビデオアップストリームを有効にする必要があります。
4. SEI情報で全員の歌詞進行状況を同期します。
5. 歌い手がマイクオフになると、歌い手が予約したすべての曲がクリアされ、元のロールに戻ります。
6. アンカー/視聴者、TRTCルームを破棄/退出。
注意:
マイクオンのアンカー/視聴者は自分自身に曲を予約をすることも、他人に曲を予約をすることもできますが、対応する歌い手がBGMを再生しなければなりません。そうでないと、遅延の原因で歌い手と曲が同期しない問題が発生します(遅延は約300ms以上)。
視聴者
1. アンカー/交流アンカー/視聴者、TRTCルームを作成/参加。
2. ルームの曲の変化をリスニングし、歌詞を読み込みます。
3. 歌い手のストリームをプルします。
4. 歌い手が送信したSEI情報を解析し、歌詞を同期します。
リアルタイム合唱
リアルタイム合唱とは、各クライアントが交流し、同時に歌曲の伴奏を再生し、その後に接続して合唱を行うことを指します。デュエルモードでは、二人が互いの声を聞くことができます。多人数モードでは、合唱者同士がお互いの声を聞くことができ、ほとんど遅延を感じることなく、真の意味でのリアルタイム合唱を実現しています。
ソリューションアーキテクチャ
メディアストリームの面では、合唱者同士がお互いにプッシュ/プルを行い、同時に一人のリードシンガーが伴奏をアップロードし、他の合唱者はローカルで伴奏を再生し、NTPを通じて時間同期を行います。また、歌曲の伴奏と全ての合唱者の声は、ミキシングロボットを通じてミキシングされ、一つのストリームを生成し、TRTCそのストリームがルームにプッシュバックされ、視聴者は一つのストリームをプルすることで、各端で同期された音声を聞くことができ、複数人での合唱効果を実現します。リアルタイム合唱のソリューションアーキテクチャは以下の図に示されています。
このプランの利点は:
エンドツーエンドの遅延を低減。
ユーザーが途中で合唱に参加するソリューションを提供。
異なる端末間での伴奏、歌詞、ボーカルの正確な同期。
各端末のパフォーマンスとローカル時間の不正確さを改善し、ネットワーク環境が引き起こす遅延の影響を軽減します。
注意:
業務のニーズに応じて、完全なオーディオシナリオまたはオーディオ・ビデオシナリオのリアルタイム合唱プランを選択できます。完全なオーディオシナリオの場合は、ブラックフレームを挿入して歌詞同期用のSEIメッセージを送信する必要があります。
リードシンガーはサブインスタンスを使用して伴奏とボーカルを同時にアップロードする必要があります。他の合唱者はボイスストリームの相互プルのみで、ローカルで伴奏を再生します。視聴者はミキシングされたストリームミックスを1つだけプルする必要があります。
具体的な実装
オンラインカラオケルームでは、異なるユーザーロールには異なる機能権限と実装があり、3種類のロールに分けられます:リードシンガー、合唱、および視聴者。以下の表に示されています。
|
リードシンガー | リードシンガーは曲予約と合唱シグナルの送信を担当し、SEIの送信も行います。 | ロールはAnchor 伴奏とボーカルのアップストリーム 曲予約及び合唱の開始 ルームにオーディオ・ビデオストリームプッシュバック SEIメッセージを送信 |
合唱 | 合唱者は合唱シグナルを受信して処理し、マイクオンで合唱に参加できます。 | ロールはAnchor ボーカルのアップストリーム ローカルで伴奏を再生 合唱受信 |
視聴者 | カラオケルームに入った後、マイクオフでプルしている視聴者もマイクオンで合唱できます。 | ロールはAudience ストリームミックスをプル SEIメッセージを受信 マイクオン申請してAnchorになる |
実装の流れ
リードボーカル
1. リードシンガーが曲をリクエストし、合唱シグナルを送信する必要があります。
2. リードシンガーがサブインスタンスを作成してボーカルと伴奏をプッシュし、他の合唱者のボイスをプルします。
3. プッシュ後、リードシンガーがミキシング転送タスクを開始します。
4. 歌い始めたら、伴奏を再生し、再生進行状況のコールバックを通じて歌詞を同期します。
5. SEIで曲の進行状況を送信し、視聴者側で歌詞を同期させます。
6. すべての歌い手は、NTP校正を通じてローカルの曲の再生進行状況を調整する必要があります。
コーラス
1. 合唱者が一つのボイスストリームをプッシュし、マイクオンの合唱ユーザーのボイスストリームをプルします。
2. 合唱者は合唱シグナルをリスニング/受信し、伴奏の音楽リソースをプリロードする必要があります。
3. 歌い始めた後、ローカルで伴奏を再生し、合唱者は再生進行状況のコールバックを通じて歌詞を同期します。
4. すべての歌い手は、NTP校正を通じてローカルの曲の再生進行状況を調整する必要があります。
視聴者
1. TRTCルームに入室して合唱ストリームミックスを受信します。
2. 歌詞同期のため、ストリームミックス中のSEIにある曲進行情報を解析します。
3. マイクオン後、ストリームミックスのプルを停止し、マイクオンのボーカルストリームに切り替え、同時に合唱モードを開始します。
スコアリング管理
基本紹介
スコアリング(採点)機能は、カラオケシナリオでよく見かける遊び方の一つであり、主にユーザーが実際に歌を歌っている過程の音程と音色の結果を評価することができ、複数人での歌唱後のスコア比較として使用することができます。
実装の流れ
スコアリング管理プロセス全体で、ユーザーのロールに応じて、歌い手と視聴者は異なる実装を持っています。評価は通常、歌い手のローカルで行われ、ルームの他の人に同期されます。
歌い手
アンカー/視聴者、TRTCのルームを作成/参加し、マイクオン後、曲を予約して歌い手になる。
曲の歌い手の順番になったら、歌い手は曲/歌詞をダウンロードし、BGMインターフェースを通じて曲を再生する必要があります。
TRTCがキャプチャーしボーカルとBGMの再生進行をリアルタイムで採点モジュールに送信します。
採点モジュールがリアルタイムでデータを出した後、SEIでルーム内の全員に同期します。
視聴者
視聴者側の流れはマイク順番待ちソロの視聴者ロールのアクションフローと基本的に一致しており、視聴者実装の流れを参照できます。
キー業務ロジック
伴奏同期プラン
リアルタイムプランでは、歌い始めた後に伴奏の進行をリアルタイムで同期させる必要があり、伴奏の誤差によってエンドツーエンドの遅延が増加するのを避ける必要があります。伴奏の同期はNTP時間に基づいて行う必要があり、異なるデバイスのローカルクロックは一致しておらず、ある程度の誤差が存在するため、Tencent Cloud自主開発のNTPサービスを導入する必要があります。同時に、途中で合唱に参加するユーザーも伴奏の進行を同期させる必要があり、進行を同期した後にのみ、合唱に参加できます。
伴奏同期の方法は、リードシンガーのユーザーが将来のある時点(例えば3秒後に遅延)で伴奏を再生することを約束し、他のユーザーが合唱に参加することです。各クライアントの時間はNTP時間を基準とし、NTP時間はTRTC SDKの初期化後に同期を開始します。
具体的な手順は以下の通りです:
1. 各クライアントがNTP時刻同期を行い、TRTCクラウドから最新のNTP時間Tを取得して更新します。
2. リードシンガー側が合唱シグナル(カスタムメッセージ)を送信し、合唱開始時間T2を約定します。
3. ローカルでT2に基づいてプリロードされた伴奏を定時に再生します。
4. 他の合唱ユーザーが合唱シグナルを受信した後、ステップ3を実行します。
5. 途中にローカルの伴奏の再生進行状況を検証し、TEとTCの差が50msを超えた場合、即座にseekで校正します。
説明:
ここの50ms誤差は典型的な値であり、業務の許容度に応じて適宜調整することができます。50msの上下での変動を推奨します。
歌詞同期ソリューション
歌詞同期プランにおいて、3種類の異なるロールのアクションは以下の通りです。
|
NTP時刻同期 ブラックフレーム挿入を有効にする SEIメッセージを送信 ローカル歌詞同期 歌詞コントロールの更新 | NTP時刻同期 ローカル歌詞同期 歌詞コントロールの更新 | NTP時刻同期 SEIメッセージを受信 歌詞コントロールの更新 |
ここで、リードシンガーと合唱は同期された伴奏の再生進行に基づいて、ローカルで歌詞の進行を更新します。視聴者側は、リードシンガー側から送信された、最新の歌詞進行を含むSEIメッセージを受信して、ローカルの歌詞進行を更新する必要があります。歌詞同期の全体的な流れは、以下の図に示されています。
音楽スコアリングアクセスプラン
音楽スコアリング機能はオンラインカラオケシナリオで欠かせない機能です。あらかじめ音楽リソースの標準化されたオーディオファイルおよびMIDI楽譜ファイルを取得する必要があります。その後、スマートミュージックプラットフォームの音楽スコアリング機能を使用して、TRTCクラウドから録音された歌手の声に対して評価を行うことをお勧めします。音楽スコアリングのアクセスプランの全体の流れは、以下の図に示されています。 2. TRTCバックエンドは、録音タスクを開始する際に指定されたCOSストレージバケットに、録音されたパフォーマンスクリップのメディアファイルをアップロードします。 5. スマートミュージックプラットフォームは、COSストレージバケットからシングクリップと楽譜ファイルを読み取り、採点します。
6. スマートミュージックプラットフォームは、評価結果を含むjsonファイルをCOSの指定されたパスに書き込みます。
7. 音楽スコアリングが完了した後、スマートミュージックプラットフォームは音楽スコアリング結果を業務バックエンドにコールバックします。
8. 業務バックエンドは、コールバックパスに基づいてCOSから音楽スコアリング結果のjsonファイルを読み取ります。
9. 業務バックエンドが音楽スコアリングの結果を解析し、歌い手のApp側でスコアリング結果を表示します。
注意:
スマートミュージックプラットフォームの音楽スコアリング入力ファイル形式はMP3またはWAVを使用する必要があります。クラウドで録音されたファイル形式がHLSまたはAACの場合は、音声トランスコードを行う必要があります。
オーディオ調整ポリシーのベストプラクティス
カラオケシナリオ全体で、音声品質は主にサンプリングレート、チャンネル数、ビットレート、3Aなどのパラメータに影響されます。異なるルームのシナリオに応じて、異なる音声パラメータと音量のバランスのプラン、そして異なるボーカルと伴奏の同期アライメントのプランの使用を推奨します。
1. シナリオ最適のパラメータ設定
|
マイク順番待ちソロ | ビデオまたは転送のCDN要件: LIVE ピュアオーディオとRTCの要件: VOICE_CHATROOM | MUSIC | TRTCSystemVolumeTypeMedia | enableBlackStream |
リアルタイム合唱 | ビデオまたは転送のCDN要件: LIVE ピュアオーディオとRTCの要件: VOICE_CHATROOM | MUSIC | TRTCSystemVolumeTypeMedia | enableBlackStream enableChorus setLowLatencyModeEnabled |
音楽を聴きながらのボイスチャット | VOICE_CHATROOM | DEFAULT | TRTCSystemVolumeTypeAuto | 無し |
2. シナリオ最適の音量バランス
TRTC SDKはボーカルキャプチャーと音楽再生において初期デフォルト値があります。デフォルト値を使用している場合に、ライブルーム内で音楽の音がボーカルを圧倒し、ボーカルが音楽の音に覆われる現象が発生した場合は、下表の推奨値に従ってボーカルと音楽の音量比を適切に調整できます。
|
マイク順番待ちソロ | ボーカルキャプチャー音量:60 音楽再生音量:50 リバーブエフェクトを有効にする:はい |
| リアルタイム合唱 |
音楽を聴きながらのボイスチャット | ボーカルキャプチャー音量:100 音楽再生音量:30 リバーブエフェクトを有効にする:いいえ |
3. ボーカルと伴奏の同期
ローカルでのボーカルキャプチャーのJitterBuffer、曲の再生とミキシング時のJitterBuffer、そして人の耳が伴奏を受け取り始めてから歌い始めるプロセスに一定のGAPがあるため、もし歌手が完全に歌詞と伴奏に従って歌うと、リモート視聴者はボーカル、伴奏、歌詞の間に一定の遅延や不整合があると感じるかもしれません。この状況は以下の二つの方法で改善できます。
合唱モードを開始
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("api", "enableChorus");
JSONObject params = new JSONObject();
params.put("enable", true);
params.put("audioSource", 0);
jsonObject.put("params", params);
mTRTCCloud.callExperimentalAPI(String.format(Locale.ENGLISH, jsonObject.toString()));
} catch (JSONException e) {
e.printStackTrace();
}
NSDictionary *jsonDic = @{
@"api": @"enableChorus",
@"params": @{
@"enable": @(YES),
@"audioSource": @(0)
}
};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDic options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[trtcCloud callExperimentalAPI:jsonString];
注意:
audioSource: 0(ボーカル)、audioSource: 1(伴奏)、シングルインスタンスでプッシュする場合は、audioSourceを0に統一します。
低遅延モードを有効にする
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("api", "setLowLatencyModeEnabled");
JSONObject params = new JSONObject();
params.put("enable", true);
jsonObject.put("params", params);
mTRTCCloud.callExperimentalAPI(String.format(Locale.ENGLISH, jsonObject.toString()));
} catch (JSONException e) {
e.printStackTrace();
}
NSDictionary *jsonDic = @{
@"api": @"setLowLatencyModeEnabled",
@"params": @{
@"enable": @(1)
}
};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDic options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[trtcCloud callExperimentalAPI:jsonString];
シナリオのプレイ
マイク順番待ちソロ
視聴者がマイクオン後、曲の予約やマイクの順番待ちを行うことができ、曲が再生されたら個人での歌うことが可能です。このような遊び方は比較的シンプルで、TRTCシングルインスタンスミキシングプッシュプルで対応できます。
リアルタイム合唱
視聴者がマイクオンしてリードシンガーと一緒に一曲を合唱します。このような遊び方は比較的複雑で、リードシンガー側はTRTCダブルインスタンスプッシュを採用する必要があり、各クライアントは伴奏同期と歌詞同期にも注意する必要があります。
フリーシング
ユーザーは自分の趣味に応じて異なるカテゴリーの曲のルームを選択でき、ルーム内ではランダムに音楽の断片が再生され、ルームのユーザーはいつでもマイクオンして曲の断片を歌うことができます。
クリップシング
同じ曲をクリップに分けて、異なるマイクオンの視聴者に割り当て、リードシンガーが一節を歌った後、他のマイクオンの視聴者が割り当てられた音楽クリップに従ってそれぞれ歌います。
クロスルームデュエル
異なるルームのアンカー同士が歌唱PKを行い、それぞれのルームの視聴者がアンカーをサポートします。このようなプレイ方法は、カラオケシナリオ以外にも、TRTCクロスルームPKに関連しており、異なるルームのオーディオ・ビデオストリームの購読ロジックに注意が必要です。
プランに含まれる製品
|
アクセス層 | | 低遅延で高品質な多人数オーディオのリアルタイムインタラクションライブソリューションを提供し、オンラインカラオケシナリオの基本的な基盤能力です。 |
アクセス層 | | グループ機能に基づくルーム管理、座席管理の提供、ライブルームの全員メッセージ、パブリックチャットメッセージなどのリッチメディアメッセージの送受信、およびカスタムシグナルなどの通信ニーズを実現します。 |
アクセス層 | | Tencent Media Labが自社開発した音楽理解技術をベースとしており、ユーザーが音楽を深く理解、分析、創造することを助力し、歌詞認識、スマート作曲、曲を聴いて曲を識別する、音楽スコアリングなどの機能を提供します。 |