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;
  • 相关阅读:
    每天一个linux命令---mount
    java反射机制
    每天一个linux命令---netstat
    oracle调试存储过程
    ora-14400插入的分区关键字未映射到任何分区---oracle数据库表过期问题
    Java类加载
    nginx学习笔记
    web工程spring+ibatis单元测试
    每天一个Linux命令---tcpdump
    每天一个linux命令---导出到文件
  • 原文地址:https://www.cnblogs.com/tsolarboy/p/8744929.html
Copyright © 2011-2022 走看看