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

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

文章目录

  • 深度学习笔记(5)——playsoud声音播放
  • 前言
  • 一、播放声音信号
    • 1.windows使用playsound库无法播放问题
    • 2.播放文件夹下所有wav文件代码
  • 二、可视化wav波形
    • 1.文件放置
    • 2.绘制波形图
    • 3.图形结果
  • 总结


前言

调试代码需要将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.图形结果

波形如下(示例):

深度学习笔记(5)——playsoud声音播放_第1张图片

总结

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

你可能感兴趣的:(深度学习,python,python,深度学习,nlp)