NEPHILIM_NS_BEGIN

////////////////////////////////////////////////////////////////////////////////
bool SoundBufferRecorder::onStart()
{
    m_samples.clear();
    m_buffer = SoundBuffer();

    return true;
}
Exemple #2
0
void MainWindow::exportWAVImpl(Sound::AudioStream *sound, Common::WriteStream &wav) {
	assert(sound);

	const uint16 channels = sound->getChannels();
	const uint32 rate     = sound->getRate();

	std::deque<SoundBuffer> buffers;

	uint64 length = getSoundLength(sound);
	if (length != Sound::RewindableAudioStream::kInvalidLength)
		buffers.resize((length / (SoundBuffer::kBufferSize / channels)) + 1);

	uint32 samples = 0;
	std::deque<SoundBuffer>::iterator buffer = buffers.begin();
	while (!sound->endOfStream()) {
		if (buffer == buffers.end()) {
			buffers.push_back(SoundBuffer());
			buffer = --buffers.end();
		}

		buffer->samples = sound->readBuffer(buffer->buffer, SoundBuffer::kBufferSize);

		if (buffer->samples > 0)
			samples += buffer->samples;

		++buffer;
	}

	samples /= channels;

	const uint32 dataSize   = samples * channels * 2;
	const uint32 byteRate   = rate * channels * 2;
	const uint16 blockAlign = channels * 2;

	wav.writeUint32BE(MKTAG('R', 'I', 'F', 'F'));
	wav.writeUint32LE(36 + dataSize);
	wav.writeUint32BE(MKTAG('W', 'A', 'V', 'E'));

	wav.writeUint32BE(MKTAG('f', 'm', 't', ' '));
	wav.writeUint32LE(16);
	wav.writeUint16LE(1);
	wav.writeUint16LE(channels);
	wav.writeUint32LE(rate);
	wav.writeUint32LE(byteRate);
	wav.writeUint16LE(blockAlign);
	wav.writeUint16LE(16);

	wav.writeUint32BE(MKTAG('d', 'a', 't', 'a'));
	wav.writeUint32LE(dataSize);

	for (std::deque<SoundBuffer>::const_iterator b = buffers.begin(); b != buffers.end(); ++b)
		for (int i = 0; i < b->samples; i++)
			wav.writeUint16LE(b->buffer[i]);
}
int							SoundContainer::addProducer(int id)
{
	this->_lockOutput->lock();
	++this->_producerCount;
	std::map<int, SoundBuffer>::iterator it = this->_voices.find(id);
	if (it != this->_voices.end())
	{
		throw std::exception();
		this->_lockOutput->unLock();
	}
	this->_voices[id] = SoundBuffer();
	this->_lockOutput->unLock();
	return (1);
}
Exemple #4
0
CSound*
CFModExDriver::getFmodExSound(const std::string& filename,const bool& stream) {

    FMOD_SOUND* resultingSound = 0;

    TLoadedSounds::iterator i = _sounds.find( filename );

/*
    for(TLoadedSounds::iterator i(_sounds.begin()),end(_sounds.end()); i != end; ++i){
        if( i->second.sound == _sounds.end() ){

    }
*/
    // If
    if( i == _sounds.end() ){

        _INFO << "Sound [" << filename << "] not loaded yet";

        resultingSound = loadFmodExSound( filename, false );

        if( ! resultingSound ){
            //return i->second;
            _LOG_ERROR << "Could not load sound [" << filename << "]";
            return 0;
        }
        else {

            //i =
            _INFO << "Audio file [" << filename << "] loaded";
            std::pair<TLoadedSounds::iterator,bool> result = _sounds.insert( std::make_pair( filename, SoundBuffer(resultingSound) ) ) ;
            i = result.first;
        }
    }
    else {

        i->second.references++;
    }



    CSound* sound = new CSound( *this, i->second.getSound(), filename );
    // Adds a reference toward the sound
    return sound ;
}