diarize-ruby 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +0 -7
- data/diarize-ruby.gemspec +0 -1
- data/lib/diarize.rb +0 -1
- data/lib/diarize/audio.rb +3 -3
- data/lib/diarize/segment.rb +2 -13
- data/lib/diarize/segmentation.rb +5 -7
- data/lib/diarize/speaker.rb +1 -1
- data/lib/diarize/version.rb +1 -1
- metadata +1 -16
- data/lib/diarize/audio_player.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b91ae2c0c7d4a0d7bafc5babcf5c75c51c58c937
|
4
|
+
data.tar.gz: 15b61a7d0d474db5da179722033ac66fc9cbe395
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a1c9a8ed7f37c46fa3dcdd2e541d7021c8ab9abfe7e544c1a67f11e1b260fadbc064ab0f17d0b73a7b636c1e0b5a9cf511696544f27bbaf5359a6b235361509
|
7
|
+
data.tar.gz: 3148f413da7b30e3fb1d412cac6d686600c516ee97f562c4364f9a0da297ff469a4bcd59516597514536f679c3bf64f3ad42f54a2231a1a13fc704662c55979b
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -41,11 +41,6 @@ identification.
|
|
41
41
|
|
42
42
|
$ bundle install
|
43
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
|
48
|
-
|
49
44
|
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.
|
50
45
|
|
51
46
|
$ export DIARIZE_RUBY_RJB_LOAD_PATH=<path-to-LIUM-jar-file>
|
@@ -63,8 +58,6 @@ If you are using a different version of LIUM than what is bundled in the `bin` f
|
|
63
58
|
> speakers.first.gender
|
64
59
|
> speakers.first.model.mean_log_likelihood
|
65
60
|
> speakers.first.model.components.size
|
66
|
-
> audio.segments_by_speaker(speakers.first)[0].play
|
67
|
-
> audio.segments_by_speaker(speakers.first)[1].play
|
68
61
|
> ...
|
69
62
|
> speakers ||= other_speakers
|
70
63
|
> Diarize::Speaker.match(speakers)
|
data/diarize-ruby.gemspec
CHANGED
data/lib/diarize.rb
CHANGED
@@ -12,7 +12,6 @@ require "diarize/lium"
|
|
12
12
|
require "diarize/audio"
|
13
13
|
require "diarize/segment"
|
14
14
|
require "diarize/segmentation"
|
15
|
-
require "diarize/audio_player"
|
16
15
|
require "diarize/super_vector"
|
17
16
|
|
18
17
|
# Extenions to the {Ruby-Java Bridge}[http://rjb.rubyforge.org/] module that
|
data/lib/diarize/audio.rb
CHANGED
@@ -182,9 +182,9 @@ module Diarize
|
|
182
182
|
clustersSplitClust = diarization.speech("10,10,50", clusterSet, clustersSegInit, clustersDClust, featureSet, parameter)
|
183
183
|
clusters = diarization.gender(clusterSet, clustersSplitClust, featureSet, parameter)
|
184
184
|
if parameter.parameterDiarization.isCEClustering
|
185
|
-
# If true, the program computes the NCLR/CE clustering at the end.
|
186
|
-
# The diarization error rate is minimized.
|
187
|
-
# If this option is not set, the program stops right after the detection of the gender
|
185
|
+
# If true, the program computes the NCLR/CE clustering at the end.
|
186
|
+
# The diarization error rate is minimized.
|
187
|
+
# If this option is not set, the program stops right after the detection of the gender
|
188
188
|
# and the resulting segmentation is sufficient for a transcription system.
|
189
189
|
clusters = diarization.speakerClustering(parameterDiarization.getThreshold("c"), "ce", clusterSet, clusters, featureSet, parameter)
|
190
190
|
end
|
data/lib/diarize/segment.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), 'audio_player')
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
require 'to_rdf'
|
5
3
|
require 'uri'
|
6
4
|
|
7
5
|
module Diarize
|
8
|
-
|
9
6
|
class Segment
|
7
|
+
include ToRdf
|
10
8
|
|
11
9
|
attr_reader :start, :duration, :gender, :bandwidth
|
12
10
|
|
@@ -23,20 +21,13 @@ module Diarize
|
|
23
21
|
Speaker.find_or_create(URI("#{@audio.base_uri}##{@speaker_id}"), @speaker_gender)
|
24
22
|
end
|
25
23
|
|
26
|
-
def play(options = {})
|
27
|
-
player = AudioPlayer.new
|
28
|
-
player.play(@audio.file, options.merge({:start => start, :duration => duration}))
|
29
|
-
end
|
30
|
-
|
31
|
-
include ToRdf
|
32
|
-
|
33
24
|
def namespaces
|
34
25
|
super.merge 'ws' => 'http://wsarchive.prototype0.net/ontology/'
|
35
26
|
end
|
36
27
|
|
37
28
|
def uri
|
38
29
|
# http://www.w3.org/TR/media-frags/
|
39
|
-
URI("#{@audio.base_uri}#t=#{start},#{start+duration}")
|
30
|
+
URI("#{@audio.base_uri}#t=#{start},#{start + duration}")
|
40
31
|
end
|
41
32
|
|
42
33
|
def type_uri
|
@@ -52,7 +43,5 @@ module Diarize
|
|
52
43
|
'ws:speaker' => speaker,
|
53
44
|
}
|
54
45
|
end
|
55
|
-
|
56
46
|
end
|
57
|
-
|
58
47
|
end
|
data/lib/diarize/segmentation.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
module Diarize
|
2
|
-
|
3
2
|
class Segmentation
|
4
3
|
|
5
4
|
def self.from_seg_file(audio, seg_file)
|
6
5
|
segmentation = []
|
7
6
|
File.open(seg_file).each_line do |line|
|
8
7
|
next if line.start_with? ';;'
|
9
|
-
parts
|
10
|
-
start
|
11
|
-
duration
|
12
|
-
gender
|
13
|
-
bandwidth
|
8
|
+
parts = line.split(' ')
|
9
|
+
start = parts[2].to_i / 100.0
|
10
|
+
duration = parts[3].to_i / 100.0
|
11
|
+
gender = parts[4]
|
12
|
+
bandwidth = parts[6]
|
14
13
|
speaker_id = parts[7]
|
15
14
|
segmentation << Segment.new(audio, start, duration, gender, bandwidth, speaker_id)
|
16
15
|
end
|
@@ -33,5 +32,4 @@ module Diarize
|
|
33
32
|
end
|
34
33
|
|
35
34
|
end
|
36
|
-
|
37
35
|
end
|
data/lib/diarize/speaker.rb
CHANGED
@@ -103,7 +103,7 @@ module Diarize
|
|
103
103
|
gaussian = model.components.get(k)
|
104
104
|
gaussian.dim.times do |i|
|
105
105
|
normalized_mean = (1.0 / distance_to_ubm) * gaussian.mean(i) + (1.0 - 1.0 / distance_to_ubm) * speaker_ubm.model.components.get(k).mean(i)
|
106
|
-
gaussian.set_mean(i, normalized_mean)
|
106
|
+
gaussian.set_mean(i, normalized_mean)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
@normalized = true
|
data/lib/diarize/version.rb
CHANGED
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.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yves Raimond
|
@@ -109,20 +109,6 @@ dependencies:
|
|
109
109
|
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
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'
|
126
112
|
description: A library for Ruby wrapping the LIUM Speaker Diarization and including
|
127
113
|
a few extra tools
|
128
114
|
email:
|
@@ -144,7 +130,6 @@ files:
|
|
144
130
|
- diarize-ruby.gemspec
|
145
131
|
- lib/diarize.rb
|
146
132
|
- lib/diarize/audio.rb
|
147
|
-
- lib/diarize/audio_player.rb
|
148
133
|
- lib/diarize/lium.rb
|
149
134
|
- lib/diarize/segment.rb
|
150
135
|
- lib/diarize/segmentation.rb
|
data/lib/diarize/audio_player.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
module Diarize
|
2
|
-
|
3
|
-
class AudioPlayer
|
4
|
-
|
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
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|