Alternative voice files for en_GB_2

Also, added abilty to read from separate ambe files in a dir
as well as the G4KLX style indexed files
This commit is contained in:
Simon
2021-05-09 14:36:02 +01:00
parent 22068bfbb1
commit 6ba08711e2
45 changed files with 147 additions and 47 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
υ‰Ε'RΙ Ξχ£uwL¥ΉΡεzCp_¦ΔsqKθυ2XΨ^4h‘®µΛ€@σ"Z§}r T—c¶[―@¦©ΧήτΑ=Έψ±½¥¦]φJX+δ†ez&'Ρ9 ζΆkΰ Η^^Δρ-βεzNΔδ^χΗ_RΔ4UΘYϊBΫA &ωk^ΒτbΖΟQ)_>θΞo>"B!ƒ}/Η[ B K(c—,z#s(Fΐϋ79§E>5GΟ,Λe;)ΞqΣ;οbXαω_oβ"`eLEiΗΡ`6]eOΗΰC?@&ODG 8†Wh{0ο<¦3Lc]/§Ζc(Έ4ΑM|σDE§Δ*°Cdz01ψ·IΗ!“'
+3
View File
@@ -0,0 +1,3 @@
ÃtÇ`d˜û³€ÓÑç%exñ†jÇPƒq¶Û¢!pŒØƒå:¢v6=S¾õ‹å'LÍ_–Ø %"ýþÅ€ï¦ac…Ø¥—¢u
fÃÂX¥±‚W+pÒµI¤ £WHdñ£o{ëâ3+SOË£óŽ€`>#šYÍÂŽ€`˜/û&¿~‹Òör5 kœ÷Lyܨ!ütÁ=]Wï!·â…Ø8w\°ZȆãME3úÁ†Ánhf劈ү bXÜM˜{äDÃØ@€GŽ e†÷(ØXJÏ#“…1jº• -9ý[R ',JÅCÇ×6l^/Y40Ú…d.²N|K*ö©]æ«§Eo÷"ñœ†cóoëTÙ@ç} !Qp¶±ˆ¤
b½_˨#¤G‹…7 ûNƒ)o
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
Æ^£?#€¯oĉå!b4«)±´Ç'QQ1uóõ a4ÔgÂÔ¢ch×1Àô a/ÂVD¨çä•g‘å=cÊÇæP𪂃ܿ¦3µ*Sî袒…±q‹ ¤GÖvrmXxÊÅfZV.xjwZmRî\™Óå%æ¶Œ@ËÕ,ó%‚=ˆ6lŒ4Èóö¯Ñ(¿Y€„H¯¦:¬{1€ÆI‡óA¢¬5½þ¶4#IÇ%Òêð"#44Íì<Ç—G
hbÇqÇZ
¡ƒL8n¡à ]Ñ[½üÐy*H
ËOL`\Q¬»ÒZ/ƒoõš“L-Fpí ê㤹
+2
View File
@@ -0,0 +1,2 @@
ä™Å'RË+±†ç6#!urŒ¡•åRd$Vþ´ø¢+Ή…Äsê,"xõ,‡›"®EMŽÚÀߥÅó¢­O¯#¹;¿Ü¢ù•ãQëG•š[r•9$îK.¶8$Øk…]ƒ:=EнE2fç9&çAÒxw(ã%¶_!
mHŸ Çp¨sRi¦N™ØÚáPOزg_i³%á0Z‚ÞP@~íÌÁ{J:9íÂ(MÏ:êkø#
+1
View File
@@ -0,0 +1 @@
çºçqYù °ñÄos_”ïæ˜ÇEf%.²—çpbv@0É÷aÈv{×Mƒãæ¢`=–VsçŒæT«™#NÍ YíÓÊšl Ï¢,ðû-™Ï>qI"°ƒÍž;/bkä°ÜžzmFžÉ ª Ñ ¦¯Zt&`O+ŸE¦²Š·9™½£„u×(ˆÛH¶x›õu›S÷Yây·×\r½J¢Å[˜—“"thºU€c~ÔdaÔÓašnÒ<&ÀJ‘χòðI+h;düÛ³àX+iK@¸žÀKhOØ-0Þ°8*¥˜@(zÂkO€ ÑÕ·fO³'ÕýÕV qH¶r;œ«Ø†½¡ C"HtC
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
lÝ…d5™yVòvåd`aøÈ·×©åg`4\­Ñå‚riÄGsÑç€&)µ"gíæƒs'^“­þò†1NIïÑí©Åï–ÑqÊK7›µ³Ýs¹}õwµ$…|"¤Æ2œ9cXe±ðˆÏ
Binary file not shown.
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
ÀƒKuaãþõ¡SJçûÏÔSr'M¡–Ù‚A3xŸŠÑ÷Cú}á
£ä*€7tMSœß䦟£hÍü†–÷Ù“›h¥„˜k±è=áQ²vWÏþgÝ9¾ÄëÈgû7ê^ÔÁè­î€%ÉQ…GY.wf˜e¢(ÞÊ6éQAwxngRêÑ£¦×åÊQgÁiNnÿcÆC0»^áoÇ} -O .H´1ý—ùM)©´ª{²&,#y±pãk  =klO‡[ô§„HeÇnaȮ§YhìŸ?3ái>£8 D¦ÿ³ å`¸u[h÷
öG;Àãº
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
ΤΈε%0M‹;ΐυΆpaX΄G3‘‡ΗGfc™ΓΕΆD?†RcΤ‚4b]Ρ4c‚¤η2 3VCάµιΆ%2mΝνΧ¶¤Ξ»X5έβγβ1δλe®³lλΓ4οdκ9Z2…‘zBΏ*LΦ@ƒΞ›f£.®]ι4ϊU›µρp\z=H M-(™/Ψ)¦vM
Ο/3£mΉo¶'LΤZβ8Χ°ή>{ήu΅άσ`Ε ο“·–βΩ“:Υ. ‚“¤ΐkκ yF)γ {η£(T#Mμ§π>igGΰΚ*5KΛQfh#/½$΅w0 ²οwΖ)5+pχμA?θ¶³LΰpC™“y‹ρ/¦Tf·BsΖΆ7g a3Ίηε6@mΨ
Binary file not shown.
Binary file not shown.
+6
View File
@@ -0,0 +1,6 @@
•KæP°w¤ZäA#H‚ÂC@l#ÇIZƒÂCm°_{‚â åïdÄDfi ®7£` ³Ù݆¼¡lYÝt„q;²ó×wèÑ…'GØNÏc߇B'Í­üÉ•¡ÁB!ØFk3·‚¡B,säõMl%8X|Œak~v.K“åŠfv^ ³_!/,R@O‡%—b>t@m
íŠÁg^q_ÈÛ /(#EÇ”g†ÿ(tF,Ô¬÷i–àØˆFû-
ÂâÊ+|e0Ä”z;;¢@&žeíÓ#\Ôp¶9˜VzXÏ
Ñv“>üw2´ÔåÐPÅACâ
ˆP?¯¤#4(-DïöçSm3.UÔþ
µYjìÌ
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
ÿǃVe9Àÿœ·Ä1‹ÖÌÖqR çÿ“„ç!d@A®yɨB}׉€6€|\šXq#ymý´ø 4
ü‹Ã¼´§Q9—.(jÈѹzÝ+²?Ä•¬ÏÜ<@{Ññë®jM#6¦ÞO«¶
3Á/§f›EúöM”Ã1ï%œº”þ%gØRœ¾ÁS­#cÃö#A4‰`}ÀpwM}éY¨ß&d!)]4-
;NEȉ;½;„oâFP£CÀ˜ÌМû£Ô§¢oƒoES€‚³z‰,O7O¥JŽ(Æ)e˜ÙS^˜/ÖKï­£®¤E§>Y|k;öS~5}$§Žk²}-DÙ8Ëö±Ln#z¼G«
Binary file not shown.
+2 -2
View File
@@ -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)
+32
View File
@@ -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',
+86 -45
View File
@@ -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'))