前提・実現したいこと
librosaによってロードし加工したデータを、PCM形式にして書き出したいです。
このコードはlibrosaのリファレンス
https://librosa.github.io/librosa/ioformats.html
をそのままコピーして使用しています。
発生している問題・エラーメッセージ
start ./angry <class 'numpy.float32'> --------------------------------------------------------------------------- ParameterError Traceback (most recent call last) <ipython-input-12-6fb6406219a5> in <module>() 34 label=os.path.join(path,'pangry/') 35 dangry=os.path.join(label,'angry/') ---> 36 division (angry,angryl,dangry) 37 normalo=os.path.join(label,'normal/') 38 happyo=os.path.join(label,'happy/') <ipython-input-12-6fb6406219a5> in division(bb, base_dir, opath) 27 maxv = np.iinfo(np.int16).max 28 librosa.output.write_wav( ---> 29 wpath, (y * maxv).astype(np.int16), rate 30 ) 31 ~\Anaconda3\lib\site-packages\librosa\output.py in write_wav(path, y, sr, norm) 221 222 # Validate the buffer. Stereo is okay here. --> 223 util.valid_audio(y, mono=False) 224 225 # normalize ~\Anaconda3\lib\site-packages\librosa\util\utils.py in valid_audio(y, mono) 157 158 if not np.issubdtype(y.dtype, np.floating): --> 159 raise ParameterError('data must be floating-point') 160 161 if mono and y.ndim != 1: ParameterError: data must be floating-point
該当のソースコード
import wave import struct from scipy import fromstring, int16 import os import librosa import soundfile as sf import numpy as np path='./' angry=os.path.join(path,'angry') angryl = os.listdir(angry) happy=os.path.join(path,'happy') happyl = os.listdir(happy) normal = os.path.join(path,'normal') normall= os.listdir(normal) def division (bb,base_dir,opath): #bb=file position base_dir=file list,opath=output print(bb) for dir in base_dir: apath=os.path.join(bb,dir) x,fs = librosa.load(apath,sr=44100) y,index=librosa.effects.trim(x,top_db=60) print(type(y[0])) rate = 44100 wpath=opath+dir maxv = np.iinfo(np.int16).max librosa.output.write_wav( wpath, (y * maxv).astype(np.int16), rate ) print('start') label=os.path.join(path,'pangry/') dangry=os.path.join(label,'angry/') division (angry,angryl,dangry) normalo=os.path.join(label,'normal/') happyo=os.path.join(label,'happy/') division(normal,normall,normalo) division(happy,happyl,happyo) print('finish')
試したこと
レファレンスに書いてある
sf.write('stereo_file.wav', data, samplerate, subtype='PCM_24')
を試しましたが、だめでした。
補足情報(FW/ツールのバージョンなど)
Anacondaの最新バージョンを使用しています。
環境はwindows10です。loadしてるファイルはwavファイルです。
またPCM形式に一括でファイル変換できる手法があるなら教えていただきたいです。
あなたの回答
tips
プレビュー