熟悉 wave 文件的朋友请进。

Chice_wxg 2003-10-14 05:44:59
熟悉 wave 文件的朋友请进。

wave 文件中有许多数据的采样。请问这些采样是什么含义?

知道了这些采样,能知道对应的频率吗?谢谢!

...全文
50 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
online 2003-10-16
  • 打赏
  • 举报
回复
up一下
脆皮大雪糕 2003-10-16
  • 打赏
  • 举报
回复
可以参考mp3压缩算法,其中很重要的部分就是对声音采样进行频谱分析。根据各个频率的振幅,振幅最大的频率就是主音频率,其他的是泛音频率。如果你仅仅是为了取得声音的频率分析主音频率就可以了。比如钢琴的do音和提琴的do音的主音频率应该是相近的,但是泛音频谱区别非常大。
Chice_wxg 2003-10-15
  • 打赏
  • 举报
回复

谢谢各位帮忙,但这些资料我在网上已经找到了。

我现在需要知道的是,如何通过采样确定此时的发音频率?

麻烦各位帮忙给点提示,谢谢。
Gelim 2003-10-14
  • 打赏
  • 举报
回复
WAVE文件格式剖析
 
  WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。WAVE文件由文件头和数据体两大部分组成。其中文件头又分为RIFF/WAV文件标识段和声音数据格式说明段两部分。WAVE文件各部分内容及格式见附表。

  常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。

  对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。

WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAVE文件是由样本组织而成的。在单声道WAVE文件中,声道0代表左声道,声道1代表右声道。在多声道WAVE文件中,样本是交替出现的。
  WAVE文件格式说明表  
  偏移地址 字节数 数据类型 内 容
 
文件头 00H 4 char "RIFF"标志
04H 4 long int 文件长度
08H 4 char "WAVE"标志
0CH 4 char "fmt"标志
10H 4   过渡字节(不定)
14H 2 int 格式类别(10H为PCM形式的声音数据)
16H 2 int 通道数,单声道为1,双声道为2
18H 2 int 采样率(每秒样本数),表示每个通道的播放速度,
1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。
20H 2 int 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
22H 2   每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。
24H 4 char 数据标记符"data"
28H 4 long int 语音数据的长度
  PCM数据的存放方式:
  样本1 样本2
8位单声道 0声道 0声道
8位立体声 0声道(左) 1声道(右) 0声道(左) 1声道(右)
16位单声道 0声道低字节 0声道高字节 0声道低字节 0声道高字节
16位立体声 0声道(左)低字节 0声道(左)高字节 1声道(右)低字节 1声道(右)高字节
 WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如下所示。  
样本大小 数据格式 最大值 最小值
8位PCM unsigned int 225 0
16位PCM int 32767 -32767

Gelim 2003-10-14
  • 打赏
  • 举报
回复
http://www.yesky.com/20030414/1663116_2.shtml
Chice_wxg 2003-10-14
  • 打赏
  • 举报
回复
up
rainstormmaster 2003-10-14
  • 打赏
  • 举报
回复
参考:
http://tech.sina.com.cn/s/923.html
脆皮大雪糕 2003-10-14
  • 打赏
  • 举报
回复
下面这个地址有wav文件格式的说明
http://www.gameres.com/Articles/Listen/wavePX.htm

wav实际上是不同时间点上的声音的离散采样,如果将点连起来的确可以得到声音的波形。但是一般情况下我们不可能得到一个纯音,因为我们得到的声音一般都是许多频率的声音的合成。所以只能靠弗利叶变换等数学方法得到频谱分布,当然得到频谱分布以后一般能得到一个主音频率,也就是在频谱分布上幅度最高的那个频率。
winamp火焰显示实际上就是频谱分布显示。当然,那是mp3而不是wav,但是mp3就是通过对wav进行频谱分析去除人不敏感的频率信号而产生的,具体的可以在网络上搜索到mp3算法的代码
online 2003-10-14
  • 打赏
  • 举报
回复
希望对你有用
Public Sub AnalyzeWaveFile(FileName$)

Dim intDat As Integer
Dim intBit As Integer
Dim intFrequenz As Long
Dim intChannel As Integer
Dim strFrq As String
Dim strBit As String
Dim strChannel As String

On Error GoTo Fehler

intDat = FreeFile

Open FileName$ For Binary As intDat

Get intDat, 25, intFrequenz

If intFrequenz = 44100 Then
lblHz.Caption = FormatNumber(intFrequenz, 0) & " Hz"
Else
lblHz.Caption = FormatNumber(intFrequenz, 0) & " Hz"
End If

Get intDat, 35, intBit

If intBit = 16 Then
lblBitRate.Caption = intBit & "-Bit"
Else
lblBitRate.Caption = intBit & "-Bit"
End If

Get intDat, 23, intChannel

If intChannel = 2 Then
lblChannels.Caption = "Stereo"
Else
lblChannels.Caption = "Mono"
End If

Close intDat

Exit Sub

Fehler:
Close intDat
MsgBox ("Error analyzing File, perhaps no valid WAVE-File !"), vbCritical, "Error"

End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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