kja 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/kja.rb +81 -23
  4. data.tar.gz.sig +0 -0
  5. metadata +52 -28
  6. metadata.gz.sig +1 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bbd132952cb33ec1613e40b1b8931844eafc764f
4
- data.tar.gz: 32d80038c1c73e32d674a781e76cbe89cb375f38
2
+ SHA256:
3
+ metadata.gz: cf0f96cfdf4fabf09605e847917fea00ccd6d2e422653d2f5c654c4401a4d929
4
+ data.tar.gz: 117cae0553d930f9a1fe67fb632aa62ae608d191f708a6d67669c1b9045bdb26
5
5
  SHA512:
6
- metadata.gz: 10ecbf62143ede9cfb272fc26ec985a6c43ed6255505e850a6dd0c76ff28af93d0b23a25a7e5f6cdd06d06bf59d69fd1df1b33d4d8f3b9b3cc15ddc43a768079
7
- data.tar.gz: 6a8b94e96cad8efe9096c09fb956827d30ea5cfd4a11e6a1c733e95d65e5d01c882809b6cc1707f816eba76072550c279ce9cc4fd1cbfa14d038109241b41a17
6
+ metadata.gz: 45143316db18a8a22201d1bdabcd374c967f42f7d3ffa9a1a9e493e0424575378f253daaaca0e238b36c40baf24875fb2620e0e53c1b22753e58cd115ebabcac
7
+ data.tar.gz: 0ad0b442e3d3cdedd23e99087057fcbe244f955d133f8d80fdb4d10bd8b74e6bccd42d27d3aecb10ca959a0a28dd9d408f05b8fbdc92174d44f97304046307db
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/kja.rb CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  require 'dynarex'
6
6
  require 'tempfile'
7
+ require 'rxfreader'
8
+ require 'kj_reading'
7
9
 
8
10
 
9
11
  # description: Intended for use with the kj gem
@@ -25,41 +27,97 @@ require 'tempfile'
25
27
 
26
28
  class Kja
27
29
 
28
- def initialize(audio_player: '/usr/bin/ogg123 -q',
29
- ogg_baseurl: 'http://rorbuilder.info/r/ruby/kja/ogg')
30
+ def initialize(audio_player: '/usr/bin/ogg123 -q',
31
+ ogg_baseurl: 'http://a0.jamesrobertson.me.uk/' \
32
+ + 'rorb/r/ruby/kja/ogg', debug: false)
30
33
 
31
34
  @ogg_baseurl, @audio_player = ogg_baseurl, audio_player
35
+ @debug = debug
32
36
 
33
37
  end
34
-
38
+
39
+ def download_ogg(s)
40
+
41
+ ogg_filepath = fetch_ogg_filepath(s)
42
+ url = @ogg_baseurl + '/' + ogg_filepath
43
+ audio, _ = RXFReader.read(url)
44
+
45
+ tmpfile = Tempfile.new('kva')
46
+ File.write tmpfile.path + '.ogg', audio
47
+
48
+ return tmpfile.path + '.ogg'
49
+
50
+ end
51
+
35
52
  def duration(s)
36
-
37
- book_title, chapter_title, verse_no = fracture(s)
38
-
53
+
54
+ book_title, chapter_title, verse_no = fracture(s)
55
+
39
56
  url = @ogg_baseurl + '/' + File.join(book_title, chapter_title, 'dir.xml')
40
57
 
41
58
  dx = Dynarex.new url
42
- ogg = dx.find_by_name chapter_title + '_' + verse_no + '.ogg'
59
+ ogg = dx.find_by_name chapter_title + '_' + verse_no + '.ogg'
43
60
  ogg.description[/\d+\.\d+$/].to_f
44
61
 
45
- end
62
+ end
46
63
 
47
- def speak(s)
64
+ def speak(title)
48
65
 
49
- ogg_filepath = fetch_ogg_filepath(s)
50
- url = @ogg_baseurl + '/' + ogg_filepath
51
- audio, _ = RXFHelper.read(url)
52
-
53
- tmpfile = Tempfile.new('kva')
54
- File.write tmpfile.path, audio
66
+ a = KjReading.verses title
67
+
68
+ a.each do |x|
55
69
 
56
- command = @audio_player + ' ' + tmpfile.path
57
- system command
70
+ filename = download_ogg(x.title)
71
+ command = @audio_player + ' ' + filename
72
+ system command
73
+
74
+ end
58
75
 
59
76
  end
60
-
77
+
78
+
79
+ def download(s, outfile=nil)
80
+
81
+ puts 'downloading ...' if @debug
82
+
83
+ a = KjReading.verses s
84
+
85
+ downloads = a.map do |x|
86
+ download_ogg(x.title)
87
+ end
88
+
89
+ puts 'converting to wav: ' + downloads.inspect if @debug
90
+
91
+ wavfiles = downloads.map do |oggfile|
92
+
93
+ wavfile = oggfile.sub(/\.ogg$/,'.wav')
94
+ EasyAudioUtils.new(oggfile, wavfile).convert
95
+ sleep 1.4
96
+ File.basename(wavfile)
97
+
98
+ end
99
+
100
+ puts 'concatenating wav files ...' if @debug
101
+
102
+ # concat wav files
103
+ #
104
+ fullwavfile = Tempfile.new('kva').path + '.wav'
105
+ puts 'creating fullwavfile:' + fullwavfile.inspect if @debug
106
+ EasyAudioUtils.new(out: fullwavfile, working_dir: \
107
+ File.dirname(fullwavfile)).concat(wavfiles, sample_rate: 22050)
108
+
109
+ # convert wav to ogg
110
+ #
111
+ fulloggfile = outfile || fullwavfile.sub(/\.wav$/, '.ogg')
112
+ puts 'creating fulloggfile: ' + fulloggfile.inspect if @debug
113
+ EasyAudioUtils.new(fullwavfile, fulloggfile).convert
114
+
115
+ 'downloaded ' + fulloggfile
116
+
117
+ end
118
+
61
119
  private
62
-
120
+
63
121
  def fracture(s)
64
122
 
65
123
  book_no, book_title, chapter_no, verse_no = \
@@ -68,16 +126,16 @@ class Kja
68
126
  book_title.gsub!(/\s/,'_')
69
127
  book_title = book_no + '_' + book_title if book_no
70
128
  chapter_title = book_title + '_' + chapter_no
71
-
129
+
72
130
  return [book_title, chapter_title, verse_no]
73
131
  end
74
-
132
+
75
133
  def fetch_ogg_filepath(s)
76
134
 
77
135
  book_title, chapter_title, verse_no = fracture(s)
78
136
  verse_title = chapter_title + '_' + verse_no
79
137
 
80
- File.join(book_title, chapter_title, verse_title + '.ogg')
138
+ File.join(book_title, chapter_title, verse_title + '.ogg')
81
139
  end
82
140
 
83
141
  end
@@ -87,4 +145,4 @@ if __FILE__ == $0 then
87
145
  kja = Kja.new(audio_player: '/usr/bin/ogg123 -q')
88
146
  kja.speak(ARGV[0])
89
147
 
90
- end
148
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kja
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,28 +10,33 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
13
+ MIIEljCCAv6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBIMRIwEAYDVQQDDAlnZW1t
14
14
  YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
- 8ixkARkWAmV1MB4XDTE3MDYxMTEzMTUzMVoXDTE4MDYxMTEzMTUzMVowSDESMBAG
15
+ 8ixkARkWAmV1MB4XDTIyMDcxNTA3NTY0OVoXDTIzMDcxNTA3NTY0OVowSDESMBAG
16
16
  A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBAK7GZ3j4h3A8ZZRfP2QrDoCpKcSrlz8TP6/swOSGfdRlEvgKSJW7bh0ux8U3
19
- /pGQiqPNPGoXSZ1cOCzTDhxOxH4X7EFCWhcJmPoi8v7ikbjKajsIMId/X8QT+/dU
20
- GG1pI8luFMk60aQTccEIFJhnZeFEPL7RC21svJSTkIb6/7ZbA3jt1KZDwXwJCRAr
21
- Ila1P7iB+ZRvl6r+zHjhgLoAPaJSEP1FyV1+h/F2A73T9wpHqvDaCt+wFcBryYba
22
- EQGfKs68qZEYVVhAXipMrP7noyFblbBnBIs/emrpHfLcM372UcuDz9e2518ysrXd
23
- 7JwAxJHVYa5vlw94+I79hECEiY8CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
- DwQEAwIEsDAdBgNVHQ4EFgQUMffNiOr7xRYcI8Yzu833wn86Cp4wJgYDVR0RBB8w
25
- HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEATslcasaf
27
- HgGvG+gGAajwxkpAOVyF8+y5a3LiFKrPgnauJu452zh0DYpCodU/iFRPuGTeHTNN
28
- MZiXhzYv3LEJSAYAVb2x67Lq89aVu6V9GHHdZp/2OqwRdFJkty3NbAk+92suwV6i
29
- Vp4HlPr6GhtITi53+q0SlUJsOk1pA9ZwJNPbNvC+4HeM1KOiiaBJSMzQZ2LDziGG
30
- /QorbSiyvR1dtrkaIfUuerB2HYzpccrFQforkB0Sz0FX/hB2Mk7NlolFYrQt4qSH
31
- 6po/R2bxzT2Ocy3UuAO73694J87w11m8wbDcPnntL7WYMh/hhGiyfKmTU2eThu0G
32
- FeRxNrmBTWCnjg==
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoC
18
+ ggGBAMeyhOVzwEK9bBD3Ug/gtrUsKVoazVWF6iaRxE1Uljt3T9BqwJZUMtRaOEJE
19
+ /+wUYc2msnR8p4IC0rihgd98ZpWDV6rN4/WcGNwISuORz2w46jmyeQRcvpCX3v35
20
+ 8k8bocGs8VdAI2ZE3BsLmu8Aeqhc+nKJHG+KqqRgQMjIx5POLXSn3yFdkepaaj1Q
21
+ Sl4MSPq5oQqThp/HUS024ACfL3Um9NCQBbemwn5sgXQeaSLJCRi61sV0EplZZ4Jn
22
+ vdVySO6MdV4i5II8qBl7hq4dCrBwhoCOfFzCISHbTYi/BUjiMNVM2QtvB7hSpZQw
23
+ HMwunuGYB4Oji/PLEFNaODlkzxFWnvZA9pd8FeUiK1yrNhP9RehARdS4rX3Z8GAd
24
+ WpZEFKUwa9Zip06nu6WkCnyHSs7h8E4Qai9kM3PI17tR04t+3uuCFyAMIrjOnpTB
25
+ OWGLB+U5GmgKGGmvzRJb2jajF4koBFdewxfxW1sbehgwvBxWMVRUOrPsIVwfBPox
26
+ pPtSPwIDAQABo4GKMIGHMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
27
+ BBSe8lWA6J1ZcIQAKZPSoBL93+XQqjAmBgNVHREEHzAdgRtnZW1tYXN0ZXJAamFt
28
+ ZXNyb2JlcnRzb24uZXUwJgYDVR0SBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
29
+ c29uLmV1MA0GCSqGSIb3DQEBCwUAA4IBgQAn2FL/3bLh1VhxGF0EU+oeAhKsOPFH
30
+ Ks2DhTw4S51ya4lAyJ0XKHft+TXWhFwG8q3by3icQsQC+dkhvhGhQ1X6UNLfdxPg
31
+ umwUfmcDKv9SUrJRUhh8FE3JzrIZ6hQaSwVg4onK/8aHinlN1fdlF/NTI7xJWBF3
32
+ lx7gtn3xeHlRRQ0LFyHafa6pqbOmGc9OXd0lx3YSia+CO8neZoor9q6eYcSiipsd
33
+ kgYOH5UsMHGt0Ir4kx45mvRQsCc+uTtO8PTXVJ4HwDygPlrj4eUrQHDJZp+c1T3k
34
+ Cx+uD+KmsS0PAxLgztrNvv4GRMxIr0eXpRea2HvX3kAkzC68v6M9R0tczWzpYuf/
35
+ hyP4rr90xWTMpBbCWCljzCCE068eKCOoYFhGLEQfuZ+w3bjFLx+u4pTOQdfhK9dq
36
+ n6o7BhDy9zrdH807AvfNd7InQgMgGUGq75tHatBTStNKF7ng7zTIPYHWc7YUDamV
37
+ c/p/VO0efUKyKAHzOQQe8VZzcgh6e7jVIws=
33
38
  -----END CERTIFICATE-----
34
- date: 2017-07-11 00:00:00.000000000 Z
39
+ date: 2022-07-15 00:00:00.000000000 Z
35
40
  dependencies:
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: dynarex
@@ -39,22 +44,42 @@ dependencies:
39
44
  requirements:
40
45
  - - "~>"
41
46
  - !ruby/object:Gem::Version
42
- version: '1.7'
47
+ version: '1.9'
43
48
  - - ">="
44
49
  - !ruby/object:Gem::Version
45
- version: 1.7.22
50
+ version: 1.9.11
46
51
  type: :runtime
47
52
  prerelease: false
48
53
  version_requirements: !ruby/object:Gem::Requirement
49
54
  requirements:
50
55
  - - "~>"
51
56
  - !ruby/object:Gem::Version
52
- version: '1.7'
57
+ version: '1.9'
53
58
  - - ">="
54
59
  - !ruby/object:Gem::Version
55
- version: 1.7.22
60
+ version: 1.9.11
61
+ - !ruby/object:Gem::Dependency
62
+ name: kj_reading
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.3'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.3.0
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '0.3'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.3.0
56
81
  description:
57
- email: james@jamesrobertson.eu
82
+ email: digital.robertson@gmail.com
58
83
  executables: []
59
84
  extensions: []
60
85
  extra_rdoc_files: []
@@ -79,9 +104,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
104
  - !ruby/object:Gem::Version
80
105
  version: '0'
81
106
  requirements: []
82
- rubyforge_project:
83
- rubygems_version: 2.6.8
107
+ rubygems_version: 3.3.7
84
108
  signing_key:
85
109
  specification_version: 4
86
- summary: Downloads and plays King James Bible OGG files from rorbuilder.info
110
+ summary: Downloads and plays King James Bible OGG files from jamesrobertson.me.uk
87
111
  test_files: []
metadata.gz.sig CHANGED
@@ -1,2 +1 @@
1
- ���bQ���~�e������lfe��1l�,�7.+�b�˵7���ؓ
2
- �_#F����|E;���}���G�FYJ%��f� �Գ�c3�lg��ڞH^Ki� �� :Q����d�S賮����8�Õf1�>S�ŵӉk�m�D A����t �O.��V;H����0�52�/�*�:߽���̕[�Q��G�?!XWݧ�&��!�5<fF��Щ�^#��mȿQ�B��t^���f��4\��
1
+ �%�