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;
  • 相关阅读:
    Redis
    cz_health_day13项目实战
    cz_health_day11
    cz_health_day10
    cz_health_day09
    cz_health_day08
    MySQL8管理系列之二:从5.5升级到8的问题处理
    MySQL8管理系列之一:Mysql 8.0以后版本的安装
    MySQL 5.5.x 数据库导入到 8.0.x 服务器
    修改Mysql 8.0版本的默认数据库目录
  • 原文地址:https://www.cnblogs.com/tsolarboy/p/8744929.html
Copyright © 2011-2022 走看看