Skip to content

Commit f835e3e

Browse files
committed
extract BAT AR125 -specific metadata if embedded in Sonobat metadata
1 parent ab9b994 commit f835e3e

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

bin/sb2guano.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
SB_DFREQ_REGEX = re.compile(r'\[!([\w]+)!\]')
2626

2727
D500X_ATTRIBUTE_REGEX = re.compile(r'(?P<d500x>D500X V.+S/N=\d+)')
28+
AR125_ATTRIBUTE_REGEX = re.compile(r'(?P<ar125>DEV=.+CMT=<.+>)')
2829

2930
# old SonoBat format e.g. TransectTestRun1-24Mar11-16,27,56-Myoluc.wav
3031
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):
6667
sb_md['te'] = int(re.search(SB_TE_REGEX, md).groups()[0])
6768
sb_md['dfreq'] = re.search(SB_DFREQ_REGEX, md).groups()[0]
6869
note = md.split('!]', 1)[1]
70+
6971
# If this file was created with Sonobat D500X Attributer, parse out D500X metadata
7072
match = re.search(D500X_ATTRIBUTE_REGEX, note)
7173
if match and match.group('d500x').count(',') == 8:
7274
fw, f, pre, len, hp, a, ts, timestamp, sn = match.group('d500x').split(',')
7375
f, pre, len, hp, a, ts, sn = tuple(s.split('=',1)[1].strip() for s in (f, pre, len, hp, a, ts, sn))
7476
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+
7686
sb_md['note'] = note
7787

7888
with closing(wave.open(fname)) as wavfile:
@@ -108,9 +118,15 @@ def sonobat2guano(fname):
108118
gfile['Note'] = sb_md['note'].strip().replace('\r\n', '\\n').replace('\n', '\\n')
109119
if sb_md.get('species', None):
110120
gfile['Species Auto ID'] = sb_md['species']
121+
111122
if 'd500x' in sb_md:
112123
for k, v in sb_md['d500x'].items():
113124
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+
114130
print gfile._as_string()
115131

116132
gfile.write()

0 commit comments

Comments
 (0)