diff --git a/Audio/en_GB_2/0.ambe b/Audio/en_GB_2/0.ambe new file mode 100644 index 0000000..6cabf1c Binary files /dev/null and b/Audio/en_GB_2/0.ambe differ diff --git a/Audio/en_GB_2/1.ambe b/Audio/en_GB_2/1.ambe new file mode 100644 index 0000000..665cbd4 Binary files /dev/null and b/Audio/en_GB_2/1.ambe differ diff --git a/Audio/en_GB_2/2.ambe b/Audio/en_GB_2/2.ambe new file mode 100644 index 0000000..883d7f0 Binary files /dev/null and b/Audio/en_GB_2/2.ambe differ diff --git a/Audio/en_GB_2/3.ambe b/Audio/en_GB_2/3.ambe new file mode 100644 index 0000000..13dd30e Binary files /dev/null and b/Audio/en_GB_2/3.ambe differ diff --git a/Audio/en_GB_2/4.ambe b/Audio/en_GB_2/4.ambe new file mode 100644 index 0000000..a6e1f51 --- /dev/null +++ b/Audio/en_GB_2/4.ambe @@ -0,0 +1 @@ +'R uwLzCp_sqK2X؊^4hˀ@"Z}r Tc[@=]JX+䪆ez&'=9 k ^^-zN^_R4UYBA &k^bQ)_>o>"B!}/[ BK(c,z#s(F79E>5G,e;)q;bX_o"`eLEiǏ`6]eOǍC?X@&ODG 8Wh{0<3Lc]/c(4M|DE*Cdz01I!' \ No newline at end of file diff --git a/Audio/en_GB_2/5.ambe b/Audio/en_GB_2/5.ambe new file mode 100644 index 0000000..c5ef25c --- /dev/null +++ b/Audio/en_GB_2/5.ambe @@ -0,0 +1,3 @@ +t`d%exjPqۢ!p؃:v6=S'L_ؠ%"ŀacإu fXW+pҵIWHdo{3+SOˣ`>#YŽ`/&~r5 kLy!üt=]W!8w\ZȆME3nhf劈ү bXM{D@G e(XJ#1j -9[R ',JC6l^/Y40څd.N|K*]櫧Eo"coT@}!Qp +b_˨#G7 N)o +6 Tz!S`) \ No newline at end of file diff --git a/Audio/en_GB_2/6.ambe b/Audio/en_GB_2/6.ambe new file mode 100644 index 0000000..b6e9b7c Binary files /dev/null and b/Audio/en_GB_2/6.ambe differ diff --git a/Audio/en_GB_2/7.ambe b/Audio/en_GB_2/7.ambe new file mode 100644 index 0000000..1795e01 Binary files /dev/null and b/Audio/en_GB_2/7.ambe differ diff --git a/Audio/en_GB_2/8.ambe b/Audio/en_GB_2/8.ambe new file mode 100644 index 0000000..e8ac455 Binary files /dev/null and b/Audio/en_GB_2/8.ambe differ diff --git a/Audio/en_GB_2/9.ambe b/Audio/en_GB_2/9.ambe new file mode 100644 index 0000000..b016224 Binary files /dev/null and b/Audio/en_GB_2/9.ambe differ diff --git a/Audio/en_GB_2/alpha.ambe b/Audio/en_GB_2/alpha.ambe new file mode 100644 index 0000000..a190cb4 Binary files /dev/null and b/Audio/en_GB_2/alpha.ambe differ diff --git a/Audio/en_GB_2/bravo.ambe b/Audio/en_GB_2/bravo.ambe new file mode 100644 index 0000000..695628e Binary files /dev/null and b/Audio/en_GB_2/bravo.ambe differ diff --git a/Audio/en_GB_2/busy.ambe b/Audio/en_GB_2/busy.ambe new file mode 100644 index 0000000..c9bb3a6 Binary files /dev/null and b/Audio/en_GB_2/busy.ambe differ diff --git a/Audio/en_GB_2/charlie.ambe b/Audio/en_GB_2/charlie.ambe new file mode 100644 index 0000000..c2a0df0 --- /dev/null +++ b/Audio/en_GB_2/charlie.ambe @@ -0,0 +1,4 @@ +^?#oĉ!b4)'QQ1ua4gԢch1a/VDg=cP𪂃ܿ3*S袒q cGvrmXxfZV.xjwZmR\%涌@,%=6l4(YH:{1IA54#I%"#44<ǗG +hbqZ +L8n ][y*H +OL`\QZ/oL-Fp L Oe.TI7VS(HEP& \ No newline at end of file diff --git a/Audio/en_GB_2/delta.ambe b/Audio/en_GB_2/delta.ambe new file mode 100644 index 0000000..c138fe1 --- /dev/null +++ b/Audio/en_GB_2/delta.ambe @@ -0,0 +1,2 @@ +'R+6#!urRd$V+Ήs,"x,"EMߥO#;ܢQG[r9$K.8$k]:=EнE2f9&Axw(%_! +mH psRiNPOزg_i%0ZP@~{J:9(M:k# B \q޴& '>ݏ%m_:l@t[ HNDoP]R)u™>zd.DorWSa \ No newline at end of file diff --git a/Audio/en_GB_2/echo.ambe b/Audio/en_GB_2/echo.ambe new file mode 100644 index 0000000..2a353e2 --- /dev/null +++ b/Audio/en_GB_2/echo.ambe @@ -0,0 +1 @@ +qY os_Ef%.pbv@0av{M`=VsT#N͠Yʚl Ϣ,->qI"͞;/bkܞzmF / Zt&`O+E9u(HxuSYy\rJ["thUc~daan<&JχI+h;d۳X+iK@KhO-0ް8*@(zkOշfO'VqHr;؆ C"HtC \ No newline at end of file diff --git a/Audio/en_GB_2/foxtrot.ambe b/Audio/en_GB_2/foxtrot.ambe new file mode 100644 index 0000000..78389d2 Binary files /dev/null and b/Audio/en_GB_2/foxtrot.ambe differ diff --git a/Audio/en_GB_2/freedmr.ambe b/Audio/en_GB_2/freedmr.ambe new file mode 100644 index 0000000..5a8bb0c Binary files /dev/null and b/Audio/en_GB_2/freedmr.ambe differ diff --git a/Audio/en_GB_2/gateway.ambe b/Audio/en_GB_2/gateway.ambe new file mode 100644 index 0000000..509cfbc Binary files /dev/null and b/Audio/en_GB_2/gateway.ambe differ diff --git a/Audio/en_GB_2/golf.ambe b/Audio/en_GB_2/golf.ambe new file mode 100644 index 0000000..71a4773 --- /dev/null +++ b/Audio/en_GB_2/golf.ambe @@ -0,0 +1 @@ +l݅d5yVvd`aȷשg`4\riGs&)"gs'^1NIqK7s}w$|"29cXe .)`6TINolT9 yjar}i/%JKn{!d)=i!7{JHBPͳ jkѦe-}q^ioHI Kבn"vcѶemGׅ-$7mG;&mFSwxX?0<^ ĻB1: \ No newline at end of file diff --git a/Audio/en_GB_2/hotel.ambe b/Audio/en_GB_2/hotel.ambe new file mode 100644 index 0000000..3b8370a Binary files /dev/null and b/Audio/en_GB_2/hotel.ambe differ diff --git a/Audio/en_GB_2/india.ambe b/Audio/en_GB_2/india.ambe new file mode 100644 index 0000000..558cbe7 Binary files /dev/null and b/Audio/en_GB_2/india.ambe differ diff --git a/Audio/en_GB_2/juliet.ambe b/Audio/en_GB_2/juliet.ambe new file mode 100644 index 0000000..fafbfe2 --- /dev/null +++ b/Audio/en_GB_2/juliet.ambe @@ -0,0 +1,3 @@ +KuaSJԁSr'MقA3xC} *7tMS䦟)hٓhk=QvWg9g7^%QGY.wfe(6QAwxngRѣQgiNncC0^o} -O .H1M){&,#ypk J =klO[HenaȮYh?3i>8 D `u[h +G; +M!B:d:ÆԔ{Oh(*症_kW#3}6Z)Ċ'rM \ No newline at end of file diff --git a/Audio/en_GB_2/kilo.ambe b/Audio/en_GB_2/kilo.ambe new file mode 100644 index 0000000..b0f5a0b Binary files /dev/null and b/Audio/en_GB_2/kilo.ambe differ diff --git a/Audio/en_GB_2/lima.ambe b/Audio/en_GB_2/lima.ambe new file mode 100644 index 0000000..ad2f021 Binary files /dev/null and b/Audio/en_GB_2/lima.ambe differ diff --git a/Audio/en_GB_2/linked-to.ambe b/Audio/en_GB_2/linked-to.ambe new file mode 100644 index 0000000..ebc44f6 Binary files /dev/null and b/Audio/en_GB_2/linked-to.ambe differ diff --git a/Audio/en_GB_2/mike.ambe b/Audio/en_GB_2/mike.ambe new file mode 100644 index 0000000..79acda0 Binary files /dev/null and b/Audio/en_GB_2/mike.ambe differ diff --git a/Audio/en_GB_2/not-linked.ambe b/Audio/en_GB_2/not-linked.ambe new file mode 100644 index 0000000..1498169 Binary files /dev/null and b/Audio/en_GB_2/not-linked.ambe differ diff --git a/Audio/en_GB_2/november.ambe b/Audio/en_GB_2/november.ambe new file mode 100644 index 0000000..a8c3df0 Binary files /dev/null and b/Audio/en_GB_2/november.ambe differ diff --git a/Audio/en_GB_2/oscar.ambe b/Audio/en_GB_2/oscar.ambe new file mode 100644 index 0000000..8a97fb8 Binary files /dev/null and b/Audio/en_GB_2/oscar.ambe differ diff --git a/Audio/en_GB_2/papa.ambe b/Audio/en_GB_2/papa.ambe new file mode 100644 index 0000000..9d65cd1 Binary files /dev/null and b/Audio/en_GB_2/papa.ambe differ diff --git a/Audio/en_GB_2/quebec.ambe b/Audio/en_GB_2/quebec.ambe new file mode 100644 index 0000000..93f3546 --- /dev/null +++ b/Audio/en_GB_2/quebec.ambe @@ -0,0 +1,2 @@ +Ը%0M;paXG3GfcŢD?RcԂ4b]4c2 3VCܵ%2m׶ΐX51el4d9Z2zB*L@Λf.]4Up\z=H M-(/)vM +/3mo'LZ8׌>{u܎`Ş" ٓ:. kyF) {(T#M>igG*5KQfh#/$w0 w)5+pA?足LpCy/TfBs7g a36@m \ No newline at end of file diff --git a/Audio/en_GB_2/repeater.ambe b/Audio/en_GB_2/repeater.ambe new file mode 100644 index 0000000..8b2a4a4 Binary files /dev/null and b/Audio/en_GB_2/repeater.ambe differ diff --git a/Audio/en_GB_2/romeo.ambe b/Audio/en_GB_2/romeo.ambe new file mode 100644 index 0000000..f21098f Binary files /dev/null and b/Audio/en_GB_2/romeo.ambe differ diff --git a/Audio/en_GB_2/sierra.ambe b/Audio/en_GB_2/sierra.ambe new file mode 100644 index 0000000..e0e38a3 --- /dev/null +++ b/Audio/en_GB_2/sierra.ambe @@ -0,0 +1,6 @@ +KPwZA#HC@l#IZCm_{ dDfi 7`†lYtq;wх'GNcB'ͭɕB!Fk3B,sMl%8X|ak~v.Kfv^ _!/,R@O%b>t@m g^q_ /(#Eǔg(tF,Ԭi؈F- +ʁ+|e0Ĕz;;@&e#\p9VzX( +v>w2PAC +P?#4(-DSm3.U Yj6 +)&ѱ@ FJ^J&d.h,Y|k;S~5}$k}-D8Ln#zG G19n G0knfH.g GуNA&t \ No newline at end of file diff --git a/Audio/en_GB_2/zulu.ambe b/Audio/en_GB_2/zulu.ambe new file mode 100644 index 0000000..a4805a4 Binary files /dev/null and b/Audio/en_GB_2/zulu.ambe differ diff --git a/bridge_master.py b/bridge_master.py index 519638a..ba95bbe 100755 --- a/bridge_master.py +++ b/bridge_master.py @@ -568,8 +568,8 @@ def ident(): _say.append(words[character]) _say.append(words['silence']) _say.append(words['silence']) - #test - #_say.append(AMBEobj.readSingleFile('44xx.ambe')) + test + #_say.append(AMBEobj.readSingleFile('alpha.ambe')) _all_call = bytes_3(16777215) _source_id= bytes_3(5000) speech = pkt_gen(_source_id, _all_call, bytes_4(16777215), 1, _say) diff --git a/i8n_voice_map.py b/i8n_voice_map.py index f07fd33..281da8a 100644 --- a/i8n_voice_map.py +++ b/i8n_voice_map.py @@ -2,6 +2,38 @@ voiceMap = { 'en_GB': { 'to': '2', }, + + 'en_GB_2': { + 'A': 'alpha', + 'B': 'bravo', + 'C': 'charlie', + 'D': 'delta', + 'E': 'echo', + 'F': 'foxtrot', + 'G': 'golf', + 'H': 'hotel', + 'I': 'india', + 'J': 'juliet', + 'K': 'kilo', + 'L': 'lima', + 'M': 'mike', + 'N': 'november', + 'O': 'oscar', + 'P': 'papa', + 'Q': 'quebec', + 'R': 'romeo', + #'S': 'sierra', + 'T': 'tango', + 'U': 'uniform', + 'V': 'victor', + 'W': 'whiskey', + 'X': 'x-ray', + 'Y': 'yankee', + 'Z': 'zulu', + 'to': 'silence', + 'notlinked': 'not-linked', + 'linkedto': 'linked-to' + }, 'en_US:': { 'to': '2', diff --git a/read_ambe.py b/read_ambe.py index 3d005ca..b79e506 100644 --- a/read_ambe.py +++ b/read_ambe.py @@ -1,5 +1,7 @@ from bitarray import bitarray from itertools import islice +import os +import glob class readAMBE: @@ -17,51 +19,88 @@ class readAMBE: def readfiles(self): _AMBE_LENGTH = 9 indexDict = {} - try: - with open(self.prefix+'.indx') as index: - for line in index: - (voice,start,length) = line.split() - indexDict[voice] = [int(start) * _AMBE_LENGTH ,int(length) * _AMBE_LENGTH] - index.close() - except IOError: - return False - ambeBytearray = {} - _wordBitarray = bitarray(endian='big') - _wordBADict = {} - try: - with open(self.prefix+'.ambe','rb') as ambe: - for _voice in indexDict: - ambe.seek(indexDict[_voice][0]) - _wordBitarray.frombytes(ambe.read(indexDict[_voice][1])) - #108 - _wordBADict[_voice] = [] - pairs = 1 - _lastburst = '' - for _burst in self._make_bursts(_wordBitarray): - #Not sure if we need to pad or not? Seems to make little difference. - if len(_burst) < 108: - pad = (108 - len(_burst)) - for i in range(0,pad,1): - _burst.append(False) - if pairs == 2: - _wordBADict[_voice].append([_lastburst,_burst]) - _lastburst = '' - pairs = 1 - next - else: - pairs = pairs + 1 - _lastburst = _burst - - _wordBitarray.clear() - ambe.close() - except IOError: - return False - _wordBADict['silence'] = ([ - [bitarray('101011000000101010100000010000000000001000000000000000000000010001000000010000000000100000000000100000000000'), - bitarray('001010110000001010101000000100000000000010000000000000000000000100010000000100000000001000000000001000000000')] - ]) - return _wordBADict + if os.path.isdir(self.prefix): + ambeBytearray = {} + _wordBitarray = bitarray(endian='big') + _wordBADict = {} + _glob = self.prefix + "/*.ambe" + for ambe in glob.glob(_glob): + basename = os.path.basename(ambe) + _voice,ext = basename.split('.') + inambe = open(ambe,'rb') + _wordBitarray.frombytes(inambe.read()) + inambe.close() + _wordBADict[_voice] = [] + pairs = 1 + _lastburst = '' + for _burst in self._make_bursts(_wordBitarray): +#Not sure if we need to pad or not? Seems to make little difference. + if len(_burst) < 108: + pad = (108 - len(_burst)) + for i in range(0,pad,1): + _burst.append(False) + if pairs == 2: + _wordBADict[_voice].append([_lastburst,_burst]) + _lastburst = '' + pairs = 1 + next + else: + pairs = pairs + 1 + _lastburst = _burst + + _wordBitarray.clear() + _wordBADict['silence'] = ([ + [bitarray('101011000000101010100000010000000000001000000000000000000000010001000000010000000000100000000000100000000000'), + bitarray('001010110000001010101000000100000000000010000000000000000000000100010000000100000000001000000000001000000000')] + ]) + return _wordBADict + else: + try: + with open(self.prefix+'.indx') as index: + for line in index: + (voice,start,length) = line.split() + indexDict[voice] = [int(start) * _AMBE_LENGTH ,int(length) * _AMBE_LENGTH] + index.close() + except IOError: + return False + + ambeBytearray = {} + _wordBitarray = bitarray(endian='big') + _wordBADict = {} + try: + with open(self.prefix+'.ambe','rb') as ambe: + for _voice in indexDict: + ambe.seek(indexDict[_voice][0]) + _wordBitarray.frombytes(ambe.read(indexDict[_voice][1])) + #108 + _wordBADict[_voice] = [] + pairs = 1 + _lastburst = '' + for _burst in self._make_bursts(_wordBitarray): + #Not sure if we need to pad or not? Seems to make little difference. + if len(_burst) < 108: + pad = (108 - len(_burst)) + for i in range(0,pad,1): + _burst.append(False) + if pairs == 2: + _wordBADict[_voice].append([_lastburst,_burst]) + _lastburst = '' + pairs = 1 + next + else: + pairs = pairs + 1 + _lastburst = _burst + + _wordBitarray.clear() + ambe.close() + except IOError: + return False + _wordBADict['silence'] = ([ + [bitarray('101011000000101010100000010000000000001000000000000000000000010001000000010000000000100000000000100000000000'), + bitarray('001010110000001010101000000100000000000010000000000000000000000100010000000100000000001000000000001000000000')] + ]) + return _wordBADict #Read a single ambe file from the audio directory def readSingleFile(self,filename): @@ -100,7 +139,9 @@ class readAMBE: if __name__ == '__main__': - test = readAMBE('en_GB','./Audio/') + #test = readAMBE('en_GB','./Audio/') + #print(test.readfiles()) + test = readAMBE('en_GB_2','./Audio/') print(test.readfiles()) print(test.readSingleFile('44xx.ambe'))