hornetseye-alsa 0.3.2 → 0.3.3

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.
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ require 'rake/loaders/makefile'
7
7
  require 'rbconfig'
8
8
 
9
9
  PKG_NAME = 'hornetseye-alsa'
10
- PKG_VERSION = '0.3.2'
10
+ PKG_VERSION = '0.3.3'
11
11
  CFG = RbConfig::CONFIG
12
12
  CXX = ENV[ 'CXX' ] || 'g++'
13
13
  RB_FILES = FileList[ 'lib/**/*.rb' ]
@@ -17,12 +17,39 @@
17
17
  # Namespace of Hornetseye computer vision library
18
18
  module Hornetseye
19
19
 
20
+ # Class for capturing audio samples from an ALSA device
21
+ #
22
+ # @see http://www.alsa-project.org/
20
23
  class AlsaInput
21
24
 
22
25
  class << self
23
26
 
27
+ # Alias for native constructor
28
+ #
29
+ # @return [AlsaInput] An object for accessing a microphone.
30
+ #
31
+ # @private
24
32
  alias_method :orig_new, :new
25
33
 
34
+ # Open a sound device for input
35
+ #
36
+ # Open the specified sound device for reading. Note that the desired sample rate
37
+ # may not be supported. In that case the sound library will choose a sampling
38
+ # rate near the desired one.
39
+ #
40
+ # @example Open standard microphone device
41
+ # require 'hornetseye_alsa'
42
+ # include Hornetseye
43
+ # microphone = AlsaInput.new 'default:0', 44_100, 2
44
+ #
45
+ # @param [String] pcm_name Name of the PCM device
46
+ # @param [Integer] rate Desired sampling rate.
47
+ # @param [Integer] channels Number of channels (1=mono, 2=stereo).
48
+ # @param [Integer] periods Number of audio frames of the output buffer.
49
+ # @param [Integer] frames Size of the audio frames of the output buffer.
50
+ # @return [AlsaInput] An object for accessing the microphone.
51
+ #
52
+ # @see #rate
26
53
  def new( pcm_name = 'default:0', rate = 48000, channels = 2, periods = 16,
27
54
  frames = 1024 )
28
55
  orig_new pcm_name, rate, channels, periods, frames
@@ -30,8 +57,28 @@ module Hornetseye
30
57
 
31
58
  end
32
59
 
60
+ # Alias for native method
61
+ #
62
+ # @return [Node] A two-dimensional array with short-integer audio samples.
63
+ #
64
+ # @private
33
65
  alias_method :orig_read, :read
34
66
 
67
+ # Read specified number of samples from the sound device
68
+ #
69
+ # Audio data is read from the input buffer.
70
+ #
71
+ # A blocking read operation is used. I.e. the program is blocked until there is
72
+ # sufficient data available in the audio output buffer.
73
+ #
74
+ # @example Read 3 seconds of audio samples
75
+ # require 'hornetseye_alsa'
76
+ # include Hornetseye
77
+ # microphone = AlsaInput.new 'default:0', 44_100, 2
78
+ # data = microphone.read 3 * 44_100
79
+ #
80
+ # @param [Integer] samples Number of samples to read.
81
+ # @return [Node] A two-dimensional array with short-integer audio samples.
35
82
  def read( samples )
36
83
  Hornetseye::MultiArray( SINT, channels, samples ).
37
84
  new orig_read( samples ).memory
@@ -24,23 +24,30 @@ module Hornetseye
24
24
 
25
25
  class << self
26
26
 
27
+ # Alias for native constructor
28
+ #
29
+ # @return [AlsaOutput] An object for accessing the speakers.
30
+ #
31
+ # @private
27
32
  alias_method :orig_new, :new
28
33
 
29
- # Open a sound device
34
+ # Open a sound device for output
30
35
  #
31
36
  # Open the specified sound device for writing. Note that the desired sample rate
32
- # may not be supported. In that case the sound library will provide a sampling
37
+ # may not be supported. In that case the sound library will select a sampling
33
38
  # rate near the desired one.
34
39
  #
35
- # @example Open a sound device
36
- # speaker = AlsaOutput.new 'default:0', 44_100, 2, 16, 1024
40
+ # @example Open default speakers
41
+ # require 'hornetseye_alsa'
42
+ # include Hornetseye
43
+ # speaker = AlsaOutput.new 'default:0', 44_100, 2
37
44
  #
38
45
  # @param [String] pcm_name Name of the PCM device
39
46
  # @param [Integer] rate Desired sampling rate.
40
47
  # @param [Integer] channels Number of channels (1=mono, 2=stereo).
41
48
  # @param [Integer] periods Number of audio frames of the output buffer.
42
49
  # @param [Integer] frames Size of the audio frames of the output buffer.
43
- # @return [AlsaOutput] An object for accessing the sound device.
50
+ # @return [AlsaOutput] An object for accessing the speakers.
44
51
  #
45
52
  # @see #rate
46
53
  def new( pcm_name = 'default:0', rate = 48000, channels = 2, periods = 16,
@@ -50,6 +57,9 @@ module Hornetseye
50
57
 
51
58
  end
52
59
 
60
+ # Alias for native method
61
+ #
62
+ # @private
53
63
  alias_method :orig_write, :write
54
64
 
55
65
  # Write an audio frame to the sound device
@@ -62,14 +72,17 @@ module Hornetseye
62
72
  # A blocking write operation is used. I.e. the program is blocked until there is
63
73
  # sufficient space in the audio output buffer.
64
74
  #
65
- # @example Writing audio samples
66
- # speaker = AlsaOutput.new 'default:0', 44_100, 2, 16, 1024
67
- # wave = lazy( 2, 110 ) { |j,i| Math.sin( i * 2 * Math::PI / 110 ) * 0x7FFF }.to_sint
68
- # while true
69
- # speaker.write wave
70
- # end
75
+ # @example Play a 400Hz tune for 3 seconds
76
+ # require 'hornetseye_alsa'
77
+ # include Hornetseye
78
+ # speaker = AlsaOutput.new 'default:0', 44_100, 2
79
+ # L = 44_100 / 400
80
+ # wave = lazy( 2, L ) { |j,i| Math.sin( i * 2 * Math::PI / L ) * 0x7FFF }.to_sint
81
+ # ( 3 * 400 ).times { speaker.write wave }
71
82
  #
72
83
  # @param [Node] frame A two-dimensional array of short-integer audio samples.
84
+ #
85
+ # @return [Node] Returns the parameter +frame+.
73
86
  def write( frame )
74
87
  if frame.typecode != SINT
75
88
  raise "Audio data must be of type SINT (but was #{frame.typecode})"
@@ -82,6 +95,7 @@ module Hornetseye
82
95
  "#{frame.shape.first}"
83
96
  end
84
97
  orig_write Hornetseye::Sequence( UBYTE, 2 * frame.size ).new( frame.memory )
98
+ frame
85
99
  end
86
100
 
87
101
  end
@@ -19,19 +19,41 @@ module Hornetseye
19
19
 
20
20
  class AlsaInput
21
21
 
22
+ # Get the sampling rate of the sound device
23
+ #
24
+ # The sampling rate may be different to the desired sampling rate specified in
25
+ # the constructor.
26
+ #
27
+ # @return [Integer] The sampling rate of the sound device.
22
28
  attr_reader :rate
23
29
 
30
+ # Number of audio channels
31
+ #
32
+ # @return [Integer] Number of audio channels (1=mono, 2=stereo).
24
33
  attr_reader :channels
25
34
 
35
+ # Close the audio device
36
+ #
37
+ # @return [AlsaInput] Returns +self+.
26
38
  def close
27
39
  end
28
40
 
41
+ # Space available for recording to the audio buffer
42
+ #
43
+ # @return [Integer] Number of audio samples left for recording before the buffer
44
+ # overflows.
29
45
  def avail
30
46
  end
31
47
 
48
+ # Number of samples available for retrieval
49
+ #
50
+ # @return [Integer] Number of audio samples available for retrieval.
32
51
  def delay
33
52
  end
34
53
 
54
+ # Reset the sound device
55
+ #
56
+ # @return [AlsaInput] Returns +self+.
35
57
  def prepare
36
58
  end
37
59
 
@@ -53,18 +75,24 @@ module Hornetseye
53
75
  attr_reader :channels
54
76
 
55
77
  # Close the audio device
78
+ #
79
+ # @return [AlsaOutput] Returns +self+.
56
80
  def close
57
81
  end
58
82
 
59
83
  # Drop content of audio output buffer
84
+ #
85
+ # @return [AlsaOutput] Returns +self+.
60
86
  def drop
61
87
  end
62
88
 
63
89
  # Wait until audio buffer underflows
90
+ #
91
+ # @return [AlsaOutput] Returns +self+.
64
92
  def drain
65
93
  end
66
94
 
67
- # Space available for writing in the audio buffer
95
+ # Space available for writing to the audio buffer
68
96
  #
69
97
  # @return [Integer] Number of audio samples which can be written to the audio
70
98
  # buffer.
@@ -80,10 +108,12 @@ module Hornetseye
80
108
  def delay
81
109
  end
82
110
 
83
- # Reset the sound device.
111
+ # Reset the sound device
84
112
  #
85
113
  # One needs to call this method if one wants to resume playing audio samples after
86
- # calling #drop or #drain.
114
+ # calling #drop.
115
+ #
116
+ # @return [AlsaOutput] Returns +self+.
87
117
  def prepare
88
118
  end
89
119
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 2
9
- version: 0.3.2
8
+ - 3
9
+ version: 0.3.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jan Wedekind