質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8822閲覧

pythonでsoxを使用したいのですが、認識してくれません。

ygo_hustler

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/12 15:19

pythonで音声認識をしてみたいと思いソースを書いており、そのためにsoxというモジュールを使用したいのですが、pythonが認識してくれません。
pip install soxをcmdで実行した結果

Requirement already satisfied: sox in c:\users\j20703dn\anaconda3\lib\site-packages (1.4.1)
Requirement already satisfied: numpy>=1.9.0 in c:\users\j20703dn\anaconda3\lib\site-packages (from sox) (1.20.2)
となり、インストール自体はできています。

なのですが、soxのimportを行えないようです。どうすればよいでしょうか?

使用しているエディターはspyderです。

発生している問題・エラーメッセージ

SoX could not be found!

If you do not have SoX, proceed here: - - - http://sox.sourceforge.net/ - - - If you do (or think that you should) have SoX, double-check your path variables.

This install of SoX cannot process .wav files.
This install of SoX cannot process .wav files.
../data/original/jsut_ver1.1/basic5000/wav\BASIC5000_0001.wav
Traceback (most recent call last):

File "C:\Users\j20703dn\Desktop\卒業研究\卒研用ファイル\work\python_asr-main\00prepare\01prepare_wav.py", line 56, in <module>
tfm.build_file(input_filepath=wav_path_in,

File "C:\Users\j20703dn\anaconda3\lib\site-packages\sox\transform.py", line 710, in build_file
return self.build(

File "C:\Users\j20703dn\anaconda3\lib\site-packages\sox\transform.py", line 593, in build
input_format, input_filepath = self._parse_inputs(

File "C:\Users\j20703dn\anaconda3\lib\site-packages\sox\transform.py", line 496, in _parse_inputs
input_format['channels'] = file_info.channels(input_filepath)

File "C:\Users\j20703dn\anaconda3\lib\site-packages\sox\file_info.py", line 82, in channels
output = soxi(input_filepath, 'c')

File "C:\Users\j20703dn\anaconda3\lib\site-packages\sox\core.py", line 147, in soxi
shell_output = subprocess.check_output(

File "C:\Users\j20703dn\anaconda3\lib\subprocess.py", line 415, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,

File "C:\Users\j20703dn\anaconda3\lib\subprocess.py", line 493, in run
with Popen(*popenargs, **kwargs) as process:

File "C:\Users\j20703dn\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in init
super(SubprocessPopen, self).init(*args, **kwargs)

File "C:\Users\j20703dn\anaconda3\lib\subprocess.py", line 858, in init
self._execute_child(args, executable, preexec_fn, close_fds,

File "C:\Users\j20703dn\anaconda3\lib\subprocess.py", line 1311, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,

FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

'sox' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

該当のソースコード

使用言語:python
ソースコード
-- coding: utf-8 --

ダウンロードしたwavファイルを,サンプリングレート16000Hzのデータに変換します.
また,変換したwavデータのリストを作成します.

サンプリング周波数を変換するためのモジュール(sox)をインポート

import sox

osモジュールをインポート
import os

メイン関数

if name == "main":

wavファイルが展開されたディレクトリ original_wav_dir = '../data/original/jsut_ver1.1/basic5000/wav' フォーマット変換したwavファイルを出力するディレクトリ out_wav_dir = '../data/wav' wavデータのリストを格納するディレクトリ out_scp_dir = '../data/label/all' 出力ディレクトリが存在しない場合は作成する os.makedirs(out_wav_dir, exist_ok=True) os.makedirs(out_scp_dir, exist_ok=True) soxによる音声変換クラスを呼び出す tfm = sox.Transformer() サンプリング周波数を 16000Hz に変換するよう設定する tfm.convert(samplerate=16000) wavデータのリストファイルを書き込みモードで開き,以降の処理を実施する with open(os.path.join(out_scp_dir, 'wav.scp'), mode='w') as scp_file: BASIC5000_0001.wav ~ BASIC5000_5000.wav に対して処理を繰り返し実行 for i in range(5000): filename = 'BASIC5000_%04d' % (i+1) 変換元のオリジナルデータ (48000Hz)のファイル名 wav_path_in = os.path.join(original_wav_dir, filename+'.wav') 変換後のデータ(16000Hz)の保存ファイル名 wav_path_out = os.path.join(out_wav_dir, filename+'.wav') print(wav_path_in) ファイルが存在しない場合はエラー if not os.path.exists(wav_path_in): print('Error: Not found %s' % (wav_path_in)) exit() サンプリング周波数の変換と保存を実行する tfm.build_file(input_filepath=wav_path_in, output_filepath=wav_path_out) wavファイルのリストを書き込む scp_file.write('%s %s\n' % (filename, os.path.abspath(wav_path_out)))

試したこと

コンソール上に出てきたメッセージを見て、表記されているURLからsox.exeのインストーラーをダウンロードし、走らせたのですが、それでも認識してくれませんでした。

補足情報(FW/ツールのバージョンなど)

Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.

Spyder5.0.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Pythonのライブラリは sox コマンドを呼び出すラッパーなので、sox 本体は含まれません。

Python wrapper around sox. Read the Docs here.

に Linux (apt), Mac (Homebrew) 用のインストール方法が記載されてます。
Windows への言及はありませんが、sox自体はクロスプラットフォームなので、利用自体は可能なはず
chocolatey 等のパッケージを探すか、自身で sox をインストールして、PATHを設定する事になります。

公式にサポートされてないことから、機能に何か制限があったりはするかもしれません。
anaconda のパッケージでも、サポートしてるのは linux, osx のみでした。


同じ sox を利用する、別ライブラリの soxbindings の場合は、
サポートされていないが、ソースからビルド・インストールは可能とあります。

If on Windows, it's not supported but you could install sox from source, and then link libsox and get everything working possibly.


追記: win10, chocolatey 導入済環境で

  • choco install sox.portable で sox をインストール
  • 環境変数を反映させるために新しい端末を開く
  • python -c "import sox" でエラーが出ないことを確認。

投稿2021/07/12 17:51

編集2021/07/12 17:54
teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ygo_hustler

2021/07/12 18:20

ライブラリのあるディレクトリに直接sox本体をインストールし、PATHを通すことで成功しました。ありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問