/**
 * Decodes the JSON object @c js to create a new value.
 *
 * @eg{
 *   {
 *     "samples" : [ -0.014525, 0.015363, 0.013679 ],
 *     "samplesPerSecond" : 44100.000000
 *   }
 * }
 */
VuoAudioSamples VuoAudioSamples_makeFromJson(json_object * js)
{
	VuoAudioSamples value = {0, NULL, 0};
	json_object *o = NULL;

	if (json_object_object_get_ex(js, "samples", &o))
	{
		int sampleCount = json_object_array_length(o);
		if (sampleCount)
		{
			value = VuoAudioSamples_alloc(sampleCount);

			for (VuoInteger i = 0; i < sampleCount; ++i)
				value.samples[i] = json_object_get_double(json_object_array_get_idx(o, i));
		}
		else
		{
			value.sampleCount = 0;
			value.samples = NULL;
		}
	}

	if (json_object_object_get_ex(js, "samplesPerSecond", &o))
		value.samplesPerSecond = VuoReal_makeFromJson(o);

	return value;
}
Beispiel #2
0
					 "dependencies" : [
						 "VuoAudio"
					 ],
					 "node": {
						 "isInterface" : false,
						 "exampleCompositions" : [ "PanAudio.vuo" ],
					 }
				 });

void nodeEvent
(
		VuoInputData(VuoList_VuoAudioSamples) audioSamples,
		VuoOutputData(VuoAudioSamples) mixedSamples
)
{
	unsigned int channelCount = VuoListGetCount_VuoAudioSamples(audioSamples);

	*mixedSamples = VuoAudioSamples_alloc(VuoAudioSamples_bufferSize);

	for(unsigned int n = 0; n < (*mixedSamples).sampleCount; n++)
		(*mixedSamples).samples[n] = 0.;

	for(unsigned int i = 0; i < channelCount; i++)
	{
		VuoAudioSamples as = VuoListGetValueAtIndex_VuoAudioSamples(audioSamples, i+1);

		for(unsigned int n = 0; n < as.sampleCount; n++)
			(*mixedSamples).samples[n] += as.samples[n];
	}
}