Class: WSK::Model::WaveReader
- Inherits:
-
CachedBufferReader
- Object
- CachedBufferReader
- WSK::Model::WaveReader
- Defined in:
- lib/WSK/Model/WaveReader.rb
Overview
Implement a Wave file reader using a raw buffer reader. Buffers returned are of type list<Integer>.
Constant Summary collapse
- NBR_CHANNEL_SAMPLES_PER_BUFFER =
Number of channel samples per buffer.
Integer
2097152
Instance Method Summary collapse
-
#extract_sub_buffer(iBuffer, iIdxStartSample, iIdxEndSample) ⇒ Object
Extract a sub-buffer for the given index range.
-
#get_nbr_samples ⇒ Object
Get the total number of samples.
-
#get_nbr_samples_per_buffer ⇒ Object
Get the number of samples read per buffer.
-
#initialize(iRawReader, iHeader) ⇒ WaveReader
constructor
Constructor.
-
#read_buffer(iIdxStartSample, iIdxEndSample) ⇒ Object
Read a buffer.
Methods inherited from CachedBufferReader
#each_buffer, #each_reverse_buffer, #get_current_buffer, #prepare_buffer
Constructor Details
#initialize(iRawReader, iHeader) ⇒ WaveReader
Constructor
- Parameters
-
iRawReader (CachedBufferReader): The reader that provides raw data
-
iHeader (WSK::Model::Header): Corresponding file header
25 26 27 28 |
# File 'lib/WSK/Model/WaveReader.rb', line 25 def initialize(iRawReader, iHeader) @RawReader, @Header = iRawReader, iHeader super() end |
Instance Method Details
#extract_sub_buffer(iBuffer, iIdxStartSample, iIdxEndSample) ⇒ Object
Extract a sub-buffer for the given index range
- Parameters
-
iBuffer (Object): The buffer to extract from
-
iIdxStartSample (Integer): Index of the first sample to begin with
-
iIdxEndSample (Integer): Index of the last sample to end with
- Return
-
Object: The sub buffer
83 84 85 |
# File 'lib/WSK/Model/WaveReader.rb', line 83 def extract_sub_buffer(iBuffer, iIdxStartSample, iIdxEndSample) return iBuffer[iIdxStartSample*@Header.NbrChannels..(iIdxEndSample+1)*@Header.NbrChannels-1] end |
#get_nbr_samples ⇒ Object
Get the total number of samples
- Return
-
Integer: Total number of samples
42 43 44 |
# File 'lib/WSK/Model/WaveReader.rb', line 42 def get_nbr_samples return @RawReader.get_nbr_samples end |
#get_nbr_samples_per_buffer ⇒ Object
Get the number of samples read per buffer
- Return
-
Integer: Nnumber of samples in 1 buffer
34 35 36 |
# File 'lib/WSK/Model/WaveReader.rb', line 34 def get_nbr_samples_per_buffer return NBR_CHANNEL_SAMPLES_PER_BUFFER/@Header.NbrChannels end |
#read_buffer(iIdxStartSample, iIdxEndSample) ⇒ Object
Read a buffer
- Parameters
-
iIdxStartSample (Integer): Index of the first sample to begin with
-
iIdxEndSample (Integer): Index of the last sample to end with
- Return
-
Object: The corresponding buffer
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/WSK/Model/WaveReader.rb', line 53 def read_buffer(iIdxStartSample, iIdxEndSample) lRawBuffer = nil lNbrSamplesToRead = iIdxEndSample - iIdxStartSample + 1 @RawReader.each_buffer(iIdxStartSample, iIdxEndSample) do |iBuffer, iNbrSamples| if (lRawBuffer == nil) if (lNbrSamplesToRead == iNbrSamples) # We have the buffer directly. No copy. lRawBuffer = iBuffer else # We will need to concatenate other buffers. Clone it. lRawBuffer = iBuffer.clone end else # Concatenate lRawBuffer.concat(iBuffer) end end log_debug "Decode samples [#{iIdxStartSample} - #{iIdxEndSample}]" return @Header.getDecodedSamples(lRawBuffer, lNbrSamplesToRead) end |