Exemplo n.º 1
0
    void appendBuffer( AudioBuffer* aBuffer )
    {
        int bufferSize = aBuffer->bufferSize;

        if ( DiskWriter::cachedBuffer == 0 )
            generateOutputBuffer();

        // TODO: currently MONO ONLY !!
        SAMPLE_TYPE* channelBuffer = aBuffer->getBufferForChannel( 0 );
        int writerIndex       = DiskWriter::outputWriterIndex;
        int MAX_VALUE         = 32767; // convert floats to shorts

        // write floats as short values
        for ( int i = 0; i < bufferSize; ++i )
        {
            short int sample = ( short int )( channelBuffer[ i ] * MAX_VALUE );

            if ( sample > MAX_VALUE )
                sample = MAX_VALUE;

            else if ( sample < -MAX_VALUE )
                sample = -MAX_VALUE;

            DiskWriter::cachedBuffer[ writerIndex + i ] = sample;
        }
        DiskWriter::outputWriterIndex = writerIndex + bufferSize;
    }
Exemplo n.º 2
0
    /**
     * prepare a new iteration of recording
     */
    void prepare( std::string aOutputDir, int aBufferSize, int amountOfChannels )
    {
        outputDirectory  = aOutputDir;
        outputBufferSize = aBufferSize;

        generateOutputBuffer( amountOfChannels );
    }
Exemplo n.º 3
0
    /**
     * append a AudioBuffer into the write buffer
     */
    void appendBuffer( AudioBuffer* aBuffer )
    {
        int bufferSize    = aBuffer->bufferSize;
        int channelAmount = aBuffer->amountOfChannels;

        if ( DiskWriter::cachedBuffer == 0 )
            generateOutputBuffer();

        int writerIndex = DiskWriter::outputWriterIndex;
        int MAX_VALUE   = 32767; // convert samples to shorts

        // write samples into PCM short buffer
        for ( int i = 0; i < bufferSize; ++i, writerIndex += channelAmount )
        {
            for ( int c = 0; c < channelAmount; ++c )
            {
                SAMPLE_TYPE* channelBuffer = aBuffer->getBufferForChannel( c );

                short int sample = ( short int )( channelBuffer[ i ] * MAX_VALUE );

                if ( sample > MAX_VALUE )
                    sample = MAX_VALUE;

                else if ( sample < -MAX_VALUE )
                    sample = -MAX_VALUE;

                DiskWriter::cachedBuffer[ writerIndex + c ] = sample;
            }
        }
        DiskWriter::outputWriterIndex = writerIndex;
    }
Exemplo n.º 4
0
    /**
     * append an AudioBuffer into the write buffer
     */
    void appendBuffer( AudioBuffer* aBuffer )
    {
        int bufferSize    = aBuffer->bufferSize;
        int channelAmount = aBuffer->amountOfChannels;

        if ( cachedBuffer == 0 )
            generateOutputBuffer( channelAmount );

        cachedBuffer->mergeBuffers( aBuffer, 0, outputWriterIndex, MAX_PHASE );
        outputWriterIndex += bufferSize;
    }
Exemplo n.º 5
0
    /**
     * append the actual output buffer from the engine
     * into the write buffer
     */
    void appendBuffer( float* aBuffer, int aBufferSize, int amountOfChannels )
    {
        if ( cachedBuffer == 0 )
            generateOutputBuffer( amountOfChannels );

        // write samples into cache buffers

        for ( int i = 0, c = 0; i < aBufferSize; ++i, ++outputWriterIndex, c += amountOfChannels )
        {
            for ( int ci = 0; ci < amountOfChannels; ++ci )
                cachedBuffer->getBufferForChannel( ci )[ outputWriterIndex ] = aBuffer[ c + ci ];
        }
    }