Bad audio format for WAV

1. 问题描述

运行keras音频分类教程的时候,用自带16000_pcm_speeches的数据集可以在pycharm里面跑通,换成自己的音频就不可以了,报错
Bad audio format for WAV: Expected 1 (PCM), but got3

2. 解决

2.1使用librosa进行提取

使用tensorflow的decode和encode,期待能配准格式
音频格式问题在代码里有两个部分,

def path_to_audio(path):
    """Reads and decodes an audio file."""
    print('path_to_audio, path : ',path)

    # yyy = wl.decode_wav(path) # mine
    # audio, _ = tf.audio.decode_wav(yyy, 1, SAMPLING_RATE)


    # yyy = wl.decode_wav2(path)
    # SAMPLING_RATE = 16000
    # audio, _ = tf.audio.decode_wav(yyy, 1, SAMPLING_RATE)
    SAMPLING_RATE = 16000

    # TODO : origin
    # audio = tf.io.read_file(path)
    # audio, _ = tf.audio.decode_wav(audio, 1, SAMPLING_RATE)

    # TODO : mine
    yyy = wl.decode_wav2(path)
    audio, _ = tf.audio.decode_wav(yyy, 1, SAMPLING_RATE)

    return audio
def load_noise_sample(path):
    # yyy = wl.decode_wav(path)
    # sample, sampling_rate = tf.audio.decode_wav(yyy, desired_channels=1)

    sample, sampling_rate = tf.audio.decode_wav(
        tf.io.read_file(path), desired_channels=1
    )

    if sampling_rate == SAMPLING_RATE:
        # Number of slices of 16000 each that can be generated from the noise sample
        slices = int(sample.shape[0] / SAMPLING_RATE)
        sample = tf.split(sample[: slices * SAMPLING_RATE], slices)
        return sample
    else:
        print("Sampling rate for {} is incorrect. Ignoring it".format(path))
        return None

问题出在 tf.audio.decode_wav和 tf.io.read_file(path)
尝试使用别的方法加载音频,放到decode里面

def wl_decode_wav(fname):
    y, s = librosa.load(fname,sr=16000) # Downsample 44.1kHz to 8kHz   
    yy = tf.expand_dims(y, axis=1)
    yyy = tf.audio.encode_wav(yy, sample_rate=16000, name=None)
#     print(yyy)
    
    return yyy
yyy = wl_decode_wav(fname)
sample, sampling_rate = tf.audio.decode_wav(yyy, desired_channels=1)
print(tf.audio.decode_wav(yyy, desired_channels=1))

用这种方式可以获得相同的数据和相同的对象格式,DecodeWav(audio=<tf.Tensor: shape=(16000, 1), dtype=float32和tf.Tensor: shape=(16000, 1), dtype=float32,但是放到代码里面还是报错。

2.2 路径错误

有时斜杠和反斜杠也会导致错误,使用split和join进行处理,依然报错

def change_path(path):
    # path = 'D:\\datas\\16000_pcm_speeches\\audio\\Nelson_Mandela\\999.wav'
    p = path.split('\\')
    pp = '/'.join(p)
    return pp
    

2.3 mediaArea查看音频信息

打算不动里面的代码,从外部音频入手,调整音频格式
首先使用这个软件查看音频的不同
我的音频格式:

原始可以跑通的音频格式
在这里插入图片描述
应该是这里,和报错符合,希望得到1,但是得到了3

2.4 安装ffmpeg,转换音频格式

下载没有gui的软件ffmpeg,这个之前也有搜到过,但是用命令行显得很复杂,所以没有选。不过试错一波之后,还是要安装。根据这个博主的教程,轻松安装成功。
https://blog.csdn.net/xiaoxueyaoxuexi/article/details/110451006
转成功了再来
妙啊!
成功了
上面的三个错误是连着的
改了一个命令之后三个问题都解决了

ffmpeg -i input.wav -ab 256k output.wav

在cmd里输入这个命令就可以得到和模型原音频一样的格式
在这里插入图片描述
虽然有一点点奇怪的是257k
不过能跑就不管啦
感谢雷神

3. 顺便学到

3.1 tensorflow.io

这个用的人很少,找不到教程

3.2 c 盘清理

早就把桌面和下载,微信qq等的路径都移动到d盘了,但是可爱cc还是只剩200m+
不过没有困难的工作,只有勇敢的狗狗
狗狗这次在设置的储存管理里面,找到大的文件夹,然后再右键查看文件夹的属性,看到内存,把大内存的剪切粘贴到d盘,再扔一个快捷方式回来骗一骗cc,成功给cc扩容几个g🎈

3.3 比火箭还快的豆瓣pip源

在下载tensorflow.io的时候找到的,真的巨快!
在这里插入图片描述
有味道又很真实的评论,豆瓣源真的很快
这里是链接豆瓣源
https://blog.csdn.net/weixin_38109583/article/details/93376954

3.4 使用echo批量执行cmd命令

一个一个改是不可能的,python有和ffmpeg的包,但是感觉用法不同
用python的os.system模块也不太行,python安装在conda的一个环境下,儿ffmpeg本身只能在base环境查看到。
所以用了echo,写bat脚本

@echo off
echo +++++
echo hi
ffmpeg -version
d:
cd mydocument
cd temp
ffmpeg -i r1.wav -ab 256 k1.wav
pause

酱就可以了ヾ(≧▽≦*)o
接下来的任务是用python生成命令,然后复制过来

import os

audio_path='D:\\mydocument\\temp'

path_list = []
name_list = []
echo_list = []
for root, dirs, files in os.walk(audio_path, topdown=False):
    for name in files:
        path_list.append(os.path.join(root, name))
        name_list.append(name)
    for name in dirs:
        print(os.path.join(root, name))
print(path_list)
print(name_list)
for name in name_list:
    name_new = name + '_new.wav'
    echo = 'ffmpeg -i ' + name + ' -ab 256k ' + name_new
    echo_list.append(echo)
print(echo_list)

# Open the file for writing
F = open('list.txt', 'w')
for i in echo_list:
    F.write(str(i) + "\n")
F.close()

成功啦~

@echo off
echo +++++
echo hi
ffmpeg -version
d:
cd mydocument
cd temp
ffmpeg -i k1.wav -ab 256k k1.wav_new.wav
ffmpeg -i p1.wav -ab 256k p1.wav_new.wav
ffmpeg -i p2.wav -ab 256k p2.wav_new.wav
ffmpeg -i p3.wav -ab 256k p3.wav_new.wav
ffmpeg -i p4.wav -ab 256k p4.wav_new.wav
ffmpeg -i p5.wav -ab 256k p5.wav_new.wav
ffmpeg -i r1.wav -ab 256k r1.wav_new.wav
ffmpeg -i r2.wav -ab 256k r2.wav_new.wav
ffmpeg -i r3.wav -ab 256k r3.wav_new.wav
ffmpeg -i r4.wav -ab 256k r4.wav_new.wav
ffmpeg -i r5.wav -ab 256k r5.wav_new.wav

pause

复制过来,保存,双击运行,piu~的一下就完成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值