精华内容
下载资源
问答
  • QT播放wav格式文件

    2018-07-11 10:17:45
    QT5界面,播放wav格式文件,可循环播放,按钮启停,简单快捷,wav报警铃声
  • Qt实现录音功能并声称wav格式文件,后续可以使用科大讯飞语音库进行转换成文字
  • 使用python读取wav格式文件

    万次阅读 2019-01-09 20:58:55
    使用python读取wav格式文件 ** - 基本概念 【采样频率】 即取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的...

    使用python读取wav格式文件


    - 基本概念

    【采样频率】
    即取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。
    【采样位数 | 量化精度】
    即采样值或取样值(就是将采样样本幅度量化)。它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。

    每个采样数据记录的是振幅, 采样精度取决于采样位数的大小:
    1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;
    2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;
    4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.
    【通道数】
    处理的音频主要为单通道和双通道。
    即声音的通道的数目。常有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声可以使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果,当然还有更多的通道数。

    - 相关方法
    在这里插入图片描述
    - 读取方法

    import wave  
    import numpy as np
    import pylab as plt 
    
    #打开wav文件 ,open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据。
    f = wave.open(r"/usr/local/java/wav_audio/car_20_si464.wav", "rb")
    #读取格式信息  
    #一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位), 采样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息
    params = f.getparams()  
    nchannels, sampwidth, framerate, nframes = params[:4]
    #读取波形数据  
    #读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位)  
    str_data  = f.readframes(nframes)  
    f.close()
    #将波形数据转换成数组
    #需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组  
    wave_data = np.frombuffer(str_data,dtype = np.int8)
    #将wave_data数组改为2列,行数自动匹配。在修改shape的属性时,需使得数组的总长度不变。
    wave_data.shape = -1,2
    #转置数据
    wave_data = wave_data.T
    #通过取样点数和取样频率计算出每个取样的时间。
    time=np.arange(0,nframes)/framerate
    #print(params)  
    plt.figure(1) 
    plt.subplot(2,1,1)  
    #time 也是一个数组,与wave_data[0]或wave_data[1]配对形成系列点坐标
    plt.plot(time,wave_data[0])  
    plt.subplot(2,1,2)  
    plt.plot(time,wave_data[1],c="r")  
    plt.xlabel("time")  
    plt.show() 
    

    备注:
    该代码中主要注意问题:
    wave_data = np.fromstring(str_data,dtype = np.int8)
    fromstring 被替换为 frombuffer
    np.int8 需要根据音频的量化精度8bit 、16bit 来确定转化为int8 或者int16
    此处为个人理解,有不对的地方,还望指正,多谢!

    效果截图:
    1


    主要借鉴文章:

    https://docs.python.org/3/library/wave.html

    展开全文
  • wav格式文件、pcm数据

    2019-04-03 14:27:00
    wav格式文件是常见的录音文件,是声音波形文件格式之一,wav 文件由文件头和数据体两部分组成。 文件头是我们在做录音保存到文件的时候,要存储的文件的说明信息,播放器要通过文件头的相关信息去读取数据播放文件...

    wav格式文件是常见的录音文件,是声音波形文件格式之一,wav 文件由文件头和数据体两部分组成。

    文件头是我们在做录音保存到文件的时候,要存储的文件的说明信息,播放器要通过文件头的相关信息去读取数据播放文件,下面是wav文件头的格式说明。

    端模式

    field name

    Size

    说明

    big ChunkID 4 文件头标识,一般就是"RIFF" 四个字母
    little ChunkSize 4 整个数据文件的大小,不包括上面ID和Size本身
    big Format 4 一般就是"WAVE" 四个字母
    big SubChunk1ID 4 格式说明块,本字段一般就是"fmt "
    little SubChunk1Size 4 本数据块的大小,不包括ID和Size字段本身,这里是pcm 16
    little AudioFormat 2 音频的格式说明,对于pcm 这里是1
    little NumChannels 2 声道数 
    little SampleRate 4 采样率
    little ByteRate 4 比特率,每秒所需要的字节数
    little BlockAlign 2 数据块对齐单元
    little BitsPerSample 2 采样时模数转换的分辨率,采样位数
    big SubChunk2ID 4 真正的声音数据块,本字段一般是"data"
    little SubChunk2Size 4 本数据块的大小,不包括ID和Size字段本身
    little Data N 音频的采样数据

    下面贴上一段代码可对应着看

        private static byte[] getWaveFileHeader(int totalDataLen, int sampleRate, int channelCount, int bits) {
            byte[] header = new byte[44];
            // RIFF/WAVE header
            header[0] = 'R';
            header[1] = 'I';
            header[2] = 'F';
            header[3] = 'F';
    
            int fileLength = totalDataLen + 36;
            header[4] = (byte) (fileLength & 0xff);
            header[5] = (byte) (fileLength >> 8 & 0xff);
            header[6] = (byte) (fileLength >> 16 & 0xff);
            header[7] = (byte) (fileLength >> 24 & 0xff);
            //WAVE
            header[8] = 'W';
            header[9] = 'A';
            header[10] = 'V';
            header[11] = 'E';
            // 'fmt ' chunk
            header[12] = 'f';
            header[13] = 'm';
            header[14] = 't';
            header[15] = ' ';
            // 4 bytes: size of 'fmt ' chunk
            header[16] = 16;
            header[17] = 0;
            header[18] = 0;
            header[19] = 0;
    
            // pcm format = 1
            header[20] = 1;
            header[21] = 0;
            header[22] = (byte) channelCount;
            header[23] = 0;
    
            header[24] = (byte) (sampleRate & 0xff);
            header[25] = (byte) (sampleRate >> 8 & 0xff);
            header[26] = (byte) (sampleRate >> 16 & 0xff);
            header[27] = (byte) (sampleRate >> 24 & 0xff);
    
            int byteRate = sampleRate * bits * channelCount / 8;
            header[28] = (byte) (byteRate & 0xff);
            header[29] = (byte) (byteRate >> 8 & 0xff);
            header[30] = (byte) (byteRate >> 16 & 0xff);
            header[31] = (byte) (byteRate >> 24 & 0xff);
            // block align
            header[32] = (byte) (channelCount * bits / 8);
            header[33] = 0;
            // bits per sample
            header[34] = (byte) bits;
            header[35] = 0;
            //data
            header[36] = 'd';
            header[37] = 'a';
            header[38] = 't';
            header[39] = 'a';
            header[40] = (byte) (totalDataLen & 0xff);
            header[41] = (byte) (totalDataLen >> 8 & 0xff);
            header[42] = (byte) (totalDataLen >> 16 & 0xff);
            header[43] = (byte) (totalDataLen >> 24 & 0xff);
            return header;
        }

    有了头信息,下面就是pcm数据了,

    pcm数据也有一定的格式

    1、8位单通道

    数据块1 数据块2 ...
    数据1 数据2 ...

    2、8位双通道

    数据块1 数据块2 ...
    声道1数据1 声道2数据1 声道1数据2 声道2数据2 ...

    3、16位单通道

    数据块1 数据块2 ...
    数据1低字节 数据1高字节 数据2低字节 数据2高字节 ...

    4、16位双通道

    数据块1 数据块2 ...
    声道1低字节 声道1高字节 声道2低字节 声道2高字节 声道1低字节 声道1高字节 声道2低字节 声道2高字节 ...

    pcm数据按照上面格式读取即可。

    参考:

      https://www.cnblogs.com/liyiwen/archive/2010/04/19/1715715.html

    转载于:https://www.cnblogs.com/sskbskdrin/p/10648585.html

    展开全文
  • Java将MP3文件转换成wav格式文件 (实操过,可以运行.) <% //将MP3文件转为wav文件 String filePath = "D:\\test.mp3"; String targetPath = "D:\\test.wav"; byteToWav(getBytes(filePath), targetPath); %> &...

    本人公众号上线啦!!!

    公众号与博客名一样:没有腹肌的程序猿
    公众号文章类型:工作上所遇到的需求实现方案分享。
    此外也会提供一些数据集供大家使用。(这个还在规划中,毕竟打工人时间挺紧的,哈哈哈哈)
    到时候也会不定期给大家抽一些小东西哦。

    Java将MP3文件转换成wav格式文件

    (实操过,可以运行.)

    <% 
    //将MP3文件转为wav文件
    String filePath = "D:\\test.mp3";
    String targetPath = "D:\\test.wav";
    byteToWav(getBytes(filePath), targetPath);
    %>
    <%!
    public static boolean byteToWav(byte[] sourceBytes, String targetPath){
    	if (sourceBytes == null || sourceBytes.length == 0) {
    		System.out.println("Illegal Argument passed to this method");
    		return false;
    		}
    		try (final ByteArrayInputStream bais = new ByteArrayInputStream(sourceBytes); final AudioInputStream sourceAIS = AudioSystem.getAudioInputStream(bais)) {
    		AudioFormat sourceFormat = sourceAIS.getFormat();
    		// 设置MP3的语音格式,并设置16bit
    		AudioFormat mp3tFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, sourceFormat.getSampleRate(), 16, sourceFormat.getChannels(), sourceFormat.getChannels() * 2, sourceFormat.getSampleRate(), false);
    		// 设置阿里语音识别的音频格式
    		AudioFormat pcmFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 16000, 16, 1, 2, 16000, false);
    		try (
    		// 先通过MP3转一次,使音频流能的格式完整
    		final AudioInputStream mp3AIS = AudioSystem.getAudioInputStream(mp3tFormat, sourceAIS);
    		// 转成阿里需要的流
    		final AudioInputStream pcmAIS = AudioSystem.getAudioInputStream(pcmFormat, mp3AIS)) {
    		// 根据路径生成wav文件
    		AudioSystem.write(pcmAIS, AudioFileFormat.Type.WAVE, new File(targetPath));
    		}
    		return true;
    		} catch (IOException e) {
    			System.out.println("文件转换异常:" + e.getMessage());
    			return false;
    		} catch (UnsupportedAudioFileException e) {
    			System.out.println("文件转换异常:" + e.getMessage());
    			return false;
    		}
    
    }
    
    %>
    <%!
    public static byte[] getBytes(String filepath){
    	byte[] buffer = null;
    	try{
    		File file =  new File(filepath);
    		FileInputStream fis = new FileInputStream(file);
    		ByteArrayOutputStream bos = new ByteArrayOutputStream();
    		byte[] b = new byte[1000];
    		int n;
    		while((n=fis.read(b))!=-1){
    			bos.write(b,0,n);
    		}
    		fis.close();
    		bos.close();
    		buffer = bos.toByteArray();
    		
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	return buffer;
    }
    
    
    %>
    
    展开全文
  • 1、下载与安装scipy2、wav文件写操作3、signal.chirp函数使用说明4、点击按钮实现信号生成,点击按钮实现信号显示5、Python代码#!usr/bin/env python#code=utf-8from Tkinter import *import waveimport numpy as np...

    1、下载与安装scipy

    2、wav文件写操作

    c45b893772073de46768b2e76ba3caeb.png

    3、signal.chirp函数使用说明

    50a112584b3fe19659afa6c83405a085.png

    4、点击按钮实现信号生成,点击按钮实现信号显示

    35855a85a71e10536006194ed48bff04.png

    05c41d715f158923d9ad9fb2a7bf5065.png

    5、Python代码

    #!usr/bin/env python

    #code=utf-8

    from Tkinter import *

    import wave

    import numpy as np

    import scipy.signal as signal

    import matplotlib.pyplot as plt

    import sys

    sys.setrecursionlimit(1000000)

    #define the params of wave

    channels = 1

    sampwidth = 2

    framerate = 9600

    file_name = 'sweep.wav'

    frequency_begin = 1

    frequency_end = 100

    #define the time of wave

    time = 1

    def Generate_Wav():

    #generate the time bar

    t = np.arange(0,time,1.0/framerate)

    #generate the chirp signal from 300 to 3300Hz

    wave_data = signal.chirp(t, frequency_begin, time, frequency_end, method = 'linear')*1000

    #cast to the type of short

    wave_data = wave_data.astype(np.short)

    #open a wav document

    f = wave.open(file_name,"wb")

    #set wav params

    f.setnchannels(channels)

    f.setsampwidth(sampwidth)

    f.setframerate(framerate)

    #turn the data to string

    f.writeframes(wave_data.tostring())

    f.close()

    def my_button(root,label_text,button_text,button_func):

    '''''function of creat label and button'''

    #label details

    label = Label(root)

    label['text'] = label_text

    label.pack()

    #label details

    button = Button(root)

    button['text'] = button_text

    button['command'] = button_func

    button.pack()

    def read_wave_data(file_path):

    #open a wave file, and return a Wave_read object

    f = wave.open(file_path,"rb")

    #read the wave's format infomation,and return a tuple

    params = f.getparams()

    #get the info

    nchannels, sampwidth, framerate, nframes = params[:4]

    #Reads and returns nframes of audio, as a string of bytes.

    str_data = f.readframes(nframes)

    #close the stream

    f.close()

    #turn the wave's data to array

    wave_data = np.fromstring(str_data, dtype = np.short)

    time = np.arange(0, nframes) * (1.0/framerate)

    return wave_data, time

    def Plot_Wav():

    wave_data, time = read_wave_data(file_name)

    plt.plot(time, wave_data)

    plt.grid(True)

    plt.show()

    def main():

    root = Tk()

    my_button(root, 'Generate a sweep wav', 'Generate', Generate_Wav)

    my_button(root, 'Plot the wav', 'Plot', Plot_Wav)

    root.mainloop()

    if __name__ == "__main__":

    main()

    展开全文
  • Python对wav格式文件对操作最常用的库为“wave”,但使用时其API和用法不如MATLAB方便简洁。为了方便读写wav文件,本文基于“wave”库,封装编写了更高一级的API,主要包括文件读、写、查看wav文件信息。
  • 将PCM格式存储成WAV格式文件WAV比PCM多44个字节(在文件头位置多)摘自:https://blog.csdn.net/u012173922/article/details/788490762017年12月20日 08:11:00酒后午夜行为艺术家阅读数 2815版权声明:本文为博主...
  • MP3 WAV 格式文件声音增大软件

    热门讨论 2012-02-07 22:12:32
    可以将MP3 WAV 格式文件的声音增大.
  • 今天小编就为大家分享一篇python pcm音频添加头转成Wav格式文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • C#实现简单的音乐播放器(只支持.wav格式文件)--带有2个.wav格式文件
  • Wav 格式文件处理库

    2008-12-24 11:28:46
    C# 2.0 下操作WAV格式文件的封装库, 方便实用
  • wav格式文件分析

    2013-09-05 10:16:03
    wav音频格式
  • **使用python读取wav格式文件**- 基本概念【采样频率】即取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的...
  • wave - Read and write WAV files (读写 WAV 格式文件) https://docs.python.org/3/library/wave.html The wave module provides a convenient interface to the WAV sound format. It does not support compression...
  • JAVA 播放WAV格式文件

    千次阅读 2010-08-31 11:33:00
    JAVA 播放WAV格式文件
  • U3D录音以及保存为wav格式文件

    千次阅读 2017-05-30 21:35:13
    U3D录音以及保存为wav格式文件
  • WAV格式文件分析

    千次阅读 2017-04-06 16:23:49
    一直对多媒体文件是怎么存储的有些好奇,这次打开.wav文件用16进制对其进行查看图1...对于16k,16bit的.wav格式语音来说,文件头是由44Bytes组成(语音是读取short类型的,两个Byte一起读,比如 00 01 读取后01是short
  • WAV格式文件学习

    千次阅读 2017-04-15 21:43:34
    WAV (RIFF) 文件是一个包含标头和数据的多格式文件,是微软的 RIFF  规范存储的多媒体文件格式的子集。其基本构成为以“块”(chunk)组成的 单元,RIFF 文件以一串数据块(data chunks)组成的文件头为开始,"标...
  • vb调用wav格式文件

    2012-07-22 00:54:03
    很简单的如何实现VB调用wav格式的音频播放文件
  • Python--读取wav格式文件(2013-05-28 06:56:22)标签:格式文件读取杂谈1、import wave 用于读写wav文件它提供了一个方便的WAV#26684;式接口。但是不支持压缩/解压缩,支持单声道/立体声。读取#26684;式:open(file[,...
  • Python读取wav格式文件

    千次阅读 2019-04-09 17:42:12
    转:... ... 我们经常需要处理wav格式文件,读取其中的声音信号和相关参数,来做一些事情。如果我们使用C++来做,那么需要对文件的底层存储格式有一个透彻的了解才行,而且考虑不周还有可能出B...
  • Python 读取wav格式文件

    千次阅读 2018-11-16 10:28:38
    它提供了一个方便的WAV格式接口。 但是不支持压缩/解压缩,支持单声道/立体声。 读取格式: open(file[, mode]) 如果file是一个字符串,那么就打开文件,不然就把它当做一个类文件对象。 mode是可以缺省的,如果输入...
  • wav文件格式分析与详解 PCM文件格式简单介绍 wav音频文件头解析 WAV文件头读取 2.代码(convert_sample_rate.c) #include <stdio.h> #include <string.h> #include <errno.h> int main...
  • android开发,支持amr、wav格式的录音,录音之后,通过列表展示,也可以播放。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,501
精华内容 2,200
关键字:

wav格式文件