Class: ALSA::PCM::HwParameters

Inherits:
Object
  • Object
show all
Defined in:
lib/alsa/pcm/hw_parameters.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(device = nil) ⇒ HwParameters

Returns a new instance of HwParameters.



6
7
8
9
10
11
12
13
# File 'lib/alsa/pcm/hw_parameters.rb', line 6

def initialize(device = nil)
  hw_params_pointer = FFI::MemoryPointer.new :pointer

  ALSA::PCM::Native::hw_params_malloc hw_params_pointer        
  self.handle = hw_params_pointer.read_pointer

  self.device = device if device
end

Instance Attribute Details

#deviceObject

Returns the value of attribute device.



4
5
6
# File 'lib/alsa/pcm/hw_parameters.rb', line 4

def device
  @device
end

#handleObject

Returns the value of attribute handle.



4
5
6
# File 'lib/alsa/pcm/hw_parameters.rb', line 4

def handle
  @handle
end

Instance Method Details

#access=(access) ⇒ Object



33
34
35
36
37
# File 'lib/alsa/pcm/hw_parameters.rb', line 33

def access=(access)
  ALSA::try_to "set access type" do
    ALSA::PCM::Native::hw_params_set_access self.device.handle, self.handle, ALSA::PCM::Native::Access.const_get(access.to_s.upcase)
  end
end

#buffer_sizeObject



180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/alsa/pcm/hw_parameters.rb', line 180

def buffer_size
  value = nil
  ALSA::try_to "get buffer size" do
    value_pointer = FFI::MemoryPointer.new(:int)
    error_code = ALSA::PCM::Native::hw_params_get_buffer_size self.handle, value_pointer
    value = value_pointer.read_int

    value_pointer.free

    error_code
  end
  value
end

#buffer_size_for(frame_count) ⇒ Object



194
195
196
# File 'lib/alsa/pcm/hw_parameters.rb', line 194

def buffer_size_for(frame_count)
  ALSA::PCM::Native::format_size(self.sample_format, frame_count) * self.channels
end

#buffer_time=(buffer_time) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/alsa/pcm/hw_parameters.rb', line 97

def buffer_time=(buffer_time)
  ALSA::try_to "set buffer time (#{buffer_time})" do
    value = FFI::MemoryPointer.new(:int)
    value.write_int(buffer_time)

    dir = FFI::MemoryPointer.new(:int)
    dir.write_int(-1)
    error_code = ALSA::PCM::Native::hw_params_set_buffer_time_near self.device.handle, self.handle, value, dir

    value.free
    dir.free

    error_code
  end
end

#channelsObject



150
151
152
153
154
155
156
157
158
159
# File 'lib/alsa/pcm/hw_parameters.rb', line 150

def channels
  channels = nil
  FFI::MemoryPointer.new(:int) do |channels_pointer|
    ALSA::try_to "get channels" do
      ALSA::PCM::Native::hw_params_get_channels self.handle, channels_pointer
    end
    channels = channels_pointer.read_int
  end
  channels
end

#channels=(channels) ⇒ Object



39
40
41
42
43
# File 'lib/alsa/pcm/hw_parameters.rb', line 39

def channels=(channels)
  ALSA::try_to "set channel count : #{channels}" do
    ALSA::PCM::Native::hw_params_set_channels self.device.handle, self.handle, channels
  end
end

#current_for_deviceObject



26
27
28
29
30
31
# File 'lib/alsa/pcm/hw_parameters.rb', line 26

def current_for_device
  ALSA::try_to "retrieve current hardware parameters" do
    ALSA::PCM::Native::hw_params_current device.handle, self.handle
  end
  self
end

#default_for_deviceObject



19
20
21
22
23
24
# File 'lib/alsa/pcm/hw_parameters.rb', line 19

def default_for_device
  ALSA::try_to "initialize hardware parameter structure" do
    ALSA::PCM::Native::hw_params_any device.handle, self.handle
  end
  self
end

#frame_count_for(byte_count) ⇒ Object



198
199
200
# File 'lib/alsa/pcm/hw_parameters.rb', line 198

def frame_count_for(byte_count)
  ALSA::PCM::Native::bytes_to_frames(self.device.handle, byte_count)
end

#freeObject



202
203
204
205
206
# File 'lib/alsa/pcm/hw_parameters.rb', line 202

def free
  ALSA::try_to "unallocate hw_params" do
    ALSA::PCM::Native::hw_params_free self.handle
  end
end

#inspectObject



208
209
210
# File 'lib/alsa/pcm/hw_parameters.rb', line 208

def inspect
  "#<ALSA::PCM::HwParameters:#{object_id} sample_rate=#{sample_rate}, channels=#{channels}, period_time=#{period_time}, period_size=#{period_size}, buffer_size=#{buffer_size}>"
end

#period_sizeObject



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/alsa/pcm/hw_parameters.rb', line 161

def period_size
  value = nil
  ALSA::try_to "get period size" do
    value_pointer = FFI::MemoryPointer.new(:int)
    dir_pointer = FFI::MemoryPointer.new(:int)
    dir_pointer.write_int(0)

    error_code = ALSA::PCM::Native::hw_params_get_period_size self.handle, value_pointer, dir_pointer

    value = value_pointer.read_int

    value_pointer.free
    dir_pointer.free

    error_code
  end
  value
end

#period_timeObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/alsa/pcm/hw_parameters.rb', line 78

def period_time
  value = nil
  ALSA::try_to "get period time" do
    value_pointer = FFI::MemoryPointer.new(:int)
    dir_pointer = FFI::MemoryPointer.new(:int)
    dir_pointer.write_int(0)

    error_code = ALSA::PCM::Native::hw_params_get_period_time self.handle, value_pointer, dir_pointer

    value = value_pointer.read_int

    value_pointer.free
    dir_pointer.free

    error_code
  end
  value
end

#period_time=(period_time) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/alsa/pcm/hw_parameters.rb', line 62

def period_time=(period_time)
  ALSA::try_to "set period time (#{period_time})" do
    value = FFI::MemoryPointer.new(:int)
    value.write_int(period_time)

    dir = FFI::MemoryPointer.new(:int)
    dir.write_int(-1)
    error_code = ALSA::PCM::Native::hw_params_set_period_time_near self.device.handle, self.handle, value, dir

    value.free
    dir.free

    error_code
  end
end

#sample_formatObject



139
140
141
142
143
144
145
146
147
148
# File 'lib/alsa/pcm/hw_parameters.rb', line 139

def sample_format
  format = nil
  FFI::MemoryPointer.new(:int) do |format_pointer|
    ALSA::try_to "get sample format" do
      ALSA::PCM::Native::hw_params_get_format self.handle, format_pointer
    end
    format = format_pointer.read_int
  end
  format
end

#sample_format=(sample_format) ⇒ Object



133
134
135
136
137
# File 'lib/alsa/pcm/hw_parameters.rb', line 133

def sample_format=(sample_format)
  ALSA::try_to "set sample format" do
    ALSA::PCM::Native::hw_params_set_format self.device.handle, self.handle, ALSA::PCM::Native::Format.const_get(sample_format.to_s.upcase)
  end
end

#sample_rateObject



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/alsa/pcm/hw_parameters.rb', line 113

def sample_rate
  rate = nil
  ALSA::try_to "get sample rate" do
    rate_pointer = FFI::MemoryPointer.new(:int)

    dir_pointer = FFI::MemoryPointer.new(:int)
    dir_pointer.write_int(0)

    error_code = ALSA::PCM::Native::hw_params_get_rate self.handle, rate_pointer, dir_pointer

    rate = rate_pointer.read_int

    rate_pointer.free
    dir_pointer.free

    error_code
  end
  rate
end

#sample_rate=(sample_rate) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/alsa/pcm/hw_parameters.rb', line 45

def sample_rate=(sample_rate)
  ALSA::try_to "set sample rate" do
    rate = FFI::MemoryPointer.new(:int)
    rate.write_int(sample_rate)

    dir = FFI::MemoryPointer.new(:int)
    dir.write_int(0)

    error_code = ALSA::PCM::Native::hw_params_set_rate_near self.device.handle, self.handle, rate, dir

    rate.free
    dir.free

    error_code
  end
end

#update_attributes(attributes) ⇒ Object



15
16
17
# File 'lib/alsa/pcm/hw_parameters.rb', line 15

def update_attributes(attributes)
  attributes.each_pair { |name, value| send("#{name}=", value) }
end