深度学习笔记(5)——playsoud声音播放

深度学习笔记(5)——playsoud声音播放


前言

调试代码需要将NLP领域的模型往计算机视觉迁移,需要跑通NLP代码,用文本转声音模型,为播放声音信号。

一、播放声音信号

1.windows使用playsound库无法播放问题

在windows调用playsound库播放wav文件可能会出现下面的问题

报错内容
Error 305 for command:
close “./infer_out\s1667115101.wav”
在用引号括起的字符串不能指定额外的字符。
Failed to close the file: “./infer_out\s1667115101.wav”

原因是wav文件在windows下的的python的编码格式为utf-8不能以utf-16解码

所以解决方式是在playsound的源码第55行
command = ’ '.join(command).encode(‘utf-16’)
改为 command = ’ '.join(command)
以下是代码:ctrl+鼠标左键点击引入的库playsoud进入源码

    def winCommand(*command):
        bufLen = 600
        buf = c_buffer(bufLen)
        # command = ' '.join(command).encode('utf-16')
        command = ' '.join(command)

2.播放文件夹下所有wav文件代码

from playsound import playsound
# # 播放声音文件
path = './infer_out'
files = os.listdir(path)
files.sort()
print(files)
# 依次播放文件夹下的文件
for i in files:
    file = os.path.join(path,i)
    print(file)
    playsound(file)

二、可视化wav波形

1.文件放置

声音文件wav文件应放到该代码同级目录下的infer_out文件夹下
|——— code.py
|——— infer_out
|——————|—— 1.wav
|——————|—— 2.wav

2.绘制波形图

代码如下:

# 绘图
import os
import wave
import numpy as np
import matplotlib.pyplot as plt

filepath = "infer_out"
wavelist = []
filenames = os.listdir(filepath)
for filename in filenames:
    name, category = os.path.splitext(filepath + filename)  # 分解文件扩展名
    if category == '.wav':  # 若文件为wav音频文件
        wavelist.append(os.path.join(filepath,filename))

for wav in wavelist:
    print(wav)
    f = wave.open(wav, 'rb')
    params = f.getparams()
    # print(params)
    nchannels, sampwidth, framerate, nframes = params[:4]
    strData = f.readframes(nframes)
    f.close()
    waveData = np.frombuffer(strData, dtype=np.int16)  # 将字符串转化为int
    waveData = waveData * 1.0 / max(abs(waveData))  # 幅值归一化

    # plot the figure
    time = (1.0 / framerate) * np.arange(0, nframes)
    plt.plot(time, waveData)
    plt.title('wave plot')
    plt.xlabel('Time')
    plt.ylabel('Amplitude')
    plt.grid('on')  # 标尺
    plt.show()

3.图形结果

波形如下(示例):

在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了playsoud的使用,提供了windows下可能出现的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值