예제 #1
0
    void AudioPlayer::play(const AudioData& data) {
	if (_stream == NULL)
	    initStream(data.format());
	if (!Pa_IsStreamActive(_stream))
	    Pa_StartStream(_stream);
	std::lock_guard<std::mutex> lock(_mutex);
	_buffer.write((Byte*)data.frames(), (Byte*)data.frames() + (data.nbFrames() * data.format().frameSize()));
    }
예제 #2
0
void AudioResampleImpl::splitAudioData(AudioData & data, boost::scoped_array<char*> & split) const
{
	auto dataFormat = data.format();

	if (dataFormat.isPlanar())
	{
		/// Для планарного формата необходимо представить данные из result
		const int numChannels = dataFormat.channelCount();
		split.reset(new char*[numChannels]);
		split_ref(data.begin(), data.end(), data.numBytes() / numChannels, split.get());
	}
	else
	{
		/// Interleaved данные помещаются в один массив
		split.reset(new char*[1]);
		split[0] = data.data();
	}
}