1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

conda環境で作成したSpleeterをJavaから無理やり呼びだして処理した

Last updated at Posted at 2022-02-26

事の発端

Javaのプロジェクトで作業をしているときに音と声を分けたい処理が出てきた。
調べてみるとSpleeterがいいらしく、言語はPythonだった。
今更JavaからPythonに書き換えるのは辛いため、どうにかならないか?
そうだ、無理やり呼びだしてみよう。

環境

Amazon Corretto 17.0.2
conda 4.11.0 (Python 3.7)
Windows 10 Home 64bit

Anaconda + Spleeterの構築ファイル

こちらの記事を参考に作成。
Qiita: 一番簡単なWindowsによるSpleeter使用環境構築

spleeter-cpu.yaml
name: spleeter-cpu

channels:
  - conda-forge
  - anaconda

dependencies:
  - python=3.7
  - tensorflow=1.14.0
  - ffmpeg
  - pandas==0.25.1
  - requests
  - pip
  - pip:
    - museval==0.3.0
    - musdb==0.3.1
    - norbert==0.2.1
    - spleeter==2.1.1

Javaから呼び出し

プロジェクトが割とハードコードでも問題無い場所だったため無理やり実装をする。
手順としてはProcessBuilderProcessを作成した後、condaのバッチファイルを読み込みProcessを無理やりconda環境で動かす。

ProcessBuilder builder = null;
Process process = null;
// 以下パスは各自置き換えてください
File path = new File(System.getProperty("user.dir") + File.separator + "spleeter");
File audioFile = new File(path, "audio.wav");
// ここのconda.batも
builder = new ProcessBuilder("D:\\conda\\conda.bat", "activate", "spleeter-cpu", "&&", "spleeter", "separate", audioFile, "-o", "./", "-p", "spleeter:2stems");
builder.directory(path);
builder.redirectErrorStream(true);
try {
    process = builder.start();
    InputStreamReader isr = new InputStreamReader(process.getInputStream(), "UTF-8");
    BufferedReader r = new BufferedReader(isr);
    while (true) {
        Thread.sleep(100);
        String line = r.readLine();
        if (line != null) {
            // Spleeterログ出力
            System.out.println(line);
        }
    }
    if (!process.isAlive()) {
        break;
    }
    process.waitFor();
    process.destroy();
} catch (Exception e) {
    e.printStackTrace();
}

まとめ

無理やり動かすことはできる。
現状プロジェクトでは特に問題は発生していないがProcessを使ってる以上別の問題が発生してくると思う。
そこが怖い為、別の方法を模索してみようと思う。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?