diff --git a/README.md b/README.md index 8c01a93..f287959 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ var morsify = require('morsify'); var encoded = morsify.encode('SOS'); // .../---/... var decoded = morsify.decode('.../---/...'); // S O S var characters = morsify.characters(); // {'1': {'A': '.-', ...}, ..., '11': {'ㄱ': '.-..', ...}} -var audio = morsify.audio('SOS'), oscillator = audio.oscillator; // OscillatorNode +var audio = morsify.audio('SOS'); audio.play(); // play audio audio.stop(); // stop audio ``` @@ -44,6 +44,7 @@ Or alternatively, you can also use the library directly with including the sourc var audio = morsify.audio('SOS'); var oscillator = audio.oscillator; // OscillatorNode var context = audio.context; // AudioContext + var gainNode = audio.gainNode; // GainNode audio.play(); // play audio audio.stop(); // stop audio @@ -85,11 +86,12 @@ var arabicAudio = morsify.audio('البُراق‎‎', { // generates the morse frequency: 500, // value in hertz onended: function () { // event that fires when the tone has stopped playing console.log('ended'); - }, + } } }); var oscillator = arabicAudio.oscillator; // OscillatorNode var context = arabicAudio.context; // AudioContext; +var gainNode = audio.gainNode; // GainNode arabicAudio.play(); // will start playing morse audio arabicAudio.stop(); // will stop playing morse audio ``` diff --git a/dist/morsify.min.js b/dist/morsify.min.js index 9eff492..3efffa0 100644 --- a/dist/morsify.min.js +++ b/dist/morsify.min.js @@ -1 +1 @@ -!function(e,n,t){"object"==typeof exports?module.exports=t():"function"==typeof define&&define.amd?define(t):n.morsify=t()}(0,this,function(){var e={1:{A:"01",B:"1000",C:"1010",D:"100",E:"0",F:"0010",G:"110",H:"0000",I:"00",J:"0111",K:"101",L:"0100",M:"11",N:"10",O:"111",P:"0110",Q:"1101",R:"010",S:"000",T:"1",U:"001",V:"0001",W:"011",X:"1001",Y:"1011",Z:"1100"},2:{0:"11111",1:"01111",2:"00111",3:"00011",4:"00001",5:"00000",6:"10000",7:"11000",8:"11100",9:"11110"},3:{".":"010101",",":"110011","?":"001100","'":"011110","!":"101011","/":"10010","(":"10110",")":"101101","&":"01000",":":"111000",";":"101010","=":"10001","+":"01010","-":"100001",_:"001101",'"':"010010",$:"0001001","@":"011010","¿":"00101","¡":"110001"},4:{"Ã":"01101","Á":"01101","Å":"01101","À":"01101","Â":"01101","Ä":"0101","Ą":"0101","Æ":"0101","Ç":"10100","Ć":"10100","Ĉ":"10100","Č":"110","Đ":"00100","Ð":"00110","È":"01001","Ë":"00100","Ę":"00100","É":"00100","Ê":"10010","Ğ":"11010","Ĝ":"11010","Ĥ":"1111","İ":"01001","Ï":"10011","Ì":"01110","Ĵ":"01110","Ł":"01001","Ń":"11011","Ñ":"11011","Ó":"1110","Ò":"1110","Ö":"1110","Ô":"1110","Ø":"1110","Ś":"0001000","Ş":"01100","Ș":"1111","Š":"1111","Ŝ":"00010","ß":"000000","Þ":"01100","Ü":"0011","Ù":"0011","Ŭ":"0011","Ž":"11001","Ź":"110010","Ż":"11001"},5:{"А":"01","Б":"1000","В":"011","Г":"110","Д":"100","Е":"0","Ж":"0001","З":"1100","И":"00","Й":"0111","К":"101","Л":"0100","М":"11","Н":"10","О":"111","П":"0110","Р":"010","С":"000","Т":"1","У":"001","Ф":"0010","Х":"0000","Ц":"1010","Ч":"1110","Ш":"1111","Щ":"1101","Ъ":"11011","Ы":"1011","Ь":"1001","Э":"00100","Ю":"0011","Я":"0101"},6:{"Α":"01","Β":"1000","Γ":"110","Δ":"100","Ε":"0","Ζ":"1100","Η":"0000","Θ":"1010","Ι":"00","Κ":"101","Λ":"0100","Μ":"11","Ν":"10","Ξ":"1001","Ο":"111","Π":"0110","Ρ":"010","Σ":"000","Τ":"1","Υ":"1011","Φ":"0010","Χ":"1111","Ψ":"1101","Ω":"011"},7:{"א":"01","ב":"1000","ג":"110","ד":"100","ה":"111","ו":"0","ז":"1100","ח":"0000","ט":"001","י":"00","כ":"101","ל":"0100","מ":"11","נ":"10","ס":"1010","ע":"0111","פ":"0110","צ":"011","ק":"1101","ר":"010","ש":"000","ת":"1"},8:{"ا":"01","ب":"1000","ت":"1","ث":"1010","ج":"0111","ح":"0000","خ":"111","د":"100","ذ":"1100","ر":"010","ز":"1110","س":"000","ش":"1111","ص":"1001","ض":"0001","ط":"001","ظ":"1011","ع":"0101","غ":"110","ف":"0010","ق":"1101","ك":"101","ل":"0100","م":"11","ن":"10","ه":"00100","و":"011","ي":"00","ﺀ":"0"},9:{"ا":"01","ب":"1000","پ":"0110","ت":"1","ث":"1010","ج":"0111","چ":"1110","ح":"0000","خ":"1001","د":"100","ذ":"0001","ر":"010","ز":"1100","ژ":"110","س":"000","ش":"1111","ص":"0101","ض":"00100","ط":"001","ظ":"1011","ع":"111","غ":"0011","ف":"0010","ق":"111000","ک":"101","گ":"1101","ل":"0100","م":"11","ن":"10","و":"011","ه":"0","ی":"00"},10:{"ア":"11011","カ":"0100","サ":"10101","タ":"10","ナ":"010","ハ":"1000","マ":"1001","ヤ":"011","ラ":"000","ワ":"101","イ":"01","キ":"10100","シ":"11010","チ":"0010","ニ":"1010","ヒ":"11001","ミ":"00101","リ":"110","ヰ":"01001","ウ":"001","ク":"0001","ス":"11101","ツ":"0110","ヌ":"0000","フ":"1100","ム":"1","ユ":"10011","ル":"10110","ン":"01010","エ":"01000","ケ":"1011","セ":"01110","テ":"01011","ネ":"1101","ヘ":"0","メ":"10001","レ":"111","ヱ":"01100","、":"010101","オ":"10111","コ":"1111","ソ":"1110","ト":"00100","ノ":"0011","ホ":"100","モ":"10010","ヨ":"11","ロ":"0101","ヲ":"0111","。":"010100"},11:{"ㄱ":"0100","ㄴ":"0010","ㄷ":"1000","ㄹ":"0001","ㅁ":"11","ㅂ":"011","ㅅ":"110","ㅇ":"101","ㅈ":"0110","ㅊ":"1010","ㅋ":"1001","ㅌ":"1100","ㅍ":"111","ㅎ":"0111","ㅏ":"0","ㅑ":"00","ㅓ":"1","ㅕ":"000","ㅗ":"01","ㅛ":"10","ㅜ":"0000","ㅠ":"010","ㅡ":"100","ㅣ":"001"},12:{"ก":"110","ข":"1010","ค":"101","ง":"10110","จ":"10010","ฉ":"1111","ช":"1001","ซ":"1100","ญ":"0111","ด":"100","ต":"1","ถ":"10100","ท":"10011","น":"10","บ":"1000","ป":"0110","ผ":"1101","ฝ":"10101","พ":"01100","ฟ":"0010","ม":"11","ย":"1011","ร":"010","ล":"0100","ว":"011","ส":"000","ห":"0000","อ":"10001","ฮ":"11011","ฤ":"01011","ะ":"01000","า":"01","ิ":"00100","ี":"00","ึ":"00110","ื":"0011","ุ":"00101","ู":"1110","เ":"0","แ":"0101","ไ":"01001","โ":"111","ำ":"00010","่":"001","้":"0001","๊":"11000","๋":"01010","ั":"01101","็":"11100","์":"11001","ๆ":"10111","ฯ":"11010"}},n=function(n,t){var o=i(n),r={};for(var a in e){r[a]={};for(var c in e[a])r[a][c]=e[a][c].replace(/0/g,o.dot).replace(/1/g,o.dash)}return!0!==t&&delete r[0],r},t=function(e){var t={},o=n(e,!0);for(var r in o)for(var i in o[r])void 0===t[o[r][i]]&&(t[o[r][i]]=i);return t},o=function(e){for(var n=[],t=0;t (https://burakozdemir.co.uk)", + "author": "Burak Özdemir (https://ozdemirburak.com)", "repository": { "type": "git", "url": "https://github.com/ozdemirburak/morsify.git" @@ -31,6 +31,7 @@ "gulp-uglify": "^3.0.0", "istanbul": "^0.4.5", "jshint": "^2.9.0", + "lodash": "^4.17.10", "mocha": "^3.4.0", "pump": "^1.0.2" }, diff --git a/src/morsify.js b/src/morsify.js index f3d85b6..3c20512 100644 --- a/src/morsify.js +++ b/src/morsify.js @@ -99,11 +99,7 @@ 'ื': '0011', 'ุ': '00101', 'ู': '1110', 'เ': '0', 'แ': '0101', 'ไ': '01001', 'โ': '111', 'ำ': '00010', '่': '001', '้': '0001', '๊': '11000', '๋':'01010', 'ั': '01101', '็': '11100', '์': '11001', - 'ๆ': '10111', 'ฯ': '11010', - // 'ฃ': '1010', => duplicated with ข | 'ฅ': '101', 'ฆ': '101', => duplicated with ค | 'ฎ': '100', => duplicated with ด - // 'ฏ': '1', => duplicated with ต | 'ฐ': '10100', => duplicated with ถ | 'ธ': '10011', 'ฑ': '10011', 'ฒ': '10011', => duplicated with ท - // 'ณ': '10', => duplicated with ณ | 'ภ': '01100', => duplicated with พ | 'ฬ': '0100', => duplicated with ล - // 'ษ': '000', 'ศ': '000', => duplicated with ส | 'ฤๅ': '01011', => duplicated with ฤ | 'ใ': '01001', => duplicated with ไ | 'ฯลฯ': '11101' => conflicts with ฯ + 'ๆ': '10111', 'ฯ': '11010' } }; @@ -194,8 +190,8 @@ var audio = function (text, opts) { var options = getOptions(opts), morse = encode(text, opts), - AudioContext = window.AudioContext || window.webkitAudioContext, ctx = new AudioContext(), - t = ctx.currentTime, oscillator = ctx.createOscillator(), gainNode = ctx.createGain(); + AudioContext = window.AudioContext || window.webkitAudioContext, context = new AudioContext(), + t = context.currentTime, oscillator = context.createOscillator(), gainNode = context.createGain(); oscillator.type = options.oscillator.type; oscillator.frequency.value = options.oscillator.frequency; @@ -226,7 +222,7 @@ } oscillator.connect(gainNode); - gainNode.connect(ctx.destination); + gainNode.connect(context.destination); return { play: function () { @@ -236,8 +232,9 @@ stop: function () { oscillator.stop(); }, - context: ctx, - oscillator: oscillator + context: context, + oscillator: oscillator, + gainNode: gainNode }; }; diff --git a/test/morsify.js b/test/morsify.js index a4c270d..538a5e2 100644 --- a/test/morsify.js +++ b/test/morsify.js @@ -169,17 +169,6 @@ describe('morsify', function () { t.equal(morsify.encode('ะาิีึืุูเแไโำ', options), '.-.../.-/..-../../..--./..--/..-.-/---././.-.-/.-..-/---/...-.'); t.equal(morsify.encode('่้๊๋', options), '..-/...-/--.../.-.-.'); t.equal(morsify.encode('ั็์ๆฯ', options), '.--.-/---../--..-/-.---/--.-.'); - /* this test can be used after figure out how to deal with Thai alphabet duplications and conflicts - t.equal(morsify.encode('กขฃคฅฆง', options), '--./-.-./-.-./-.-/-.-/-.-/-.--.'); - t.equal(morsify.encode('จฉชซญดฎ', options), '-..-./----/-..-/--../.---/-../-..'); - t.equal(morsify.encode('ตฏถฐทธฑฒนณบ', options), '-/-/-.-../-.-../-..--/-..--/-..--/-..--/-./-./-...'); - t.equal(morsify.encode('ปผฝพภฟ', options), '.--./--.-/-.-.-/.--../.--../..-.'); - t.equal(morsify.encode('มยรลฬว', options), '--/-.--/.-./.-../.-../.--'); - t.equal(morsify.encode('ศษสหอฮฤฤๅ', options), '.../.../.../..../-...-/--.--/.-.--/.-.--'); - t.equal(morsify.encode('ะาิีึืุูเแไใโำ', options), '.-.../.-/..-../../..--./..--/..-.-/---././.-.-/.-..-/.-..-/---/...-.'); - t.equal(morsify.encode('่้๊๋', options), '..-/...-/--.../.-.-.'); - t.equal(morsify.encode('ั็์ๆฯฯลฯ', options), '.--.-/---../--..-/-.---/--.-./---.-'); - */ }); it('decodes thai alphabet', function () { var options = { priority: 12 }; @@ -192,17 +181,6 @@ describe('morsify', function () { t.equal(morsify.decode('.-.../.-/..-../../..--./..--/..-.-/---././.-.-/.-..-/---/...-.', options), 'ะ า ิ ี ึ ื ุ ู เ แ ไ โ ำ'); t.equal(morsify.decode('..-/...-/--.../.-.-.', options), '่ ้ ๊ ๋'); t.equal(morsify.decode('.--.-/---../--..-/-.---/--.-.', options), 'ั ็ ์ ๆ ฯ'); - /* this test can be used after figure out how to deal with Thai alphabet duplications and conflicts - t.equal(morsify.decode('--./-.-./-.-./-.-/-.-/-.-/-.--.', options), 'ก ข ฃ ค ฅ ฆ ง'); - t.equal(morsify.decode('-..-./----/-..-/--../.---/-../-..', options), 'จ ฉ ช ซ ญ ด ฎ'); - t.equal(morsify.decode('-/-/-.-../-.-../-..--/-..--/-..--/-..--/-./-./-...', options), 'ต ฏ ถ ฐ ท ธ ฑ ฒ น ณ บ'); - t.equal(morsify.decode('.--./--.-/-.-.-/.--../..-.', options), 'ป ผ ฝ พ ภ ฟ'); - t.equal(morsify.decode('--/-.--/.-./.-../.-../.--', options), 'ม ย ร ล ฬ ว'); - t.equal(morsify.decode('.../.../.../..../-...-/--.--/.-.--', options), 'ศ ษ ส ห อ ฮ ฤ ฤๅ'); - t.equal(morsify.decode('.-.../.-/..-../../..--./..--/..-.-/---././.-.-/.-..-/.-..-/---/...-.', options), 'ะ า ิ ี ึ ื ุ ู เ แ ไ ใ โ ำ'); - t.equal(morsify.decode('..-/...-/--.../.-.-.', options), '่ ้ ๊ ๋'); - t.equal(morsify.decode('.--.-/---../--..-/-.---/--.-./---.-', options), 'ั ็ ์ ๆ ฯ ฯลฯ'); - */ }); it('encodes unicode', function () { var options = { priority: 13 };