LoginSignup
3
1

More than 1 year has passed since last update.

[deprecated]Windows10でtorchaudioをインストールする

Last updated at Posted at 2020-05-22

リポジトリに沿って普通にインストールしてください

はじめに

  先程torchaudioを私の環境(Windows10 conda)にインストールしようと思ったらできなかったので、今後そういう方のために解決方法を残しておきます。
ちなみに、ここに示すものはPyTorch Forumに載っているものです。できる限り、これに沿って説明します。

手順

下準備

作業用ディレクトリを作成して移動します。

$ mkdir workdir
$ cd workdir

以下のコマンドを実行してsoxをクローンします。

$ git clone git://git.code.sf.net/p/sox/code sox

これから、CMakeプロジェクトをビルドします。
私の場合は上のリンクで説明されていた方法と同様にVisualStudio2019で行いましたので、以下ではその方法を示します。
必要に応じてインストールしてください。

lpc10.lib

ここでは、lpc10.libを生成するために手順を踏んでいきます。

  1. VisualStudio2019を開いてローカルフォルダーを開くを選択します。
    2020-05-22 (2).png

  2. 先程クローンしたsoxフォルダ内にあるlpc10フォルダ(sox/lpc10)を選択します。

  3. 開いたら、画面上のメニューバーからビルド->すべてビルドを選択してビルドします。(もしくは、ショートカットキーCtrl+Shift+Bですべてビルド)

  4. ビルドが終わったらlibファイルが生成されているはずなので、sox/lpc10/out/build/x64-Debug/lpc10.libファイルをsox/src/out/build/x64-Debugにコピーします。

これで、lpc10.libについて終了です。

gsm.lib

  1. 上のlpc10.libと同様に、VisualStudio2019を開いて、ローカルフォルダーを開くを選択します。
  2. ただし、次はsoxフォルダ内のlibgsm(sox/libgsm)を選択して開きます。
  3. 開いたら、同様にメニューバーのビルド->すべてビルドを選択してビルドします。
  4. ビルドが終わったら同様にlibファイルが生成しているはずなので、sox/libgsm/out/build/x64-Debug/gsm.libファイルをsox/src/out/build/x64-Debugにコピーします。

これで、gsm.libについて終了です。

libsox.lib

やっとsox.libのビルドに入ります。ここでは、ソースコードの中身を少しいじります。

  1. 上と同様に今度は、sox/srcローカルフォルダーを開くで選択して開きます。
  2. ソリューションエクスプローラーからCmakeLists.txtを開いて、最初の行にproject(sox)を追加します。追加するとおそらく下のようになると思います。
# 最初の行に追加
project(sox)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}config.h)

include_directories(${CMAKE_CURRENT_BINARY_DIR})

3.ソリューションエクスプローラーからsox_i.hを開いて、25行目の#include <stdlib.h>の下に、以下のコードを追加します。

#include <wchar.h> /* For off_t not found in stdio.h */
#define UINT16_MAX  ((int16_t)-1)
#define INT32_MAX  ((int32_t)-1)

4.ソリューションエクスプローラーからsox.cを開いて38行目の#include <time.h>の下に、以下のコードを追加します。

#include <sys/timeb.h>

5.これで、準備が終わったので先程同様メニューバーからビルド->すべてビルドを選択してビルドをします。

ビルドが終わればsox/src/out/build/x64-Debuglibsox.libが生成されていると思うので、これでlibsox.libについては終了です。

ここで、ビルド中にエラーが発生した場合はlpc10.libgsm.libsox/src/out/build/x64-Debugにコピーされていることを確認してください。

生成したファイルのコピー

次に、これまで生成した3つのファイル、lpc10.libgsm.liblibsox.libをpython環境にコピーします。

例えば、condaでtorchという名前の環境を作成したとすると、Anaconda3/envs/torch/libsに3ファイルをコピーします。このとき、libsox.libをコピーしたら、そのファイル名をsox.libに変更してください。
私の場合は、C:/Users/my_name/Anaconda3/envs/torch/libsにlpc10.lib、gsm.lib、libsox.libをコピーしました。
各々自分のAnaconda環境に応じてコピーしてください。
説明が分かりづらいかもしれないので、念の為PyTorch Forumに載っていたコマンドを載せておきます。これならわかりやすいと思います。

$ cp sox/src/out/build/x64-Debug/libsox.lib envs\<envname>\libs\sox.lib
$ cp sox/src/out/build/x64-Debug/gsm.lib envs\<envname>\libs
$ cp sox/src/out/build/x64-Debug/lpc10.lib envs\<envname>\libs

torchaudio

ようやく、torchaudioのインストールに入ります。

  1. コマンドライン上で、先程ファイルをコピーしたconda環境をactivateします。
$ activate torch

2.次に、torchaudioをクローンします。ここでは、PyTorch Forumに合わせてthaudioというディレクトリ名でクローンしていますが、何でも構いません。

$ git clone https://github.com/pytorch/audio thaudio

3.thaudio内のsetup.pyのコードを少し変えます。thaudio/setup.pyを開いて、52行目を以下のように変更します。

if IS_WHEEL or IS_CONDA:
    # 省略
else:
    # libraries += ['sox'] ← こうなっていたものを下のように変更
    libraries += ['sox', 'gsm', 'lpc10']  # 52行目

4.ここでいじるファイルがPyTorchForumの内容と違います。(試してませんが、もしかしたら変更なしでも動作するかもしれません)
thaudio/torchaudio/csrc/sox.cppを開いて、297行目にchar* sox_args[max_num_eopts]とあるのですが、それを以下のように変更します。

// 元は、char* sox_args[max_num_eopts]
char* sox_args[20];

その周辺のコードを示すと、

for(SoxEffect tae : pyeffs) {
    if(tae.ename == "no_effects") break;
    e = sox_create_effect(sox_find_effect(tae.ename.c_str()));
    e->global_info->global_info->verbosity = 1;
    if(tae.eopts[0] == "") {
      sox_effect_options(e, 0, nullptr);
    } else {
      int num_opts = tae.eopts.size();
      /////////////////////////////////
      ///// ここです。
      // 元は、char* sox_args[max_num_eopts]
      char* sox_args[20];
      ////////////////////////////////
      for(std::vector<std::string>::size_type i = 0; i != tae.eopts.size(); i++) {
        sox_args[i] = (char*) tae.eopts[i].c_str();
      }
      if(sox_effect_options(e, num_opts, sox_args) != SOX_SUCCESS) {
#ifdef __APPLE__
        unlink(tmp_name);
#endif
        throw std::runtime_error("invalid effect options, see SoX docs for details");
      }
    }
    sox_add_effect(chain, e, &interm_signal, &output->signal);
    free(e);
  }

以上で、全ての準備が整いました。
以下のコマンドでインストールして終了です。

$ cd thaudio
$ python setup.py install

お疲れさまでした。

おわりに

この記事では、Windows10環境でtorchaudioを入れる方法をこれのパクリですが紹介しました。
もしかしたら、Windowsで入れられなかったのがForumの方と私だけかもしれませんが同じ状況の方のために書きました。(他にどなたか書かれてたら申し訳ない)
動作テストですが、インストール後TORCHAUDIO TUTORIALを実行できたので、正常に動作していると思います。

3
1
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
3
1