首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >librosa无法打开librosa创建的.wav?

librosa无法打开librosa创建的.wav?
EN

Stack Overflow用户
提问于 2017-12-18 22:20:51
回答 5查看 8K关注 0票数 4

我正在尝试使用librosa来生成一些数据,方法是从某个持续时间为60秒的.wav文件中剪切1个片段。

这部分工作,我创建了我的所有文件,我也可以通过任何播放器收听它们,但如果我试图用librosa.load打开它们,我会收到这个错误:

代码语言:javascript
复制
>>> 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:

代码语言:javascript
复制
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已经处理过其他文件,没有任何问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-12-19 17:02:22

我解决了这个问题,Librosa按原样输出值,在我的例子中是np.array,其中float32,但标准是每个值的16位,所以更改类型会起到作用:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2018-04-27 12:13:28

如果你使用windows,你可以根据here来解决这个问题,如果你使用linux,如果你可以尝试一下:

代码语言:javascript
复制
sudo apt-get install libav-tools
票数 4
EN

Stack Overflow用户

发布于 2020-01-25 16:55:20

代码语言:javascript
复制
import librosa
audio_path='C:/Users/hp/name.wav' #location 
(xf, sr) = librosa.load(audio_path)

它已经工作在我的声音文件,sr=frequency的xf=array

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47870412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档