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文件拿出 使用播放器播放时 无法播放 这是为什么呢
------解决方案--------------------
你需要了解wav文件头才能看懂这个脚本。
8KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)
偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int&