VB实现远程读取音频(Wave格式)的播放时间

 

模块中的代码----主要是定义Wave的音频格式和一些类模块中需要用到的Api函数 

Public Type RIFF_HEADER
  szRiffID As String * 4   'R','I','F','F'
  dwRiffSize As Long
  szRiffFormat As String * 4      'W','A','V','E'
End Type

'WAV的格式数据
Public Type WAVE_FORMAT
  wFormatTag As Integer     '记录着此声音的格式代号
  wChannels As Integer       '记录声音的频道数
  dwSamplesPerSec As Long     '记录每秒取样数,采样率(每秒样本数),表示每个通道的播放速度
  dwAvgBytesPerSec As Long    '记录每秒的数据量 波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小
  wBlockAlign As Integer       '记录区块的对齐单位,数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整
  wBitsPerSample As Integer     '记录每个取样所需的位元数  8位元时无声为128,16位元时为0才是无声,每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样
End Type

Public Type FMT_BLOCK
  szFmtID  As String * 4         'f','m','t',' '
  dwFmtSize As Long
  wav_Fmt As WAVE_FORMAT
End Type

'可选数据
Public Type FACT_BLOCK
  szFactID  As String * 4       'f','a','c','t'
  dwFactSize As Long
  data As Long
End Type

'实际数据
Public Type DATA_BLOCK
  szDataID  As String * 4    'd','a','t','a'
  dwDataSize As Long
End Type

Public Type Wav_FILE
    riff_hd As RIFF_HEADER
    fmt_blk As FMT_BLOCK
    'fact_blk As FACT_BLOCK
    data_blk As DATA_BLOCK
End Type

Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" _
(ByVal hInternetSession As Long, ByVal sUrl As String, _
ByVal sHeaders As String, ByVal lHeadersLength As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long

Public Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" _
(ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef SBuffer As Any, _
ByRef lBufferLength As Long, ByRef lIndex As Long) As Integer

Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer

Public Declare Function InternetReadFileWavHdr Lib "wininet.dll" Alias "InternetReadFile" _
(ByVal hFile As Long, SBuffer As Wav_FILE, ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer


Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

 

类模块----根据网络路径(http)获取音频时间

Option Explicit
Public totalPlayTime As Long
Private Const IF_NO_CACHE_WRITE = &H4000000
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Const HTTP_QUERY_CONTENT_LENGTH = 5

 

Function GetPlayFileInfo(ByVal pFile As String) As Boolean
On Error GoTo myErrHandler
    Dim mFile As Long
    Dim SBuffer                 As String * 1024
    Dim FileLenth               As Long
    Dim BRead                   As Int

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值