リポジトリに沿って普通にインストールしてください
はじめに
先程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を生成するために手順を踏んでいきます。
-
先程クローンしたsoxフォルダ内にあるlpc10フォルダ(sox/lpc10)を選択します。
-
開いたら、画面上のメニューバーからビルド->すべてビルドを選択してビルドします。(もしくは、ショートカットキーCtrl+Shift+Bですべてビルド)
-
ビルドが終わったらlibファイルが生成されているはずなので、sox/lpc10/out/build/x64-Debug/lpc10.libファイルをsox/src/out/build/x64-Debugにコピーします。
これで、lpc10.libについて終了です。
gsm.lib
- 上のlpc10.libと同様に、VisualStudio2019を開いて、ローカルフォルダーを開くを選択します。
- ただし、次はsoxフォルダ内のlibgsm(sox/libgsm)を選択して開きます。
- 開いたら、同様にメニューバーのビルド->すべてビルドを選択してビルドします。
- ビルドが終わったら同様にlibファイルが生成しているはずなので、sox/libgsm/out/build/x64-Debug/gsm.libファイルをsox/src/out/build/x64-Debugにコピーします。
これで、gsm.libについて終了です。
libsox.lib
やっとsox.libのビルドに入ります。ここでは、ソースコードの中身を少しいじります。
- 上と同様に今度は、sox/srcをローカルフォルダーを開くで選択して開きます。
- ソリューションエクスプローラーから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-Debugにlibsox.libが生成されていると思うので、これでlibsox.libについては終了です。
ここで、ビルド中にエラーが発生した場合はlpc10.libやgsm.libがsox/src/out/build/x64-Debugにコピーされていることを確認してください。
生成したファイルのコピー
次に、これまで生成した3つのファイル、lpc10.lib、gsm.lib、libsox.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のインストールに入ります。
- コマンドライン上で、先程ファイルをコピーした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を実行できたので、正常に動作していると思います。