精华内容
下载资源
问答
  • 在 Qt 之 WAV文件解析 中给出了WAV文件属性的计算,具体包括文件大小、音频时长、比特率等属性,这里我们再次验证一下这些属性值的计算 。 在计算之前,我们要知道一下wav文件中的三个参数 采样频率、音频通道...

    简述

    在 Qt 之 WAV文件解析 中给出了WAV文件属性的计算,具体包括文件大小、音频时长、比特率等属性,这里我们再次验证一下这些属性值的计算 。

    在计算之前,我们要知道一下wav文件中的三个参数 采样频率、音频通道数、每次采样得到的样本位数 ,这三个参数用来表示声音,同时决定了wav文件的音质,大小。下面简单介绍一下这三个参数。

    采样频率

    指每秒钟取得声音样本的次数。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。22050 的采样频率是常用的,44100已是CD音质,超过48000或96000的采样对人耳已经没有意义。

    音频通道数

    声音的通道的数目。常见的单声道和立体声(双声道),现在发展到了四声环绕(四声道)和5.1声道。如果是双声道,采样就是双份的,文件也差不多要大一倍。

    每次采样得到的样本位数

    采样位数可以理解为声卡处理声音的解析度。这个数值越大,解析度就越高,录制和回放的声音就越真实。 采样位数也叫采样大小或量化位数。它是用来衡量声音波动变化的一个参数,也就是声卡的分辨率或可以理解为声卡处理声音的解析度。它的数值越大,分辨率也就越高,录制和回放的声音就越真实。


    计算公式

    波形数据传输速率(每秒平均字节数) = 采样频率 × 音频通道数 × 每次采样得到的样本位数 / 8

    比特率(kbs) = 波形数据传输速率 × 8 / 1000

    WAV文件所占大小(字节) = 波形数据传输速率 × 音频文件时长

    音频文件时长(秒) = WAV文件所占容量 / 波形数据传输速率

    关于以上几个属性我们可以右击wav文件查看文件属性看到这几个值。见下图。

    这里写图片描述 这里写图片描述

    从上述两幅图中我们可以知道这个wav文件的总大小为6947字节比特率为88kbs时间为0s,是不是很诧异,为什么这里时间为0呢?实际上windows这里只是按整数显示音频时长,那么真正的时间怎么计算呢?

    这里我们已经知道了wav文件的大小,看上述公式,我们还要知道波形数据传输速率波形数据传输速率而又是由采样频率 、 音频通道数 、 每次采样得到的样本位数 来决定,那么这些参数怎么获取到呢?

    看过Qt 之 解析wav文件的头信息(详细分析、对比不同wav文件的数据)这篇文章就应该知道如何去解析一个wav文件,并获取所有的文件头信息,如果不知道文件头信息是什么,请参考Qt 之 WAV文件解析

    好了,既然对于一个wav文件,我们能够获取到所有的头信息,那么接下来就来验证以上公式计算的结果。

    这里写图片描述

    上图为wav文件的头信息数据,我们可以看到波形数据传输速率nBytesPerSecond)的值为11025,文件总大小为6947字节,音频数据大小为6903字节,文件头信息为44字节。

    音频文件时长(秒) = WAV文件所占容量 / 波形数据传输速率 = 6903 / 11025 = 0.626122 s

    比特率(kbs) = 波形数据传输速率 × 8 / 1000 = 11025 × 8 / 1000 = 88 kbs

    这里为什么精确到小数点后六位,其实也是为了与程序记录的时间做对比,这里也要特别注意:实际上 WAV文件所占容量 为 WAV文件中 音频数据大小 ,而并非WAV文件总大小 , 但是 文件头信息所占字节非常小,所以就算是将这块大小加上进行计算,对最后的计算结果影响也非常小。下面我们就用QAudioOutput 来播放这个wav文件,同时记录播放时间 。

    代码之路

    // 播放wav文件
    void MyAudioInput::onPlay()
    {
        sourceFile.setFileName(WAV_RECORD_FILENAME);
        sourceFile.open(QIODevice::ReadOnly);
    
        // 设置播放音频格式;
        QAudioFormat format;
        format.setSampleRate(11025);
        format.setChannelCount(1);
        format.setSampleSize(8);
        format.setCodec("audio/pcm");
        // wav文件即按照这个字节存储顺序保存数据;
        format.setByteOrder(QAudioFormat::LittleEndian);
        format.setSampleType(QAudioFormat::UnSignedInt);
    
        QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
        //qDebug() << info.supportedCodecs();
        if (!info.isFormatSupported(format))
        {
            qWarning() << "Raw audio format not supported by backend, cannot play audio.";
            return;
        }
    
        m_audioOutput = new QAudioOutput(format, this);
        connect(m_audioOutput, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));
        m_audioOutput->start(&sourceFile);
        m_time.start();
    }
    
    // 播放状态更新;
    void MyAudioInput::handleStateChanged(QAudio::State state)
    {
        switch (state) {
        case QAudio::IdleState:
            // Finished playing (no more data)
            qDebug() << "elapsedUSecs:" << m_audioOutput->elapsedUSecs();
            qDebug() << "time : " << m_time.elapsed();
            onStopPlay();
            break;
    
        case QAudio::StoppedState:
            // Stopped for other reasons
            if (m_audioOutput->error() != QAudio::NoError) {
                // Error handling
            }
            break;
    
        default:
            break;
        }
    }
    // 关闭播放;
    void MyAudioInput::onStopPlay()
    {
        if (m_audioOutput != NULL)
        {
            m_audioOutput->stop();
            sourceFile.close();
            delete m_audioOutput;
            m_audioOutput = NULL;
        }
    }
    
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    代码中我分别用了QAudioOutput类的elapsedUSecs方法和QTime类的elapsed方法来记录wav文件音频时长。以下是两个方法的介绍。 
    这里写图片描述

    这里写图片描述 
    elapsedUSecs() 输出为微妙 
    elapsed() 输出为毫秒

    通过记录得到以下数据:

    m_audioOutput->elapsedUSecs() : 636000 
    m_time.elapsed() : 635

    m_audioOutput->elapsedUSecs() : 639000 
    m_time.elapsed() : 638

    m_audioOutput->elapsedUSecs() : 642000 
    m_time.elapsed() : 641

    m_audioOutput->elapsedUSecs() : 639000 
    m_time.elapsed() : 639

    而我们的计算结果为: 0.626122 s = 626.122 ms = 626122 us , 显然程序中获取的时间大于计算的时间,这也很好理解,因为程序的运行需要消耗一定的时间,所以记录的时间存在很小的误差(误差范围大致在0.009s ~ 0.016s),如果电脑性能更好这个误差就越小。

    特别注意

    这里我们用QAudioOutput类来计算wav文件时长,这里我们要给QAudioOutput类对象设置播放格式QAudioFormat ,设置的格式必须与解析出来的文件头信息中的 采样频率、音频通道数、每次采样得到的样本位数、编码格式等严格保持一致,否则不仅播放出来的声音不清楚,记录的音频时长也有问题


    通过以上发现,我们的计算公式是成立的。基本上我们可以在wav文件头信息中获取wav文件的全部信息,唯一就是wav**文件时长**需要通过文件头中的信息进行计算得到。所以如果我们想要做一个播放器,在播放器上显示一个wav文件的时长,我们就需要先解析wav文件的头信息,通过计算得到文件时长。

    更多参考

    Qt 之 WAV文件解析

    Qt之实现录音播放及raw(pcm)转wav格式

    Qt 之 解析wav文件的头信息(详细分析、对比不同wav文件的数据)

    展开全文
  • WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )

    文章目录





    一、WAV 文件格式



    在这里插入图片描述

    这是纯 PCM 样本的二进制内容 : 开始的部分都是 00 00 00 方便阅读 ;

    在这里插入图片描述

    这是使用 Adobe Audition 将上述 PCM 音频数据转为 WAV 格式后的音频数据二进制信息 :

    在这里插入图片描述

    WAV 文件格式分析 : WAV 文件是在 PCM 纯音频样本数据的基础上添加了 44 44 44 字节的文件头 ;

    52 49 46 46 A8 BD 1F 00 57 41 56 45 66 6D 74 20 12 00 00 00 01 00 02 00 80 BB 00 00 00 EE 02 00 04 00 10 00 00 00 64 61 74 61 00 A8
    

    00 00 00 ~ 03 03 03 : 资源交换文件标志 ( RIFF ) , 52 49 46 46 , 固定写法 ;

    在这里插入图片描述


    04 04 04 ~ 07 07 07 : 从下个地址 ( 08 08 08 ) 开始到 WAV 文件结尾的总字节数 , A8 BD 1F 00 , 整个 WAV 文件的大小就是该数值 + 8 ;

    整个 WAV 文件大小是 2,080,176 字节 ,
    A8 BD 1F 00 使用十进制表示是 2,080,168 字节 ,
    二者正好差了 8 8 8 字节 ;

    该 int 字节计算公式 : P C M 音 频 样 本 总 字 节 数 + 44 − 8 \rm PCM 音频样本总字节数 + 44 - 8 PCM+448

    在这里插入图片描述


    08 08 08 ~ 11 11 11 : WAVE 文件标志 , 57 41 56 45 , 是 WAVE 四个字母的 ASCII 码 , 固定写法 ;

    在这里插入图片描述


    12 12 12 ~ 15 15 15 : 波形格式标志 , 66 6D 74 20 , 一般都是 fmt , 其中 0x20 对应的字符是空格 ;

    在这里插入图片描述


    16 16 16 ~ 19 19 19 : 过渡字节 , 12 00 00 00 , 不确定 , 有的时候是 10 00 00 00 ;

    在这里插入图片描述


    20 20 20 ~ 21 21 21 : 格式种类 , 01 00 , 1 时表示线性 PCM 编码 ;

    在这里插入图片描述


    22 22 22 ~ 23 23 23 : 通道数 , 02 00 , 1 表示单声道 , 2 表示立体声 ;

    在这里插入图片描述


    22 22 22 ~ 23 23 23 : 通道数 , 02 00 , 1 表示单声道 , 2 表示立体声 ;

    在这里插入图片描述


    24 24 24 ~ 27 27 27 : 采样频率 , 80 BB 00 00 , 48000 Hz ;

    在这里插入图片描述


    28 28 28 ~ 31 31 31 : 波形数据传输速率 , 即每秒中的字节数 , 00 EE 02 00 , 每秒传输 192000 字节 ;

    计算公式 :

    采 样 率 × 通 道 数 × 采 样 位 数 8 = 48000 × 2 × 16 8 = 192000 \cfrac{采样率 \times 通道数 \times 采样位数}{8} = \cfrac{48000 \times 2 \times 16}{8} = 192000 8××=848000×2×16=192000

    采样位数是 16 16 16 位 , 1 1 1 字节 8 8 8 位 , 16 16 16 位是 2 2 2 字节 , 即每个采样 2 2 2 字节 ;

    在这里插入图片描述


    32 32 32 ~ 33 33 33 : 数据块调整长度 , 04 00 , 4 字节 ;

    计算公式如下 : 通 道 数 × 样 本 数 据 位 数 8 = 2 × 16 8 = 4 \cfrac{通道数 \times 样本数据位数}{8} = \cfrac{2 \times 16}{8} = 4 8×=82×16=4

    在这里插入图片描述


    34 34 34 ~ 35 35 35 : 每个样本的数据位数 , 10 00 , 16 位 , 2 2 2 字节 ;

    在这里插入图片描述


    36 36 36 ~ 39 39 39 : 数据标记 , 64 61 74 61 , data 的 ASCII 码值 ;

    这里注意该 WAV 文件在 36 ~ 37 位置插入了两个无意义的 00 字节 , 目前不清楚含义 , 暂时不用管 ;

    在这里插入图片描述


    40 40 40 ~ 43 43 43 : PCM 数据总长度, 单位 字节 , 00 A8 1F 00 , PCM 数据总长度为 2,074,624 字节 ;

    在这里插入图片描述





    在这里插入图片描述

    展开全文
  • 音频中文件大小计算公式(转)

    千次阅读 2019-10-03 15:24:49
    声卡对声音的处理质量可以用三个基本参数来衡量,即采样频率、采样位数和声道数。 采样频率是指单位时间内的采样...采样位数是记录每次采样值数值大小的位数。采样位数通常有8bits或16bits两种,采样位数越大,所能...

    声卡对声音的处理质量可以用三个基本参数来衡量,即采样频率、采样位数和声道数。

    采样频率是指单位时间内的采样次数。采样频率越大,采样点之间的间隔就越小,数字化后得到的声音就越逼真,但相应的数据量就越大。声卡一般提供11.025kHz、22.05kHz和44.1kHz等不同的采样频率。

    采样位数是记录每次采样值数值大小的位数。采样位数通常有8bits或16bits两种,采样位数越大,所能记录声音的变化度就越细腻,相应的数据量就越大。

    声道数是指处理的声音是单声道还是立体声。单声道在声音处理过程中只有单数据流,而立体声则需要左、右声道的两个数据流。显然,立体声的效果要好,但相应的数据量要比单声道的数据量加倍。

    不经过压缩,声音数据量的计算公式为:

    数据量(字节/秒)=(采样频率(Hz)×采样位数(bit)×声道数)/8

    (其中,单声道的声道数为1,立体声的声道数为2)

     

    举例:

    1、请计算对于5分钟双声道、16位采样位数、44.1kHz采样频率声音的不压缩数据量是多少?

    根据公式:数据量=(采样频率×采样位数×声道数×时间)/8

    得,数据量(MB)=[44.1×1000×16×2×(5×60)] /(8×1024×1024)=50.47MB

    计算时要注意几个单位的换算细节:

    时间单位换算:1分=60秒

    采样频率单位换算:1kHz=1000Hz

    数据量单位换算:1MB=1024×1024=1048576B

    2、请计算对于双声道立体声、采样频率为44.1kHz、采样位数为16位的激光唱盘(CD-A),用一个650MB的CD-ROM可存放多长时间的音乐?

    已知音频文件大小的计算公式如下:

    文件的字节数/每秒=采样频率(Hz)x采样位数(位)x声道数/8

    根据上面的公式计算一秒钟时间内的不压缩数据量:(44.1×1000×16×2)/8=0.168MB/s

    那么,一个650MB的CD-ROM可存放的时间为:(650/0.168)/(60×60)=1.07小时。

     

    以上转自:http://blog.sina.com.cn/s/blog_60715a1f0101b2ub.html

    转载于:https://www.cnblogs.com/EasonJim/p/6887421.html

    展开全文
  • 音频帧大小计算

    千次阅读 2018-09-30 10:23:09
    采样率 sampling = 44100  格式(编码字节数、采样一位所占的字节数) format = s16(格式)=16(bit) 声道数 channels = 2 一次采样(一秒中所占的位数)TotalBit = sampling * channels * format = 1411200 ...

    采样率   sampling = 44100 

    格式(编码字节数、采样一位所占的字节数) format = s16(格式)=16(bit)

    声道数 channels = 2

    一次采样(一秒中所占的位数)TotalBit = sampling * channels * format = 1411200

    一次采样(一秒中所占的字节数)TotalByte = TotalBit/8 = 176400


    1) AAC:
    nb_samples和frame_size = 1024

    一帧数据量:1024*2*s16/8 = 4096个字节。

    ACC帧率 (一秒播放帧数)= TotalByte/4096 = 43.06640625帧


    2) MP3:
    nb_samples和frame_size = 1152

    一帧数据量:1152*2*s16/8 = 4608个字节。

    MP3帧率 (一秒播放帧数)= TotalByte/4608 = 38.28125帧


    上面带了一些数据

    转自:https://blog.csdn.net/u013187531/article/details/73292173?utm_source=copy

    展开全文
  • 在做一个项目的时候遇到了这个问题,对方的音频文件是 .wav 文件,还是远程文件,如果都下载到服务器上,有点太多了,上百万条吧,算了算大小…还是找别的方法吧 在这里先推荐一个插件 getid3,...
  • 可以根据一个 wav 文件的大小、采样频率和采样大小估算出一个 wav 文件的播放长度。   譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是 "22050HZ / 16bit / 立体声" 格式(这...
  • 我编写了一个简单的Python程序来读取wave文件,并在更改后将其存储为新文件。在import codecs, wave#convert a number to its two's complemented value (For positive it is equal itself)def convert_to_twos...
  • WAV和PCM的关系和区别

    千次阅读 2019-02-08 18:51:14
    但是这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,和AVI一样,只要安装好了相应的Decode,就可以欣赏这些WAV了。在Windows平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完美...
  • Qt 之 WAV文件解析

    千次阅读 2016-10-10 15:25:05
    相对其他音频格式而言是一个缺点,其文件大小计算方式为:WAV格式文件所占容量(B) = (取样频率 X量化位数X 声道) X 时间 / 8 (字节= 8bit) 每一分钟WAV格式的音频文件的大小为10MB,其大小不随音量大小及清晰度...
  • 精确计算base64文件大小(含测试文件和源码) 苟且,诗与远方 1.base64简介 Base64这个术语最初是在“MIME内容传输编码规范”中提出的。Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚。它...
  • Java 计算base64字符串 文件大小

    千次阅读 2020-09-25 11:25:18
    * 精确计算base64字符串文件大小(单位:B) * @param base64String * @return */ public static double base64FileSize(String base64String) { /**检测是否含有base64,文件头)*/ if (base64String....
  • 我最终为此使用了Sound Viewer Tool,...如果将以下内容添加到svt.py中:def processWav(filename, channel):"""filename: path to a wav fileChannel: 1 for left, 2 for rightReturns centroids, frequencies, vo...
  • wav文件头格式详解

    千次阅读 2016-08-10 21:32:20
    wav文件头格式详解 首先先声明几个变量: int file_size;  //文件大小 int channel;  //声道数 int sample_rate;  //采样率 int bit_rate; //比特率 int sample_bit; //每个采样点的位数 int data_s
  • WAV文件头分析

    千次阅读 2018-04-25 10:47:23
    WAV语音文件头部含有44字节的标志信息,其含义如下://ckid:4字节 RIFF 标志,大写 wavHeader[0] = 'R'; wavHeader[1] = 'I'; wavHeader[2] = 'F'; wavHeader[3] = 'F'; //cksize:4字节文件长度,...
  • 简述在 Qt 之 WAV文件解析 中我们对wav文件的文件头中的数据进行了分析,在 Qt之实现录音播放及raw(pcm)转wav格式 中我们实现了录音/播放功能,并将.raw格式的音频文件转为wav格式文件,那我们拿到一个wav文件如何...
  • 码率含义以及计算大小

    千次阅读 2016-10-26 14:30:57
    码率也可以叫比特率,就是一种音乐每秒播放...也就是说128bps的4分钟的歌曲的文件大小是这样计算的(128/8)*4*60=3840kB=3.8MB,也就是说同样比特率(bps)的同一歌曲不论是什么格式(如mp3 wma)容量大小都是基本一样的
  • java播放wav文件

    2021-03-06 01:34:48
    STM32播放WAV程序_计算机软件及应用_IT/计算机_专业资料。此程序配置的采样率为16k,PWM频率144k; 此代码可以实现16位单声道的WAV文件解码,通过PWM 或者DAC输出音频......4 / 12 件路径和名称,读写打开,Opens file ...
  • 学习目标: 音频之WAV格式编码解析 学习内容: 介绍 WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,...计算公式 对应16进制 解释
  • C语言解析wav文件格式

    千次阅读 2020-01-21 21:18:36
    C语言解析wav文件 接下来在了解了wav文件的有关概念后,我们将通过学习C语言的有关函数库进行wav文件的一些元数据提取出来备用。 1.wav文件的二进制格式解析 一个wav文件的二进制解析: 二进制文件,本质上就是...
  • WAV文件格式详解

    千次阅读 2020-03-29 18:31:14
    By: Ailson Jack Date: 2020.03.29 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:... 1、WAV文件概述 WAV是微软公司开发的一种音频格式文件,用于保存Windows平台的音频信息...
  • wav文件格式

    2017-06-15 16:53:34
    WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,...
  • 自己用python写的演示同时播放多个wave文件,计算声音分贝,语音激励
  • python读取wav文件并进行FFT变换

    千次阅读 2019-10-11 15:32:55
    一、wav格式文件 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也...
  • 一、说明: 录音文件大小多少?用什么存比较合?我有500G的硬盘存录音能存多久?... 1) WAV文件大小计算公式:采样频率(kHz) x 采样位数 x 声道数 x 时间(秒) / 8 = 文件大小(kb) 如果采用如下的参数:采样率:8...
  • wav音频文件格式

    千次阅读 2019-07-14 20:14:49
    在做音频信号采集或音频信号分析时会经常遇到wav格式的文件,本章将介绍wav文件的格式。...RIFF文件由块结构组成,块结构由3个部分组成,分别为块ID、块大小、块数据,其中块ID由4字节组成,用于...
  • 批量统计wav音频总时长的三种方法

    千次阅读 2020-06-02 17:24:28
    一、使用Python-sox模块包 使用Python的第三方模块包 sox,pip安装即可,使用这种方法,耗时比较长。 pip install sox ... wav_path = os.path.join(path, wav) if wav_path.endswith('.wav'): ii += 1 try:
  • 如何从wav数据判断音量的高低?

    千次阅读 2020-01-01 21:06:00
    如何从wav数据判断音量的高低? https://www.zhihu.com/question/29157624 作者:舒书 链接:https://www.zhihu.com/question/29157624/answer/46669197 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,315
精华内容 4,526
关键字:

wav大小计算