|
25 | 25 | SB_DFREQ_REGEX = re.compile(r'\[!([\w]+)!\]')
|
26 | 26 |
|
27 | 27 | D500X_ATTRIBUTE_REGEX = re.compile(r'(?P<d500x>D500X V.+S/N=\d+)')
|
| 28 | +AR125_ATTRIBUTE_REGEX = re.compile(r'(?P<ar125>DEV=.+CMT=<.+>)') |
28 | 29 |
|
29 | 30 | # old SonoBat format e.g. TransectTestRun1-24Mar11-16,27,56-Myoluc.wav
|
30 | 31 | SONOBAT_FILENAME1_REGEX = re.compile(r'(?P<date>[ 0123][0-9][A-Z][a-z][a-z][0-9][0-9]-[012][0-9],[0-6][0-9],[0-6][0-9])(-(?P<species>[A-Za-z]+))?')
|
@@ -66,13 +67,22 @@ def extract_sonobat_metadata(fname):
|
66 | 67 | sb_md['te'] = int(re.search(SB_TE_REGEX, md).groups()[0])
|
67 | 68 | sb_md['dfreq'] = re.search(SB_DFREQ_REGEX, md).groups()[0]
|
68 | 69 | note = md.split('!]', 1)[1]
|
| 70 | + |
69 | 71 | # If this file was created with Sonobat D500X Attributer, parse out D500X metadata
|
70 | 72 | match = re.search(D500X_ATTRIBUTE_REGEX, note)
|
71 | 73 | if match and match.group('d500x').count(',') == 8:
|
72 | 74 | fw, f, pre, len, hp, a, ts, timestamp, sn = match.group('d500x').split(',')
|
73 | 75 | f, pre, len, hp, a, ts, sn = tuple(s.split('=',1)[1].strip() for s in (f, pre, len, hp, a, ts, sn))
|
74 | 76 | sb_md['d500x'] = dict(Firmware=fw, F=f, PRE=pre, LEN=len, HP=hp, A=a, TS=ts, Timestamp=timestamp, Serial=sn)
|
75 |
| - # TODO: parse out BAT AR125 metadata fields |
| 77 | + |
| 78 | + # Binary Acoustic AR125 stuffs metadata into Sonobat note |
| 79 | + match = re.search(AR125_ATTRIBUTE_REGEX, note) |
| 80 | + if match: |
| 81 | + dev, dc, utc, ltb, cmt = match.group('ar125').split(',', 4) |
| 82 | + dev, dc, utc, ltb, cmt = tuple(s.split('=',1)[1].strip() for s in (dev, dc, utc, ltb, cmt)) |
| 83 | + cmt = cmt.strip('<>') |
| 84 | + sb_md['ar125'] = dict(DEV=dev, DC=dc, UTC=utc, LTB=ltb, CMT=cmt) |
| 85 | + |
76 | 86 | sb_md['note'] = note
|
77 | 87 |
|
78 | 88 | with closing(wave.open(fname)) as wavfile:
|
@@ -108,9 +118,15 @@ def sonobat2guano(fname):
|
108 | 118 | gfile['Note'] = sb_md['note'].strip().replace('\r\n', '\\n').replace('\n', '\\n')
|
109 | 119 | if sb_md.get('species', None):
|
110 | 120 | gfile['Species Auto ID'] = sb_md['species']
|
| 121 | + |
111 | 122 | if 'd500x' in sb_md:
|
112 | 123 | for k, v in sb_md['d500x'].items():
|
113 | 124 | gfile['PET', k] = v
|
| 125 | + |
| 126 | + if 'ar125' in sb_md: |
| 127 | + for k, v in sb_md['ar125'].items(): |
| 128 | + gfile['BAT', k] = v |
| 129 | + |
114 | 130 | print gfile._as_string()
|
115 | 131 |
|
116 | 132 | gfile.write()
|
|
0 commit comments