日期:2014-05-16  浏览次数:20880 次

od命令问题
 48     for wav_file in `ls $audio_path | grep wav`
 49     do
 50         echo "$wav_file*******"
 51         size=`ls -l $wav_file  | awk '{print $5}'`
 52         echo $size
 53         if [ $size -gt 44 ]
 54         then
 55             voice_len=`od -An -j40 -N4 -i ${audio_path}/$wav_file` # 语音数据的大小
 56             actual_len=$(($voice_len+44)) # 语音文件的实际大小,44字节是语音文件头的大小
 57             ls_len=`ls -l ${audio_path}/$wav_file | awk '{print $5}'`
 58             echo "voice_len:$voice_len actual_len:$actual_len ls_len:$ls_len"       
 59             if test $actual_len -eq $ls_len  # 文件复制完毕
 60             then
 61                 yes|mv ${audio_path}/$wav_file  $store_tmp_path
 62                 echo "#####################"
 63             fi
 64         fi
 65     done
以上是一个脚本的片段  有的地方不懂 请大神一一解析一下:
1.od 命令使用 这个命令注释上说输出的是语音数据的大小 能详细解析一下吗?
2.该脚本一直在机器上运行audio_path路径下的文件是从其他地方复制过来的 为什么要加入那一些列的判断 
而且判断文件是否复制完毕的条件 我也不明白
3.我获取得到了一个wav格式的文件 但是使用od -An -j40 -N4 -i test.wav 输出结果是0 但是ls -l显示文件的大小13452 为什么会出现这种状况呢  而且我把该wav文件拿出 使用播放器播放时 无法播放 这是为什么呢

------解决方案--------------------
引用
1.od 命令使用 这个命令注释上说输出的是语音数据的大小 能详细解析一下吗?

你需要了解wav文件头才能看懂这个脚本。

8KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)
偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int&