Class: WSK::OutputInterfaces::DirectStream
- Inherits:
-
Object
- Object
- WSK::OutputInterfaces::DirectStream
- Defined in:
- lib/WSK/OutputInterfaces/DirectStream.rb
Constant Summary collapse
- BUFFER_SIZE =
Here we define the buffer size. The buffer will be used to store contiguous audio data in RAM. Each OutputData object will never use more than this size. It is expressed in bytes.
Integer 2097152
Instance Method Summary collapse
-
#each_buffer(iIdxBeginSample, iIdxEndSample) ⇒ Object
Loop on a range of samples split into buffers.
-
#finalize ⇒ Object
Finalize writing.
-
#initInterface(oFile, iHeader, iNbrOutputDataSamples) ⇒ Object
Initialize the plugin.
-
#pushBuffer(iBuffer) ⇒ Object
Add a buffer.
-
#pushRawBuffer(iRawBuffer) ⇒ Object
Add a raw buffer.
-
#pushSample(iSampleData) ⇒ Object
Add a sample data.
Instance Method Details
#each_buffer(iIdxBeginSample, iIdxEndSample) ⇒ Object
Loop on a range of samples split into buffers
- Parameters
-
iIdxBeginSample (Integer): The beginning sample
-
iIdxEndSample (Integer): The ending sample
-
CodeBlock: The code called for each buffer:
-
iIdxBeginBufferSample (Integer): The beginning of this buffer’s sample
-
iIdxEndBufferSample (Integer): The ending of this buffer’s sample
-
109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/WSK/OutputInterfaces/DirectStream.rb', line 109 def each_buffer(iIdxBeginSample, iIdxEndSample) lIdxBeginBufferSample = iIdxBeginSample while (lIdxBeginBufferSample <= iIdxEndSample) lIdxEndBufferSample = lIdxBeginBufferSample + @NbrSamplesPerBuffer - 1 if (lIdxEndBufferSample > iIdxEndSample) lIdxEndBufferSample = iIdxEndSample end yield(lIdxBeginBufferSample, lIdxEndBufferSample) lIdxBeginBufferSample = lIdxEndBufferSample + 1 end end |
#finalize ⇒ Object
Finalize writing
- Return
-
Integer: The number of samples written
51 52 53 54 55 56 57 |
# File 'lib/WSK/OutputInterfaces/DirectStream.rb', line 51 def finalize if (!@Buffer.empty?) flushBuffer end return @NbrSamplesWritten end |
#initInterface(oFile, iHeader, iNbrOutputDataSamples) ⇒ Object
Initialize the plugin
- Parameters
-
oFile (IO): The file descriptor. Don’t use it externally as long as it is used by this class.
-
iHeader (WSK::Model::Header): Corresponding file header
-
iNbrOutputDataSamples (Integer): The number of output data samples
- Return
-
Exception: An error, or nil in case of success
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/WSK/OutputInterfaces/DirectStream.rb', line 27 def initInterface(oFile, iHeader, iNbrOutputDataSamples) rError = nil @File, @Header, @NbrSamples = oFile, iHeader, iNbrOutputDataSamples @NbrSamplesWritten = 0 # Size of a sample # Integer @SampleSize = (@Header.NbrChannels*@Header.NbrBitsPerSample)/8 # Compute the number of samples to store in the buffer @NbrSamplesPerBuffer = BUFFER_SIZE/@SampleSize # The position of the last written sample in the buffer # Integer @IdxCurrentBufferSample = 0 # The buffer itself, list of channels values # list< Integer > @Buffer = [] return rError end |
#pushBuffer(iBuffer) ⇒ Object
Add a buffer
- Parameters
-
iBuffer (list<Integer>): The list of channel values for this buffer
77 78 79 80 81 82 83 84 85 |
# File 'lib/WSK/OutputInterfaces/DirectStream.rb', line 77 def pushBuffer(iBuffer) # Write data in the current buffer @Buffer += iBuffer @IdxCurrentBufferSample += iBuffer.size/@Header.NbrChannels if (@IdxCurrentBufferSample >= @NbrSamplesPerBuffer) # We have to flush the buffer flushBuffer end end |
#pushRawBuffer(iRawBuffer) ⇒ Object
Add a raw buffer
- Parameters
-
iRawBuffer (String): The raw buffer
91 92 93 94 95 96 97 98 99 |
# File 'lib/WSK/OutputInterfaces/DirectStream.rb', line 91 def pushRawBuffer(iRawBuffer) # First, flush eventually remaining buffer to encode if (!@Buffer.empty?) flushBuffer end # Then write our raw buffer @File.write(iRawBuffer) updateProgress(iRawBuffer.size/@SampleSize) end |
#pushSample(iSampleData) ⇒ Object
Add a sample data
- Parameters
-
iSampleData (list<Integer>): The list of channel values for this sample
63 64 65 66 67 68 69 70 71 |
# File 'lib/WSK/OutputInterfaces/DirectStream.rb', line 63 def pushSample(iSampleData) # Write data in the buffer @Buffer += iSampleData @IdxCurrentBufferSample += 1 if (@IdxCurrentBufferSample == @NbrSamplesPerBuffer) # We have to flush the buffer flushBuffer end end |