🚀 クイックスタート
Android SDK のクイックスタートをベースに、SkyWay Android SDK と AI Noise Canceller ライブラリを使った簡単なアプリケーション tutorial
を作成します。
動作環境
- 対応 OS バージョン: Android 5.0 (API 21) 以降
通話アプリの作成
クイックスタート(JetPack Compose) の手順に従って SkyWay を使った通話アプリを作成してください。
重要: AI Noise Canceller を利用するには SkyWay Android SDK v3.2.0 以降 が必要です。SDK をインストールする際はバージョンを必ず確認してください。
音声の確認方法
1 人で動作を確認したい場合、以下の手順で確認できます。
- Android 端末を2台(実機 2 台または実機 + エミュレータ)用意し、先ほど作成した通話アプリをインストールします。
- 両端末でアプリを起動し、同じ Room Name を入力して join ボタンを押します。
- join に成功したら、お互いのvideo/audioが自動的にpublish/subscribeされるため、音声を確認することができます。
※ 1 人で動作を確認する際に出力音声へ影響を与えないよう、イヤホンの利用を推奨します。
AI Noise Canceller を組み込んだアプリへ改修
ライブラリのインストール
- 環境変数の設定
ライブラリをインストールする前に、環境変数を設定する必要があります。 appId と secret の値を差し替えて、以下のコマンドを実行してください。export SKYWAY_APP_ID="your-app-id" export SKYWAY_SECRET_KEY="your-app-secret"
- インストールスクリプトの実行
以下のコマンドを実行して、ライブラリをインストールします。curl -fsSL https://raw.githubusercontent.com/skyway/ai-noise-canceller/refs/heads/main/tools/android/install.sh | bash
なお、 Windows のネイティブ環境(PowerShell や CMD など)ではサポートされていません。
Windows をご利用の場合は、WSL(Windows Subsystem for Linux)上で実行してください。また、スクリプトを実行するには、Apache Maven が必要です。
macOS(Homebrew使用)の場合は、brew install maven
でインストールできます。
その他の OS でのインストール方法は、Apache Maven Projectをご確認ください。
インストール後、mvn -v
でバージョンを確認できます。上記で実行するシェルスクリプトは、 端末内で SkyWay Admin Auth Token を生成※しライブラリ取得の認証に利用しています。 この SkyWay Admin Auth Token は、アプリケーションの管理者(サーバー)用APIを利用する際に必要なトークンであり、本トークンが流出した場合は第三者に管理者(サーバー)用APIを悪用されてしまう恐れがあります。 取り扱いには十分に気をつけてください。
※ SkyWay Admin Auth Token の有効期限は1時間です。
- Mavenローカルリポジトリの参照設定
スクリプト実行後、カレントディレクトリ直下の tmp ディレクトリに最新版の AI Noise Canceller がダウンロードされ、Maven ローカルリポジトリに追加されます。 導入先のプロジェクトを開き、settings.gradle.kts
にて Maven ローカルリポジトリを参照するよう設定を追加します。setting.gradle.kts
:dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { google() mavenCentral() mavenLocal() // 追加 } }
- 依存関係の追加
libs.version.toml
とアプリモジュールのbuild.gradle.kts
に次の内容を追加してください。
lib.version.toml
:[versions] skywayNoiseCanceller = "x.x.x" # 最新版に置き換え # リリース情報: https://github.com/skyway/ai-noise-canceller/releases [libraries] # 追加 skyway-noise-canceller = { group = "com.ntt.skyway.audio", name = "ai-noise-canceller", version.ref = "skywayNoiseCanceller" }
app/build.gradle.kts
:dependencies { ... // 追加 implementation(libs.skyway.noise.canceller) }
ノイズ抑制のセットアップ
MainViewModel.kt
にて、SkyWayContext
のセットアップが成功した後に、SkyWayNoiseCanceller.setup
によりノイズ抑制処理のセットアップを行います。
class MainViewModel(): ViewModel() { ... fun joinAndPublish(roomName: String) { viewModelScope.launch() { val result = SkyWayContext.setupForDev(applicationContext!!, appId, secretKey, option) if (result) { Log.d("App", "Setup succeed") } // 追加 val ncReady = SkyWayNoiseCanceller.setup(applicationContext!!) if (ncReady) { Log.d("App", "SkyWayNoiseCanceller setup succeed") } ... } } // end of joinAndPublish } // end of MainViewModel
セットアップ後は SkyWayNoiseCanceller.start() / stop()
でノイズ抑制の ON/OFF を切り替えられます。
ノイズ抑制の ON/OFF 切り替え
MainViewModel.kt
にて、ノイズ抑制の ON/OFF 関数を実装します。
class MainViewModel(): ViewModel() { ... //追加 fun startNoiseCancelling() { SkyWayNoiseCanceller.start() } fun stopNoiseCancelling() { SkyWayNoiseCanceller.stop() } } // end of MainViewModel
MainScreen.kt
にて、ノイズ抑制の ON/OFF ボタンを追加します。
@Composable fun MainScreen( mainViewModel: MainViewModel, modifier: Modifier ) { ... Column(modifier = Modifier.fillMaxSize()) { ... //追加 Row( horizontalArrangement = Arrangement.Center, modifier = Modifier .fillMaxWidth() ) { Button( onClick = { mainViewModel.startNoiseCancelling() } ) { Text("Start NoiseCancelling") } Button( onClick = { mainViewModel.stopNoiseCancelling() } ) { Text("Stop NoiseCancelling") } } } // end of Column } // end of MainScreen
アプリをビルドし、前述[音声の確認方法]に従って、発話しながらマウスクリックやキータイプを行うことで、ノイズ付きの音声を確認することができます。
Start NoiseCancelling
および Stop NoiseCancelling
ボタンにより、聞き比べながらノイズが低減されることが確認できます。
ノイズ抑制の強度変更
次に、ノイズ抑制の強度を変更できるように実装を変更します。
MainViewModel.kt
にて、ノイズ抑制の強度変更関数を実装します。
class MainViewModel(): ViewModel() { ... //追加 fun changeStrength(strength: Int) { // 1-100の範囲で強度を設定 SkyWayNoiseCanceller.changeStrength(strength) } } // end of MainViewModel
MainScreen.kt
にて、ノイズ抑制の強度を変えられるように修正します。
@Composable fun MainScreen( mainViewModel: MainViewModel, modifier: Modifier ) { ... //追加 var ncStrength by remember { mutableStateOf(100) } Column(modifier = Modifier.fillMaxSize()) { ... //追加 Row( horizontalArrangement = Arrangement.Center, modifier = Modifier .fillMaxWidth() ) { TextField( value = ncStrength.toString(), onValueChange = { ncStrength = it.toIntOrNull() ?: 1 }, modifier = Modifier.weight(1f), label = { Text("NC Strength: 1~100") } ) Spacer(modifier = Modifier.width(8.dp)) Button(onClick = { mainViewModel.changeStrength(ncStrength) }, modifier = Modifier.weight(1f)) { Text(text = "Change Strength") } } } // end of Column } // end of MainScreen
変更が完了したら、もう一度アプリをビルドし、端末にインストールして動作を確認してみましょう。
NC Strength: 1~100
TextFieldより、強度を入力し、Change Strength
ボタン押すとノイズ抑制の強度を変更できます。
ノイズ抑制の解除(Dispose)
Room 退出時やAudio配信終了時など、ノイズ抑制が不要になったタイミングで SkyWayNoiseCanceller.dispose()
を呼び出してください。
MainViewModel.kt
にて、退室処理を追加します。
class MainViewModel(): ViewModel() { ... //追加 fun leave() { viewModelScope.launch { localRoomMember?.leave() // UIスレッドから直接呼び出すことは避けてください withContext(Dispatchers.IO) { SkyWayNoiseCanceller.dispose() } } } } // end of MainViewModel
MainScreen.kt
にて、退室ボタンを追加します。
@Composable fun MainScreen( mainViewModel: MainViewModel, modifier: Modifier ) { ... Column(modifier = Modifier.fillMaxSize()) { ... //追加 Row( horizontalArrangement = Arrangement.Center, modifier = Modifier.fillMaxWidth() ) { Button( onClick = { mainViewModel.leave() } ) { Text("Leave") } } } // end of Column } // end of MainScreen
さらに詳しい API の説明や注意事項は API Reference を参照してください。