1、如下为.dat文件中文件头的基本格式:
MagicNumber Format StartingAddress PageNum Length [NewFormat]
下面是分别的解释:
MagicNumber:1651.
Format:a number from 1 to 4, indicating the format of the samples in the file. This number represents a data format:
- (1) - hexadecimal,
- (2) - integer
- (3) - long
- (4) - float
- (9) - Use new scheme
StartingAddress:starting address of the block that was saved.
PageNum:page number the block was taken from.
Length:number of samples in the block.
NewFormat:Format (9); the new scheme. This is optional when usign the legacy formats 1 - 4
如下例子中的数据:
1 1651 2 8cc0 0 1a70c 2 79 3 74 4 74 5 67 6 ... 7 ...
第一行的数据为:1651 2 8cc0 0 1a70c
1651标志着这是TI的.dat文件的格式。
2表示了这个文件中的数据是整数格式的,比如第二行的数据79是interger的格式。
8cc0表示这段数据Load Memory到CCS软件的过程中,是加载到0x8cc0对应的地址上的。
0表示这段数据将加载到page0的位置上。
1a70c表示这段数据的总长度为0x1a70c(Hex) = 108300(Decimal)
2、创建图像对应的.dat文件:
如下的图片,转换为190*190大小的图片,并生成对应的.dat文件.
Code(文件名称:_dat_create.py):
1 import cv2 2 import glob 3 Path = glob.glob('*.jpg') 4 count = 0 5 for Pic in Path: 6 I = cv2.imread(Pic) 7 res = cv2.resize(I,(190,190),interpolation=cv2.INTER_CUBIC) 8 Name = "Test" + str(count) 9 cv2.imwrite(Name + ".png",res) 10 fid = open(Name + ".dat",'w') 11 fid.write('1651 2 8cc0 0 1a70c'+' ') 12 width,height = res.shape[:2] 13 for channel in range(3): 14 for row in range(height): 15 for col in range(width): 16 fid.write(str(res[row][col][channel])+' ') 17 count += 1
将上述代码以及要处理的图片拷贝到同一个目录下,双击运行python脚本文件即可生成:
我们可以通过修改代码中的190*190的图像尺寸来生成不同的图像数据,并生成对应的.dat文件。
3、创建音频对应的.dat文件:
如下链接中的单音音源sin.wav,生成对应的.dat文件.
https://files.cnblogs.com/files/uestc-mm/sin.7z
Code(文件名Audio2Dat.py):
1 from scipy.io.wavfile import write, read 2 import numpy as np 3 import math 4 import glob 5 import sys 6 import os 7 8 INT16_FAC = (2**15)-1 9 INT32_FAC = (2**31)-1 10 INT64_FAC = (2**63)-1 11 norm_fact = {'int16':INT16_FAC, 'int32':INT32_FAC, 'int64':INT64_FAC,'float32':1.0,'float64':1.0} 12 13 def wavread(filename): 14 """ 15 Read a sound file and convert it to a normalized floating point array 16 filename: name of file to read 17 returns fs: sampling rate of file, x: floating point array 18 """ 19 if (os.path.isfile(filename) == False): # raise error if wrong input file 20 print("Input file does not exist. Make sure you computed the analysis/synthesis") 21 22 fs, x = read(filename) 23 24 if (len(x.shape) !=1): # raise error if more than one channel 25 raise ValueError("Audio file should be mono") 26 27 if (fs !=44100): # raise error if more than one channel 28 raise ValueError("Sampling rate of input sound should be 44100") 29 30 #scale down and convert audio into floating point number in range of -1 to 1 31 x = np.float32(x)/norm_fact[x.dtype.name] 32 return fs, x 33 34 path = glob.glob('*.wav') 35 count = 1 36 for p in path: 37 fs, dat = wavread(str(p)) 38 39 fid = open(str(count)+'.dat','w') 40 # flie·Magic=1651 X=9 data·StartAddress=0x80000000 X=0 data·Number(Hex)=0x7a120 X=5 41 fid.write('1651 9 80000000 0 7a120 5'+' ') 42 for i in dat: 43 fid.write(str(i)+' ') 44 fid.close() 45 count += 1
将上述代码以及要处理的图片拷贝到同一个目录下,双击运行python脚本文件即可生成.dat文件:
结果如下:
1 1651 9 80000000 0 7a120 5 2 0.0 3 0.05011866 4 0.10004042 5 0.14956915 6 0.19851027 7 ... 8 ...
参考内容:
Reference001:来自TI员工的回答,https://e2e.ti.com/support/tools/ccs/f/81/t/789759?tisearch=e2e-sitesearch&keymatch=%20user:332444
Reference002:所有代码,图片-音频打包下载(TI_dat_create.7z),https://files.cnblogs.com/files/uestc-mm/TI_dat_create.7z