🚀 クイックスタート
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 MainViewModelMainScreen.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 MainViewModelMainScreen.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 MainViewModelMainScreen.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 を参照してください。