Linux中如何查看一个wav文件的采样率和声道数(单,双声道)等声音技术指标?()

springmagus 2005-08-02 02:13:07
做一个简单的音频播放器,能播放wav音频文件,编程接口是oss,为了正确设置声卡驱动程序,需要这些指标.
如题,还望csdn的大虾不吝赐教.
...全文
1885 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
red-fly 2005-11-13
  • 打赏
  • 举报
回复
这是oss自带的例程中给出的结构,oss自已的录音程序用的就是这个结构,我copy oss录音例程中的程序到自己的project中录音,也可以录音,用播放器也可以正常播放。

typedef struct WaveHeader
{
char main_chunk[4];
unsigned int length;
char chunk_type[4];

char sub_chunk[4];
unsigned int sc_len;
unsigned short format;
unsigned short modus;
unsigned int sample_fq;
unsigned int byte_p_sec;
unsigned short byte_p_spl;
unsigned short bit_p_spl;

char data_chunk[4];
unsigned int data_length;

};


不过我也有个问题:
在Kdevelop调试中,字符串的变量值显示"\177\200\204\190",表示的是什么?是ascii码吗?我每次从声卡读取512字节的数据,每次都是以\177或者\200开头,这是为什么?我想自动检测是否有声音输入,怎么办?
mhorse 2005-08-02
  • 打赏
  • 举报
回复



WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。RIFF块包含两个子块,这两个子块的ID分别是"fmt"和"data",其中"fmt"子块由结构PCMWAVEFORMAT所组成,其子块的大小就是sizeofof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据。WAVE文件的结构如下图三所示:
 图三、WAVE文件结构

标志符(RIFF) 所占字节大小 :4
数据大小 所占字节大小 :4
格式类型("WAVE") 所占字节大小 :4
"fmt" 所占字节大小 :4
Sizeof(PCMWAVEFORMAT) 所占字节大小 :4
PCMWAVEFORMAT 所占字节大小 :18或者16
"data" 所占字节大小 :4
声音数据大小 所占字节大小 :4
声音数据
总计:44


PCMWAVEFORMAT结构定义如下:
Typedef struct
{
WAVEFORMAT wf;//波形格式;
WORD wBitsPerSample;//WAVE文件的采样大小;
}PCMWAVEFORMAT;

WAVEFORMAT结构定义如下:
typedef struct
{
WORD wFormatag;//编码格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等
WORD nChannls;//声道数,单声道为1,双声道为2;
DWORD nSamplesPerSec;//采样频率;
DWORD nAvgBytesperSec;//每秒的数据量;
WORD nBlockAlign;//块对齐;
}WAVEFORMAT;


扩展的WAVEFORMATEX结构定义如下
/*
* extended waveform format structure used for all non-PCM formats. this
* structure is common to all non-PCM formats.
*/
typedef struct tWAVEFORMATEX
{
WORD wFormatTag; /* format type */
WORD nChannels; /* number of channels (i.e. mono, stereo...) */
DWORD nSamplesPerSec; /* sample rate */
DWORD nAvgBytesPerSec; /* for buffer estimation */
WORD nBlockAlign; /* block size of data */
WORD wBitsPerSample; /* number of bits per sample of mono data */
WORD cbSize; /* the count in bytes of the size of */
/* extra information (after cbSize) */
} WAVEFORMATEX


"data"子块包含WAVE文件的数字化波形声音数据,其存放格式依赖于"fmt"子块中wFormatTag成员指定的格式种类,在多声道WAVE文件中,样本是交替出现的。如16bit的单声道WAVE文件和双声道WAVE文件的数据采样格式分别如图四所示:

16位单声道:
采样一 采样二 ……
低字节 高字节 低字节 高字节 ……

16位双声道:
采样一 ……
左声道 右声道 ……
低字节 高字节 低字节 高字节 ……

图四、WAVE文件数据采样格式
yjf7888 2005-08-02
  • 打赏
  • 举报
回复
不会,帮你顶,顺便学习一下

23,209

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧