一个裸的PCM格式音频数据,如果不带头信息,不知道其采样率等相关信息,就无法用播放器播放出来。下面是默认的头信息格式:

//音频头部格式
struct wave_pcm_hdr
{char            riff[4];                        // = "RIFF"SR_DWORD        size_8;                         // = FileSize - 8char            wave[4];                        // = "WAVE"char            fmt[4];                         // = "fmt "SR_DWORD        dwFmtSize;                      // = 下一个结构体的大小 : 16SR_WORD         format_tag;              // = PCM : 1SR_WORD         channels;                // = 通道数 : 1SR_DWORD        samples_per_sec;         // = 采样率 : 8000 | 6000 | 11025 | 16000SR_DWORD        avg_bytes_per_sec;       // = 每秒字节数 : dwSamplesPerSec * wBitsPerSample / 8SR_WORD         block_align;             // = 每采样点字节数 : wBitsPerSample / 8SR_WORD         bits_per_sample;         // = 量化比特数: 8 | 16char            data[4];                 // = "data";SR_DWORD        data_size;               // = 纯数据长度 : FileSize - 44
} ;//默认音频头部数据
struct wave_pcm_hdr default_pcmwavhdr =
{{ 'R', 'I', 'F', 'F' },0,{'W', 'A', 'V', 'E'},{'f', 'm', 't', ' '},16,1,1,16000,32000,2,16,{'d', 'a', 't', 'a'},0
};
  • 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
  • 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

将头信息写入音频数据中:

struct wave_pcm_hdr pcmwavhdr = default_pcmwavhdr;fwrite(&pcmwavhdr, sizeof(pcmwavhdr) ,1, fp);
while (1)
{const void *data = QTTSAudioGet(sess_id, &audio_len, &synth_status, &ret);if (NULL != data){fwrite(data, audio_len, 1, fp);pcmwavhdr.data_size += audio_len;//修正pcm数据的大小}if (synth_status == MSP_TTS_FLAG_DATA_END || ret != 0) break;
}//合成状态synth_status取值可参考开发文档//修正pcm文件头数据的大小
pcmwavhdr.size_8 += pcmwavhdr.data_size + 36;//将修正过的数据写回文件头部
fseek(fp, 4, 0);
fwrite(&pcmwavhdr.size_8,sizeof(pcmwavhdr.size_8), 1, fp);
fseek(fp, 40, 0);
fwrite(&pcmwavhdr.data_size,sizeof(pcmwavhdr.data_size), 1, fp);
fclose(fp);
PCM(Pulse Code Modulation)也被称为 脉码编码调制。PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。(它的基本组织单位是BYTE(8bit)或WORD(16bit))

    一般情况下,一帧PCM是由2048次采样组成的( 参 http://discussion.forum.nokia.com/forum/showthread.php?129458-请问PCM格式的音频流,每次读入或输出的块的大小是必须固定为4096B么&s=e79e9dd1707157281e3725a163844c49 )。

    如果是双声道的文件,采样数据按时间先后顺序交叉地存入。如图所示:  

   PCM的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如下所示。

    样本大小      数据格式            最小值    最大值    8位PCM       unsigned int         0       225    16位PCM      int                -32767    32767

PCM音频文件格式的头信息相关推荐

  1. PCM格式分析(头信息+负载)

    PCM(脉冲 +编码+调制)为原始音频数据采集的一种格式,可以只包含负载(payload),也可以包含头信息(header)+负载(payload).通过arecord得到的PCM文件是包含头信息(h ...

  2. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

  3. PCM编码及Waveform音频文件格式

    转载自 https://www.cnblogs.com/henjay724/p/9463296.html 嵌入式里有时候也会和音频打交道,比如最近特别火的智能音箱产品,离不开前端的音频信号采集.降噪, ...

  4. python pcm,python pcm音频添加头转成Wav格式文件的方法

    如下所示: ''''' add Head Infomation for pcm file ''' import sys import struct import os __author__ = 'bo ...

  5. PCM音频文件(.wav)压缩成ADPCM(.wav) ,wav文件分析,wav 文件格式

    本文来自: http://blog.csdn.net/jtlyr/article/details/5321884 这里还有介绍一些wav文件的其他网站,记录下: https://ccrma.stanf ...

  6. linux文件系统添加pcm,linux下用sox批量将pcm文件加wav头、批量修改采样率、切音频...

    linux下用sox可以给pcm文件加头 例如:test.pcm是不带wav头的pcm文件 $ sox -t raw -c 1 -e signed-integer -b 16 -r 16000 tes ...

  7. 【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图像采集 | H.264 视频编码 | PCM 音频采集 | AAC 音频编码 | RTMP 包封装推流 )

    文章目录 一. 安卓直播推流专栏博客总结 二. 相关资源介绍 三. GitHub 源码地址 四. 整体 Android 直播推流数据到服务器并观看直播演示过程 Android 直播推流流程 : 手机采 ...

  8. 【小程序】PCM音频录制播放小工具

    VS2010工程源码下载链接: https://pan.baidu.com/s/1Vf6FOISDXDjORyLcQqCErw PCM是windows系统录音后得到的纯音频数据,需要添加头部说明信息才 ...

  9. 详解WAVE音频文件格式

    详解WAVE音频文件格式 WAVE声音文件格式是目前Windows最直接保存声音数据的文件格式.在涉及声音信号处理时大多是对WAV文件直接操作,有必要搞清楚所研究声音的文件格式. 1 RIFF文件与W ...

最新文章

  1. 视频导切台控制说明:RGBLink MiniPro初步测试
  2. 012_JDBC模板
  3. codevs 1269 匈牙利游戏
  4. java 看虚拟机内存_java 虚拟机内存介绍
  5. android intent包装,Android 中的 Intent
  6. 如何减小Exe, DLL 的大小
  7. VSCode配置html文件自动补全(语法提示)
  8. python爬虫:requests和urllib爬豆瓣Top250
  9. 大案牍术——我们或是只是一串数字
  10. python中得到26个字母
  11. 华为AX3 PRO路由器与光猫桥接
  12. RedisClient下载地址
  13. Solr面试回答思路
  14. 【NLP】文本分类TorchText实战-AG_NEWS 新闻主题分类任务(PyTorch版)
  15. Windows下pytorch-gpu安装以及CUDA详细安装过程 附带各个版本安装包
  16. vue项目部署服务器两个域名,Vue项目服务器部署之子目录部署方法_飛雲_前端开发者...
  17. 如何控制滚轮横向滑动(原生JS实现方法)
  18. [信息图表]手机进化简史
  19. 登录页面带验证码html,使用H5+css3+js实现带验证码的登录页面
  20. PHPCMSV9标签TAGS全静态化教程(中文转义编码改成拼音显示,有图有案例)

热门文章

  1. SQL 发送Email
  2. Asterisk修改call file源代码(pbx_spool.c)以支持邀请PJSIP webrtc分机
  3. python 根据地址求经纬度 谷歌_js获取ip地址利用谷歌地图获得经纬度
  4. SSClone非ARP会话劫持原理分析-ARP原理
  5. 2022-2027年中国棉纺织机械行业发展监测及投资战略研究报告
  6. 工程项目管理数字化系统建设持续推动施工企业数字化转型行稳致远
  7. 微服务理论与实践[1]-什么是微服务
  8. python基础:找基因
  9. 将秒换成 小时,分钟,秒
  10. mysql数据库备份工具