zoukankan      html  css  js  c++  java
  • 获得wav语音文件时长

    用代码获取文件时长。

    直接读取wav文件头信息,从文件起始地址偏移28个字节长度为4个字节保存的是每秒钟播放的字节数,

    从文件起始地址偏移40个字节长度为4个字节保存的是声音数据的总的字节数,相除就是播放时间。 

     1 var
     2 
     3 fileStream: TFileStream;
     4 {文件头标志}
     5 fileHeadArr: array[0..3] of Byte;
     6 //每秒钟播放的字节数
     7 //声音数据的总的字节数,相除就是播放时间
     8 nSecByte, nCountByte: Integer;
     9 begin
    10 Result := -1;
    11 fileStream := TFileStream.Create(strSourceFile, fmOpenRead or fmShareDenyNone);
    12 try
    13 try 
    14 fileStream.Position := 28;
    15 fileStream.Read(fileHeadArr, SizeOf(fileHeadArr));
    16 
    17 nSecByte := StrToInt('$' + IntToHex(fileHeadArr[3], 2) + IntToHex(fileHeadArr[2], 2) +
    18 IntToHex(fileHeadArr[1], 2) + IntToHex(fileHeadArr[0], 2));
    19 
    20 fileStream.Position := 508;
    21 fileStream.Read(fileHeadArr, SizeOf(fileHeadArr));
    22 nCountByte := StrToInt('$' + IntToHex(fileHeadArr[3], 2) + IntToHex(fileHeadArr[2], 2) +
    23 IntToHex(fileHeadArr[1], 2) + IntToHex(fileHeadArr[0], 2));
    24 
    25 Result := nCountByte div nSecByte;
    26 except
    27 on e:Exception do
    28 begin
    29        输出日志('GetFileDuration: ' + e.Message);
    30 end; 
    31 end;
    32 finally
    33 fileStream.Free;
    34 end;
  • 相关阅读:
    如何把一个一般的git库变成“裸库”?
    MacOSX下杀掉sudo进程
    nginx FastCGI错误Primary script unknown解决办法
    Lua继承userdata
    Unity图文混排
    C++轻量级跨平台文件系统API
    lua_next()
    重载方法匹配算法
    C++模板函数只能全特化不能偏特化
    xcode离线安装包下载
  • 原文地址:https://www.cnblogs.com/tsolarboy/p/8744929.html
Copyright © 2011-2022 走看看