Last active
November 10, 2017 05:48
-
-
Save max-power/e0934fd70673ff900c62d8eb40eb68a4 to your computer and use it in GitHub Desktop.
Phonetic Spelling: NATO, LAPD and lots more
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Gem::Specification.new do |s| | |
s.name = 'phonetic' | |
s.version = '0.0.1' | |
s.platform = Gem::Platform::RUBY | |
s.author = 'Kevin Melchert' | |
s.email = '[email protected]' | |
s.summary = 'Papa - Hotel - Oscar - November - Echo - Tango - India - Charlie - Sierra - Papa - Echo - Lima - Lima - India - November - Golf' | |
s.description = 'Phonetic Spelling: NATO, LAPD and lots more' | |
s.files = ['phonetic.rb'] | |
s.require_path = '.' | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Phonetic | |
module Alphabet | |
# https://de.wikipedia.org/wiki/Buchstabiertafel | |
# https://en.wikipedia.org/wiki/Spelling_alphabet | |
NATO = {"a"=>"Alfa", "b"=>"Bravo", "c"=>"Charlie", "d"=>"Delta", "e"=>"Echo", "f"=>"Foxtrot", "g"=>"Golf", "h"=>"Hotel", "i"=>"India", "j"=>"Juliett", "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"} | |
USFIN = {"a"=>"Adam", "b"=>"Bob", "c"=>"Carol", "d"=>"David", "e"=>"Eddie", "f"=>"Frank", "g"=>"George", "h"=>"Harry", "i"=>"Ike", "j"=>"Jim", "k"=>"Kenny", "l"=>"Larry", "m"=>"Mary", "n"=>"Nancy", "o"=>"Oliver", "p"=>"Peter", "q"=>"Quincy", "r"=>"Roger", "s"=>"Sam", "t"=>"Thomas", "u"=>"Uncle", "v"=>"Vincent", "w"=>"William", "x"=>"Xavier", "y"=>"Yogi", "z"=>"Zachary"} | |
LAPD = {"a"=>"Adam", "b"=>"Boy", "c"=>"Charles", "d"=>"David", "e"=>"Edward", "f"=>"Frank", "g"=>"George", "h"=>"Henry", "i"=>"Ida", "j"=>"John", "k"=>"King", "l"=>"Lincoln", "m"=>"Mary", "n"=>"Nora", "o"=>"Ocean", "p"=>"Paul", "q"=>"Queen", "r"=>"Robert", "s"=>"Sam", "t"=>"Tom", "u"=>"Union", "v"=>"Victor", "w"=>"William", "x"=>"X-ray", "y"=>"Young", "z"=>"Zebra"} | |
CS = {"a"=>"Adam", "b"=>"Božena", "c"=>"Cyril", "d"=>"David", "e"=>"Emil", "f"=>"František", "g"=>"Gustav", "h"=>"Helena", "i"=>"Ivan", "j"=>"Josef", "k"=>"Karel", "l"=>"Ludvik", "m"=>"Marie", "n"=>"Norbert", "o"=>"Otakar", "p"=>"Petr", "q"=>"Quido", "r"=>"Rudolf", "s"=>"Svatopluk", "t"=>"Tomáš", "u"=>"Urban", "v"=>"Václav", "w"=>"Dvojité V", "x"=>"Xaver", "y"=>"Ypsilon", "z"=>"Zuzana"} | |
DE = {"a"=>"Anton", "b"=>"Berta", "c"=>"Cäsar", "d"=>"Dora", "e"=>"Emil", "f"=>"Friedrich", "g"=>"Gustav", "h"=>"Heinrich", "i"=>"Ida", "j"=>"Julius", "k"=>"Kaufmann", "l"=>"Ludwig", "m"=>"Martha", "n"=>"Nordpol", "o"=>"Otto", "p"=>"Paula", "q"=>"Quelle", "r"=>"Richard", "s"=>"Samuel", "t"=>"Theodor", "u"=>"Ulrich", "v"=>"Viktor", "w"=>"Wilhelm", "x"=>"Xanthippe", "y"=>"Ypsilon", "z"=>"Zacharias", "ä"=>"Ärger", "ö"=>"Ökonom", "ü"=>"Übermut", "ß"=>"Eszett"} | |
DE_AT = {"a"=>"Anton", "b"=>"Berta", "c"=>"Cäsar", "d"=>"Dora", "e"=>"Emil", "f"=>"Friedrich", "g"=>"Gustav", "h"=>"Heinrich", "i"=>"Ida", "j"=>"Julius", "k"=>"Konrad", "l"=>"Ludwig", "m"=>"Martha", "n"=>"Nordpol", "o"=>"Otto", "p"=>"Paula", "q"=>"Quelle", "r"=>"Richard", "s"=>"Siegfried", "t"=>"Theodor", "u"=>"Ulrich", "v"=>"Viktor", "w"=>"Wilhelm", "x"=>"Xaver", "y"=>"Ypsilon", "z"=>"Zürich", "ä"=>"Ärger", "ö"=>"Österreich", "ü"=>"Übel", "ß"=>"Eszett" } | |
DE_CH = {"a"=>"Anton", "b"=>"Berta", "c"=>"Cäsar", "d"=>"Daniel", "e"=>"Emil", "f"=>"Friedrich", "g"=>"Gustav", "h"=>"Heinrich", "i"=>"Ida", "j"=>"Jakob", "k"=>"Kaiser", "l"=>"Leopold", "m"=>"Marie", "n"=>"Niklaus", "o"=>"Otto", "p"=>"Peter", "q"=>"Quasi", "r"=>"Rosa", "s"=>"Sophie", "t"=>"Theodor", "u"=>"Ulrich", "v"=>"Viktor", "w"=>"Wilhelm", "x"=>"Xaver", "y"=>"Yverdon", "z"=>"Zürich", "ä"=>"Äsch", "ö"=>"Örlikon", "ü"=>"Übermut", "ß"=>"Eszett" } | |
DK = {"a"=>"Anna", "å"=>"Åse", "æ"=>"Ægir", "b"=>"Bernhard", "c"=>"Cecilie", "d"=>"David", "e"=>"Erik", "f"=>"Frederik", "g"=>"Georg", "h"=>"Hans", "i"=>"Ida", "j"=>"Johan", "k"=>"Karen", "l"=>"Ludvig", "m"=>"Mari", "n"=>"Nikolaj", "o"=>"Odin", "ø"=>"Øresund", "p"=>"Peter", "q"=>"Quintus", "r"=>"Rasmus", "s"=>"Søren", "t"=>"Theodor", "u"=>"Ulla", "v"=>"Viggo", "w"=>"William", "x"=>"Xerxes", "y"=>"Yrsa", "z"=>"Zackarias"} | |
EL = {"α"=>"αστήρ", "β"=>"Βύρων", "γ"=>"γαλή", "δ"=>"δόξα", "ε"=>"Ερμής", "ζ"=>"Ζεύς", "η"=>"Ηρώ", "θ"=>"θεά", "ι"=>"ίσκιος", "κ"=>"κενόν", "λ"=>"λάμα", "μ"=>"μέλι", "ν"=>"ναός", "ξ"=>"Ξέρξης", "ο"=>"οσμή", "π"=>"Πέτρος", "ρ"=>"ρήγας", "σ"=>"σοφός", "τ"=>"τίγρης", "υ"=>"ύμνος", "φ"=>"Φωφώ", "χ"=>"χαρά", "ψ"=>"ψυχή", "ω"=>"ωμέγα"} | |
ES = {"a"=>"Antonio", "b"=>"Burgos", "c"=>"Carmen", "d"=>"Dolores", "e"=>"Enrique", "f"=>"Francia", "g"=>"Granada", "h"=>"Historia", "i"=>"Inés", "j"=>"José", "k"=>"Kilo", "l"=>"Lorenzo", "m"=>"Madrid", "n"=>"Navarra", "ñ"=>"Ñoño", "o"=>"Oviedo", "p"=>"París", "q"=>"Querido", "r"=>"Ramón", "s"=>"Sábado", "t"=>"Toledo", "u"=>"Ulises", "v"=>"Valencia", "w"=>"Washington", "x"=>"Xilófono", "y"=>"Yegua", "z"=>"Zaragoza"} | |
FI = {"a"=>"Aarne", "ä"=>"Äiti", "å"=>"Åke", "b"=>"Bertta", "c"=>"Celsius", "d"=>"Daavid", "e"=>"Eemeli", "f"=>"Faarao", "g"=>"Gideon", "h"=>"Heikki", "i"=>"Iivari", "j"=>"Jussi", "k"=>"Kalle", "l"=>"Lauri", "m"=>"Matti", "n"=>"Niilo", "o"=>"Otto", "ö"=>"Öljy", "p"=>"Paavo", "r"=>"Risto", "s"=>"Sakari", "t"=>"Tyyne", "u"=>"Urho", "v"=>"Vihtori", "w"=>"Wiski", "x"=>"Äksä", "y"=>"Yrjö", "z"=>"Tseta"} | |
FR = {"a"=>"Anatole", "b"=>"Berthe", "c"=>"Célestin", "d"=>"Désiré", "e"=>"Eugène", "f"=>"François", "g"=>"Gaston", "h"=>"Henri", "i"=>"Irma", "j"=>"Joseph", "k"=>"Kléber", "l"=>"Louis", "m"=>"Marcel", "n"=>"Nicolas", "o"=>"Oscar", "p"=>"Pierre", "q"=>"Quintal", "r"=>"Raoul", "s"=>"Suzanne", "t"=>"Thérèse", "u"=>"Ursule", "v"=>"Victor", "w"=>"William", "x"=>"Xavier", "y"=>"Yvonne", "z"=>"Zoé"} | |
IT = {"a"=>"Ancona", "b"=>"Bologna", "c"=>"Como", "d"=>"Domodossola", "e"=>"Empoli", "f"=>"Firenze", "g"=>"Genova", "h"=>"Hotel", "i"=>"Imola", "j"=>"Jolly", "k"=>"Kappa", "l"=>"Livorno", "m"=>"Milano", "n"=>"Napoli", "o"=>"Otranto", "p"=>"Padova", "q"=>"Quadro", "r"=>"Roma", "s"=>"Savona", "t"=>"Torino", "u"=>"Udine", "v"=>"Venezia", "w"=>"Washington", "x"=>"Xeres", "y"=>"York", "z"=>"Zara"} | |
NL = {"a"=>"Anna", "b"=>"Bernard", "c"=>"Cornelis", "d"=>"Dirk", "e"=>"Eduard", "f"=>"Ferdinand", "g"=>"Gerard", "h"=>"Hendrik", "i"=>"Izaak", "j"=>"Julius", "k"=>"Karel", "l"=>"Lodewijk", "m"=>"Maria", "n"=>"Nico", "o"=>"Otto", "p"=>"Pieter", "q"=>"Quotiënt", "r"=>"Richard", "s"=>"Simon", "t"=>"Theodor", "u"=>"Utrecht", "v"=>"Victor", "w"=>"Willem", "x"=>"Xanthippe", "y"=>"Ypsilon", "z"=>"Zaandam"} | |
NO = {"a"=>"Anna", "å"=>"Åse", "æ"=>"Ærlig", "b"=>"Bernhard", "c"=>"Caesar", "d"=>"David", "e"=>"Edith", "f"=>"Fredrik", "g"=>"Gustav", "h"=>"Harald", "i"=>"Ivar", "j"=>"Johan", "k"=>"Karin", "l"=>"Ludvig", "m"=>"Martin", "n"=>"Nils", "o"=>"Olivia", "ø"=>"Østen", "p"=>"Petter", "q"=>"Quintus", "r"=>"Rikard", "s"=>"Sigrid", "t"=>"Teodor", "u"=>"Ulrik", "v" => "Enkelt-V", "w"=> "Dobbelt-W", "x"=>"Xerxes", "y"=>"Yngling", "z"=>"Zakarias"} | |
PT_PT = {"a"=>"Aveiro", "b"=>"Braga", "c"=>"Coimbra", "d"=>"Dafundo", "é"=>"Évora", "f"=>"Faro", "g"=>"Guarda", "h"=>"Horta", "i"=>"Itália", "j"=>"José", "k"=>"Kodak", "l"=>"Lisboa", "m"=>"Maria", "n"=>"Nazaré", "o"=>"Ovar", "p"=>"Porto", "q"=>"Queluz", "r"=>"Rossio", "s"=>"Setúbal", "t"=>"Tavira", "u"=>"Unidade", "v"=>"Vidago", "w"=>"Waldemar", "x"=>"Xavier", "y"=>"York", "z"=>"Zulmira"} | |
PT_BR = {"a"=>"Amor", "b"=>"Bandeira", "c"=>"Cobra", "d"=>"Dado", "e"=>"Estrela", "f"=>"Feira", "g"=>"Goiaba", "h"=>"Hotel", "í"=>"Índio", "j"=>"José", "k"=>"Kiwi", "l"=>"Lua", "m"=>"Maria", "n"=>"Navio", "o"=>"Ouro", "p"=>"Pipa", "q"=>"Quilombo", "r"=>"Raiz", "s"=>"Saci", "t"=>"Tatu", "u"=>"Uva", "v"=>"Vitória", "w"=>"Wilson", "x"=>"Xadrez", "y"=>"Yolanda", "z"=>"Zebra"} | |
RO = {"a"=>"Ana", "b"=>"Barbu", "c"=>"Costică", "d"=>"Dumitru", "e"=>"Elena", "f"=>"Florică", "g"=>"Gheorghe", "h"=>"Horia", "i"=>"Ilie", "j"=>"Jean", "k"=>"Kappa", "l"=>"Lazăr", "m"=>"Maria", "n"=>"Nicolae", "o"=>"Olga", "p"=>"Petrică", "q"=>"???", "r"=>"Radu", "s"=>"Sandu", "t"=>"Tudor", "u"=>"Udrea", "v"=>"Vasile", "w"=>"Walter", "x"=>"Xenia", "y"=>"i-grec", "z"=>"Zoe"} | |
RU = {"а"=>"А́нна", "б"=>"Бори́с", "в"=>"Васи́лий", "г"=>"Григо́рий", "д"=>"Дми́трий", "е"=>"Еле́на", "ё"=>"Еле́на", "ж"=>"Же́ня", "з"=>"Зинаи́да", "и"=>"Ива́н", "й"=>"Ива́н кра́ткий", "к"=>"Константи́н", "л"=>"Леони́д", "м"=>"Михаи́л", "н"=>"Никола́й", "о"=>"О́льга", "п"=>"Па́вел", "р"=>"Рома́н", "с"=>"Семён", "т"=>"Татья́на", "у"=>"Улья́на", "ф"=>"Фёдор", "х"=>"Харито́н", "ц"=>"ца́пля", "ч"=>"челове́к", "ш"=>"Шу́ра", "щ"=>"щу́ка", "ъ"=>"твёрдый знак", "ы"=>"е́ры", "ь"=>"мя́гкий знак", "э"=>"э́хо", "ю"=>"Ю́рий", "я"=>"Я́ков"} | |
SE = {"a"=>"Adam", "ä"=>"Ärlig", "å"=>"Åke", "b"=>"Bertil", "c"=>"Caesar", "d"=>"David", "e"=>"Erik", "f"=>"Filip", "g"=>"Gustav", "h"=>"Helge", "i"=>"Ivar", "j"=>"Johan", "k"=>"Kalle", "l"=>"Ludvig", "m"=>"Martin", "n"=>"Niklas", "o"=>"Olof", "ö"=>"Östen", "p"=>"Petter", "q"=>"Quintus", "r"=>"Rudolf", "s"=>"Sigurd", "t"=>"Tore", "u"=>"Urban", "ü"=>"Übel", "v"=>"Viktor", "w"=>"Wilhelm", "x"=>"Xerxes", "y"=>"Yngve", "z"=>"Zäta"} | |
SL = {"a"=>"Ankaran", "b"=>"Bled", "c"=>"Celje", "č"=>"Čatež", "d"=>"Drava", "e"=>"Evropa", "f"=>"Fala", "g"=>"Gorica", "h"=>"Hrastnik", "i"=>"Izola", "j"=>"Jadran", "k"=>"Kamnik", "l"=>"Ljubljana", "m"=>"Maribor", "n"=>"Nanos", "o"=>"Ormož", "p"=>"Piran", "q"=>"Queen", "r"=>"Ravne", "s"=>"Soča", "š"=>"Šmarje", "t"=>"Triglav", "u"=>"Unec", "v"=>"Velenje", "w"=>"Dvojni v", "x"=>"Iks", "y"=>"Ipsilon", "z"=>"Zalog", "ž"=>"Žalec"} | |
TR = {"a"=>"Adana", "b"=>"Bolu", "c"=>"Ceyhan", "ç"=>"Çanakkale", "d"=>"Denizli", "e"=>"Edirne", "f"=>"Fatsa", "g"=>"Giresun", "ğ"=>"Yumuşak G", "h"=>"Hatay", "i"=>"Isparta", "i̇"=>"İzmir", "j"=>"Jandarma", "k"=>"Kars", "l"=>"Lüleburgaz", "m"=>"Muş", "n"=>"Niğde", "o"=>"Ordu", "ö"=>"Ödemiş", "p"=>"Polatlı", "r"=>"Rize", "s"=>"Sinop", "ş"=>"Şırnak", "t"=>"Tokat", "u"=>"Uşak", "ü"=>"Ünye", "v"=>"Van", "y"=>"Yozgat", "z"=>"Zonguldak"} | |
end | |
class Speller | |
def initialize(alphabet=Alphabet::NATO) | |
@alphabet = alphabet | |
end | |
def spell(message) | |
@alphabet.values_at(*message.downcase.chars).compact | |
end | |
end | |
class Speaker | |
def initialize(voice) | |
@voice = voice | |
end | |
def say(message) | |
%x(say "#{message}" -v #{@voice}) | |
end | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# gem 'phonetic', git: 'git://gist.github.com/e0934fd70673ff900c62d8eb40eb68a4.git' | |
# require 'phonetic' | |
msg = Phonetic::Speller.new.spell('WTF') | |
puts msg.join(' - ') # 'Whiskey - Tango - Foxtrot' | |
msg = Phonetic::Speller.new(Phonetic::Alphabet::DE).spell('ABC') | |
puts msg.join(', ') # 'Anton, Berta, Cäsar' | |
# Make your own Alphabet | |
binary_alphabet = ('A'..'Z').map { |a| [a.downcase, a.ord.to_s(2)] }.to_h | |
Phonetic::Speller.new(binary_alphabet).spell('ABC').join # "100000110000101000011" | |
# Say it! (macOS only) | |
Phonetic::Speaker.new('Anna').say(msg) | |
dutch_speakers = %w(Xander Ellen).map { |v| Phonetic::Speaker.new(v) }.cycle | |
Phonetic::Alphabet::NL.each_value { |word| dutch_speakers.next.say(word) } | |
spanish_speakers = %w(Diego Jorge Juan Monica Paulina).map { |v| Phonetic::Speaker.new(v) } | |
Phonetic::Alphabet::ES.each_value { |word| spanish_speakers.sample.say(word) } | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Name | Locale | Introduction Sentence | |
---|---|---|---|
Alex | en_US | Most people recognize me by my voice. | |
Alice | it_IT | Salve, mi chiamo Alice e sono una voce italiana. | |
Alva | sv_SE | Hej, jag heter Alva. Jag är en svensk röst. | |
Amelie | fr_CA | Bonjour, je m’appelle Amelie. Je suis une voix canadienne. | |
Anna | de_DE | Hallo, ich heiße Anna und ich bin eine deutsche Stimme. | |
Carmit | he_IL | שלום. קוראים לי כרמית, ואני קול בשפה העברית. | |
Damayanti | id_ID | Halo, nama saya Damayanti. Saya berbahasa Indonesia. | |
Daniel | en_GB | Hello, my name is Daniel. I am a British-English voice. | |
Diego | es_AR | Hola, me llamo Diego y soy una voz española. | |
Ellen | nl_BE | Hallo, mijn naam is Ellen. Ik ben een Belgische stem. | |
Fiona | en-scotland | Hello, my name is Fiona. I am a Scottish-English voice. | |
Fred | en_US | I sure like being inside this fancy computer | |
Ioana | ro_RO | Bună, mă cheamă Ioana . Sunt o voce românească. | |
Joana | pt_PT | Olá, chamo-me Joana e dou voz ao português falado em Portugal. | |
Jorge | es_ES | Hola, me llamo Jorge y soy una voz española. | |
Juan | es_MX | Hola, me llamo Juan y soy una voz mexicana. | |
Kanya | th_TH | สวัสดีค่ะ ดิฉันชื่อKanya | |
Karen | en_AU | Hello, my name is Karen. I am an Australian-English voice. | |
Kyoko | ja_JP | こんにちは、私の名前はKyokoです。日本語の音声をお届けします。 | |
Laura | sk_SK | Ahoj. Volám sa Laura . Som hlas v slovenskom jazyku. | |
Lekha | hi_IN | नमस्कार, मेरा नाम लेखा है.Lekha मै हिंदी मे बोलने वाली आवाज़ हूँ. | |
Luca | it_IT | Salve, mi chiamo Luca e sono una voce italiana. | |
Luciana | pt_BR | Olá, o meu nome é Luciana e a minha voz corresponde ao português que é] falado no Brasil | |
Maged | ar_SA | مرحبًا اسمي Maged. أنا عربي من السعودية. | |
Mariska | hu_HU | Üdvözlöm! Mariska vagyok. Én vagyok a magyar hang. | |
Mei-Jia | zh_TW | 您好,我叫美佳。我說國語。 | |
Melina | el_GR | Γεια σας, ονομάζομαι Melina. Είμαι μια ελληνική φωνή. | |
Milena | ru_RU | Здравствуйте, меня зовут Milena. Я – русский голос системы. | |
Moira | en_IE | Hello, my name is Moira. I am an Irish-English voice. | |
Monica | es_ES | Hola, me llamo Monica y soy una voz española. | |
Nora | nb_NO | Hei, jeg heter Nora. Jeg er en norsk stemme. | |
Paulina | es_MX | Hola, me llamo Paulina y soy una voz mexicana. | |
Samantha | en_US | Hello, my name is Samantha. I am an American-English voice. | |
Sara | da_DK | Hej, jeg hedder Sara. Jeg er en dansk stemme. | |
Satu | fi_FI | Hei, minun nimeni on Satu. Olen suomalainen ääni. | |
Sin-ji | zh_HK | 您好,我叫 Sin-ji。我講廣東話。 | |
Tessa | en_ZA | Hello, my name is Tessa. I am a South African-English voice. | |
Thomas | fr_FR | Bonjour, je m’appelle Thomas. Je suis une voix française. | |
Ting-Ting | zh_CN | 您好,我叫Ting-Ting。我讲中文普通话。 | |
Veena | en_IN | Hello, my name is Veena. I am an Indian-English voice. | |
Victoria | en_US | Isn't it nice to have a computer that will talk to you? | |
Xander | nl_NL | Hallo, mijn naam is Xander. Ik ben een Nederlandse stem. | |
Yelda | tr_TR | Merhaba, benim adım Yelda. Ben Türkçe bir sesim. | |
Yuna | ko_KR | 안녕하세요. 제 이름은 Yuna입니다. 저는 한국어 음성입니다. | |
Yuri | ru_RU | Здравствуйте, меня зовут Yuri. Я – русский голос системы. | |
Zosia | pl_PL | Witaj. Mam na imię Zosia, jestem głosem kobiecym dla języka polskiego. | |
Zuzana | cs_CZ | Dobrý den, jmenuji se Zuzana. Jsem český hlas. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment