librosa 无法打开由 librosa 创建的 .wav 文件?
librosa can't open .wav created by librosa?
我正在尝试使用 librosa 通过从持续时间为 60 秒的某个 .wav 文件中剪切 1 秒的片段来生成一些数据。
这部分有效,我创建了所有文件,我也可以通过任何播放器收听它们,但是如果我尝试使用 librosa.load 打开它们,我会收到此错误:
>>> librosa.load('.\train\audio\silence\0doing_the_dishes.wav', sr=None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\gionata\AppData\Local\Programs\Python\Python36\lib\site\packages\librosa\core\audio.py", line 107, in load
with audioread.audio_open(os.path.realpath(path)) as input_file: File "C:\Users\gionata\AppData\Local\Programs\Python\Python36\lib\site-packages\audioread\__init__.py", line 116, in audio_open
raise NoBackendError()
audioread.NoBackendError
你有什么建议吗?我用这个函数创建 file.wav:
def create_silence():
path=DB+"_background_noise_/"
sounds = [x[len(DB):] for x in glob.glob(path+ '*.wav')]
for elem in enumerate(sounds):
sound=elem.split('\')[1]
print(sound)
for j,i in enumerate(np.arange(0.0, 59.0, 0.3)):
y, sr=librosa.load(DB+elem, sr=None, offset=i, duration=1.0)
librosa.output.write_wav(DB+'silence/'+str(j)+sound, y, sr=sr, norm=False)
问题仅出现在 librosa 创建的文件中,librosa.load 与其他文件一起使用时完全没有问题。
我解决了这个问题,Librosa 按原样输出值,在我的例子中 np.array 其中 float32 但每个值的标准是 16 位,所以改变类型就可以了:
def create_silence():
path=DB+"_background_noise_/"
maxv = np.iinfo(np.int16).max
sounds = [x[len(DB):] for x in glob.glob(path+ '*.wav')]
for elem in sounds:
sound=elem.split('\')[1]
print(sound)
for j,i in enumerate(np.arange(0.0, 59.0, 0.3)):
y, fs=librosa.load(DB+elem, sr=None, offset=i, duration=1.0, mono=False)
librosa.output.write_wav(DB+'silence/'+str(j)+sound, y=(y*maxv).astype(np.int16), sr=fs, norm=False)
关于ffmpeg,
如果你使用windows,你可以根据here解决这个问题
如果你使用 linux,如果可以尝试:
sudo apt-get install libav-tools
我无法让吴连伟或 Gionata 的解决方案发挥作用,但这确实有效:
from scipy.io import wavfile
import scipy
maxv = np.iinfo(np.int16).max
scipy.io.wavfile.write(path, sr, (y*maxv).astype(np.int16))
(其中path是路径和文件名,y是librosa.load的第一个输出,sr是librosa.load的第二个输出)
我可以在后期使用 librosa 加载这个 wav 文件,所以它解决了问题!
libav-tools 在 ubuntu 中被弃用,所以
sudo apt-get install ffmpeg
成功了
import librosa
audio_path='C:/Users/hp/name.wav' #location
(xf, sr) = librosa.load(audio_path)
它对我有用 xf=array of sound file,sr=frequency
我正在尝试使用 librosa 通过从持续时间为 60 秒的某个 .wav 文件中剪切 1 秒的片段来生成一些数据。
这部分有效,我创建了所有文件,我也可以通过任何播放器收听它们,但是如果我尝试使用 librosa.load 打开它们,我会收到此错误:
>>> librosa.load('.\train\audio\silence\0doing_the_dishes.wav', sr=None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\gionata\AppData\Local\Programs\Python\Python36\lib\site\packages\librosa\core\audio.py", line 107, in load
with audioread.audio_open(os.path.realpath(path)) as input_file: File "C:\Users\gionata\AppData\Local\Programs\Python\Python36\lib\site-packages\audioread\__init__.py", line 116, in audio_open
raise NoBackendError()
audioread.NoBackendError
你有什么建议吗?我用这个函数创建 file.wav:
def create_silence():
path=DB+"_background_noise_/"
sounds = [x[len(DB):] for x in glob.glob(path+ '*.wav')]
for elem in enumerate(sounds):
sound=elem.split('\')[1]
print(sound)
for j,i in enumerate(np.arange(0.0, 59.0, 0.3)):
y, sr=librosa.load(DB+elem, sr=None, offset=i, duration=1.0)
librosa.output.write_wav(DB+'silence/'+str(j)+sound, y, sr=sr, norm=False)
问题仅出现在 librosa 创建的文件中,librosa.load 与其他文件一起使用时完全没有问题。
我解决了这个问题,Librosa 按原样输出值,在我的例子中 np.array 其中 float32 但每个值的标准是 16 位,所以改变类型就可以了:
def create_silence():
path=DB+"_background_noise_/"
maxv = np.iinfo(np.int16).max
sounds = [x[len(DB):] for x in glob.glob(path+ '*.wav')]
for elem in sounds:
sound=elem.split('\')[1]
print(sound)
for j,i in enumerate(np.arange(0.0, 59.0, 0.3)):
y, fs=librosa.load(DB+elem, sr=None, offset=i, duration=1.0, mono=False)
librosa.output.write_wav(DB+'silence/'+str(j)+sound, y=(y*maxv).astype(np.int16), sr=fs, norm=False)
关于ffmpeg, 如果你使用windows,你可以根据here解决这个问题 如果你使用 linux,如果可以尝试:
sudo apt-get install libav-tools
我无法让吴连伟或 Gionata 的解决方案发挥作用,但这确实有效:
from scipy.io import wavfile
import scipy
maxv = np.iinfo(np.int16).max
scipy.io.wavfile.write(path, sr, (y*maxv).astype(np.int16))
(其中path是路径和文件名,y是librosa.load的第一个输出,sr是librosa.load的第二个输出)
我可以在后期使用 librosa 加载这个 wav 文件,所以它解决了问题!
libav-tools 在 ubuntu 中被弃用,所以
sudo apt-get install ffmpeg
成功了
import librosa
audio_path='C:/Users/hp/name.wav' #location
(xf, sr) = librosa.load(audio_path)
它对我有用 xf=array of sound file,sr=frequency