diarize-ruby 0.3.0 → 0.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dafc97802993d69707c60a493e72101e1932606b
4
- data.tar.gz: acb88c8eb0763d173ee517822b3ed914b5ec3fe9
3
+ metadata.gz: fea2a948f5ae15b922bf1911df35c3bdfb24b5f3
4
+ data.tar.gz: ff9da8967f4f5b9692669c677833fe449154fa18
5
5
  SHA512:
6
- metadata.gz: 4fa5cce850d478dd15b313eedff3c891083cd8f9026bc682d429bba7fc1c516a0c34cd30fca76f1c4ea681ba9d056c636218669637ba4ba005308b9c4b6daaa7
7
- data.tar.gz: 2bf3b289e0ecf7cd74008ce8b163f1ce475e265cca930a68ee6bd4a2bea7007ec4e77c2675da65a8af08224ed0054d7a084cd10b488336565b65c5f0dd18aea0
6
+ metadata.gz: 42de27a42610a7c04409f04d56d2b124eed8fa0418843516701c1cb18092ed4fe05aa1fee015d2019438443fa7c016b10fc51391bcfb7d99c1bdab28f8cb514d
7
+ data.tar.gz: cdf8c7a4e935db59c4b3a678c56e0b18e9be41f906583d939e86feb596f62847905b5c6a766575108bf7be973661e1a3b6e56b16ee754a37e69d9073f36d4c83
data/AUTHORS CHANGED
@@ -5,8 +5,7 @@ British Broadcasting Corporation
5
5
 
6
6
  - Yves Raimond <yves.raimond at bbc.co.uk>
7
7
 
8
-
9
8
  Other
10
9
  -----
11
10
 
12
- - Juergen Fesslmeier <jfesslmeier@gmail.com>
11
+ - Juergen Fesslmeier <jfesslmeier at gmail dot com>
@@ -0,0 +1,10 @@
1
+ ## [v0.3.1] - 2016-11-08
2
+
3
+ - Fixed README and examples
4
+ - First round to fix audio playback
5
+ - Move LIUM jar into bin folder
6
+ - Use `DIARIZE_RUBY_RJB_LOAD_PATH` env variable for alternative loading
7
+
8
+ ## [v0.3.0] - 2016-11-08
9
+
10
+ - Pushed first version of v0.3.0 to rubygems.org
data/README.md CHANGED
@@ -1,25 +1,26 @@
1
1
  # diarize-ruby
2
2
 
3
- This library provides an easy-to-use toolkit for speaker
4
- segmentation (diarization) and identification from audio.
3
+ This library provides an easy-to-use toolkit for speaker segmentation (diarization) and identification from audio.
5
4
 
6
- This library is being used within the BBC R&D World Service
7
- archive prototype.
5
+ This library was adopted from [diarize-jruby](https://github.com/bbc/diarize-jruby), being used within the BBC R&D World Service.
8
6
 
9
- See http://worldservice.prototyping.bbc.co.uk/programmes/X0403940 for
10
- an example.
7
+ The main reason from deviating from the original library is to have a universal gem that works with either Ruby interpreter. It uses [Ruby Java Bridge](http://rjb.rubyforge.org) instead of [JRuby](http://jruby.org).
11
8
 
9
+ Work to be done:
12
10
 
13
- ## Speaker diarization
11
+ * Universal gem that works on JRuby and various Ruby implementations (MRI) and versions
12
+ * Use performant math packages tuned to either Ruby implementation
13
+ * Add support for alternative diarization tools
14
+ * Add CI tool
15
+
16
+ ## Speaker Diarization
14
17
 
15
18
  This library gives acccess to the algorithm developed by the LIUM
16
19
  for the ESTER 2 evaluation campaign and described in [Meigner2010].
17
20
 
18
- It wraps a binary JAR file compiled from
19
- http://lium3.univ-lemans.fr/diarization/doku.php/welcome.
20
-
21
+ It wraps a binary JAR file compiled from [LIUM](http://lium3.univ-lemans.fr/diarization/doku.php/welcome).
21
22
 
22
- ## Speaker identification
23
+ ## Speaker Identification
23
24
 
24
25
  This library also implements an algorithm for speaker identification
25
26
  based on the comparison of normalised speaker models, which can be
@@ -36,14 +37,24 @@ It also includes support for speaker supervectors [Campbell2006], which
36
37
  can be used in combination with our ruby-lsh library for fast speaker
37
38
  identification.
38
39
 
40
+ ## Install
41
+
42
+ $ bundle install
43
+
44
+ Note: To make audio playback work with [Audio Playback](https://github.com/arirusso/audio-playback), you should install the following native libraries (homebrew):
45
+
46
+ brew install libffi
47
+ brew install portaudio
39
48
 
40
- ## Example use
49
+ If you are using a different version of LIUM than what is bundled in the `bin` folder, you can do so by setting an environment variable.
41
50
 
42
- $ jruby -S gem install diarize-jruby
43
- $ jruby -S irb
44
- > require 'diarize'
45
- > audio = Diarize::Audio.new URI('http://example.com/file.wav')
46
- > audio = Diarize::Audio.new URI.join('file:///', '/Users/juergen/work/ruby/diarize-ruby/test/data/will-and-juergen.wav')
51
+ $ export DIARIZE_RUBY_RJB_LOAD_PATH=<path-to-LIUM-jar-file>
52
+
53
+ ## Examples
54
+
55
+ $ irb -I lib
56
+ > require "diarize"
57
+ > audio = Diarize::Audio.new URI.join('file:///', File.join(File.expand_path(File.dirname(__FILE__)), "test", "data", "will-and-juergen.wav"))
47
58
  > audio.analyze!
48
59
  > audio.segments
49
60
  > audio.speakers
@@ -55,7 +66,7 @@ identification.
55
66
  > audio.segments_by_speaker(speakers.first)[0].play
56
67
  > audio.segments_by_speaker(speakers.first)[1].play
57
68
  > ...
58
- > speakers |= other_speakers
69
+ > speakers ||= other_speakers
59
70
  > Diarize::Speaker.match(speakers)
60
71
 
61
72
 
@@ -63,7 +74,6 @@ identification.
63
74
 
64
75
  $ rake
65
76
 
66
-
67
77
  ## References
68
78
 
69
79
  [Meigner2010] S. Meignier and T. Merlin, "LIUM SpkDiarization:
@@ -86,8 +96,7 @@ Proceedings of INTERSPEECH, 2005
86
96
  "Support vector machines using GMM supervectors for speaker verification",
87
97
  IEEE Signal Processing Letters, 2006, 13, 308-311
88
98
 
89
-
90
- ## Licensing terms and authorship
99
+ ## License
91
100
 
92
101
  See 'LICENSE' and 'AUTHORS' files.
93
102
 
@@ -101,9 +110,8 @@ is licensed under the GNU General Public License version 2. See
101
110
  http://lium3.univ-lemans.fr/diarization/doku.php/licence for more
102
111
  information.
103
112
 
104
-
105
113
  ## Developer Resources
106
114
 
107
115
  * [Connecting Ruby to Java and vice versa](http://nofail.de/2010/04/ruby-in-java-java-in-ruby-jruby-or-ruby-java-bridge/)
108
116
  * [LIUM scripts](https://github.com/StevenLOL/LIUM/blob/master/ilp_diarization2.sh)
109
- * [Speaker Identification for the whole World Service Archive](http://www.bbc.co.uk/rd/blog/2014-01-speaker-identification-for-the-whole-world-service-archive)
117
+ * [Speaker Identification for the whole World Service Archive](http://www.bbc.co.uk/rd/blog/2014-01-speaker-identification-for-the-whole-world-service-archive)
@@ -24,8 +24,10 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "test-unit", "~> 3.0"
25
25
  spec.add_development_dependency "mocha", "~> 1.1"
26
26
  spec.add_development_dependency "webmock", "~> 2.1"
27
+ spec.add_development_dependency "byebug", "~> 9.0"
27
28
 
28
29
  spec.add_dependency "rjb", "~> 1.5"
29
30
  spec.add_dependency "to-rdf", "~> 0"
30
31
  spec.add_dependency "jblas-ruby", "~> 1.1"
32
+ spec.add_dependency "audio-playback"
31
33
  end
@@ -1,11 +1,12 @@
1
1
  require "rjb"
2
2
 
3
- RJB_LOAD_PATH = [File.join(File.expand_path(File.dirname(__FILE__)), 'diarize', 'LIUM_SpkDiarization-4.2.jar')].join(File::PATH_SEPARATOR)
3
+ RJB_LOAD_PATH = [ENV.fetch('DIARIZE_RUBY_RJB_LOAD_PATH', File.join(File.expand_path('..', File.dirname(__FILE__)), 'bin', 'LIUM_SpkDiarization-4.2.jar'))].join(File::PATH_SEPARATOR)
4
4
  RJB_OPTIONS = ['-Xms16m', '-Xmx1024m']
5
5
 
6
6
  Rjb::load(RJB_LOAD_PATH, RJB_OPTIONS)
7
7
 
8
8
  require "matrix"
9
+ require "audio-playback"
9
10
  require "diarize/version"
10
11
  require "diarize/lium"
11
12
  require "diarize/audio"
@@ -2,21 +2,19 @@ module Diarize
2
2
 
3
3
  class AudioPlayer
4
4
 
5
- def play(file, start=0.0, duration=10.0)
6
- java_file = java.io.File.new(file.path)
7
- stream = javax.sound.sampled.AudioSystem.getAudioInputStream(java_file)
8
- clip = javax.sound.sampled.AudioSystem.clip
9
- clip.open(stream)
10
- clip.setMicrosecondPosition(start * 1000000)
11
- clip.start
12
- begin
13
- sleep(duration)
14
- rescue Exception
15
- $stderr.puts 'Stopping playback'
16
- end
17
- clip.stop
18
- clip.close
19
- stream.close
5
+ def play(file, options = {})
6
+ output = AudioPlayback::Device::Output.by_id(1) rescue nil
7
+ defaults = {
8
+ :channels => [0, 1],
9
+ :latency => 1,
10
+ :output_device => output,
11
+ :buffer_size => 4048
12
+ }
13
+ options, stream = defaults.merge(options), nil
14
+ playback = AudioPlayback.play(file.path, options)
15
+ stream ||= playback.stream
16
+ stream.start
17
+ stream.block
20
18
  end
21
19
 
22
20
  end
@@ -23,9 +23,9 @@ module Diarize
23
23
  Speaker.find_or_create(URI("#{@audio.base_uri}##{@speaker_id}"), @speaker_gender)
24
24
  end
25
25
 
26
- def play
26
+ def play(options = {})
27
27
  player = AudioPlayer.new
28
- player.play(@audio.file, start, duration)
28
+ player.play(@audio.file, options.merge({:start => start, :duration => duration}))
29
29
  end
30
30
 
31
31
  include ToRdf
@@ -1,3 +1,3 @@
1
1
  module Diarize
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diarize-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yves Raimond
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '2.1'
56
+ - !ruby/object:Gem::Dependency
57
+ name: byebug
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '9.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '9.0'
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: rjb
58
72
  requirement: !ruby/object:Gem::Requirement
@@ -95,6 +109,20 @@ dependencies:
95
109
  - - "~>"
96
110
  - !ruby/object:Gem::Version
97
111
  version: '1.1'
112
+ - !ruby/object:Gem::Dependency
113
+ name: audio-playback
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
98
126
  description: A library for Ruby wrapping the LIUM Speaker Diarization and including
99
127
  a few extra tools
100
128
  email:
@@ -107,13 +135,14 @@ files:
107
135
  - ".ruby-gemset"
108
136
  - ".ruby-version"
109
137
  - AUTHORS
138
+ - CHANGELOG.md
110
139
  - Gemfile
111
140
  - LICENSE
112
141
  - README.md
113
142
  - Rakefile
143
+ - bin/LIUM_SpkDiarization-4.2.jar
114
144
  - diarize-ruby.gemspec
115
145
  - lib/diarize.rb
116
- - lib/diarize/LIUM_SpkDiarization-4.2.jar
117
146
  - lib/diarize/audio.rb
118
147
  - lib/diarize/audio_player.rb
119
148
  - lib/diarize/lium.rb