Lines Matching full:signal
44 * To make sure the audio signal doesn't contain noise, #audio_signal_detect
83 * @channels: The number of channels to use for the signal
84 * @sampling_rate: The sampling rate to use for the signal
86 * Allocate and initialize an audio signal structure with the given parameters.
88 * Returns: A newly-allocated audio signal structure
92 struct audio_signal *signal; in audio_signal_init() local
97 signal = calloc(1, sizeof(struct audio_signal)); in audio_signal_init()
98 signal->sampling_rate = sampling_rate; in audio_signal_init()
99 signal->channels = channels; in audio_signal_init()
100 return signal; in audio_signal_init()
105 * @signal: The target signal structure
106 * @frequency: The frequency to add to the signal
110 * Add a frequency to the signal.
114 int audio_signal_add_frequency(struct audio_signal *signal, int frequency, in audio_signal_add_frequency() argument
117 size_t index = signal->freqs_count; in audio_signal_add_frequency()
121 igt_assert(channel < signal->channels); in audio_signal_add_frequency()
125 if (frequency > signal->sampling_rate / 2) { in audio_signal_add_frequency()
127 "sampling rate\n", frequency, signal->sampling_rate); in audio_signal_add_frequency()
133 * signal generation, instead of recurrent calls to sin(). in audio_signal_add_frequency()
135 frequency = signal->sampling_rate / (signal->sampling_rate / frequency); in audio_signal_add_frequency()
140 freq = &signal->freqs[index]; in audio_signal_add_frequency()
145 signal->freqs_count++; in audio_signal_add_frequency()
152 * @signal: The target signal structure
154 * Synthesize the data tables for the audio signal, that can later be used
156 * freed with a call to audio_signal_clean when the signal is no longer used.
158 void audio_signal_synthesize(struct audio_signal *signal) in audio_signal_synthesize() argument
166 for (i = 0; i < signal->freqs_count; i++) { in audio_signal_synthesize()
167 freq = signal->freqs[i].freq; in audio_signal_synthesize()
168 period_len = signal->sampling_rate / freq; in audio_signal_synthesize()
173 value = 2.0 * M_PI * freq / signal->sampling_rate * j; in audio_signal_synthesize()
179 signal->freqs[i].period = period; in audio_signal_synthesize()
180 signal->freqs[i].period_len = period_len; in audio_signal_synthesize()
187 * Release the signal.
189 void audio_signal_fini(struct audio_signal *signal) in audio_signal_fini() argument
191 audio_signal_reset(signal); in audio_signal_fini()
192 free(signal); in audio_signal_fini()
197 * @signal: The target signal structure
202 void audio_signal_reset(struct audio_signal *signal) in audio_signal_reset() argument
206 for (i = 0; i < signal->freqs_count; i++) { in audio_signal_reset()
207 free(signal->freqs[i].period); in audio_signal_reset()
210 signal->freqs_count = 0; in audio_signal_reset()
213 static size_t audio_signal_count_freqs(struct audio_signal *signal, int channel) in audio_signal_count_freqs() argument
219 for (i = 0; i < signal->freqs_count; i++) { in audio_signal_count_freqs()
220 freq = &signal->freqs[i]; in audio_signal_count_freqs()
230 * Make sure our generated signal is not messed up. In particular, make sure
234 * We want the signal to be powerful enough to be able to hear something. We
235 * want the signal not to reach 1.0 so that we're sure it won't get capped by
258 * @signal: The target signal structure
263 * signal data (in interleaved double format), at the requested sampling rate
268 void audio_signal_fill(struct audio_signal *signal, double *buffer, in audio_signal_fill() argument
278 memset(buffer, 0, sizeof(double) * signal->channels * samples); in audio_signal_fill()
280 for (i = 0; i < signal->channels; i++) { in audio_signal_fill()
281 freqs_per_channel[i] = audio_signal_count_freqs(signal, i); in audio_signal_fill()
285 for (i = 0; i < signal->freqs_count; i++) { in audio_signal_fill()
286 freq = &signal->freqs[i]; in audio_signal_fill()
293 dst = buffer + total * signal->channels; in audio_signal_fill()
303 for (k = 0; k < signal->channels; k++) { in audio_signal_fill()
307 dst[j * signal->channels + k] += in audio_signal_fill()
316 audio_sanity_check(buffer, signal->channels * samples); in audio_signal_fill()
326 * Checks that frequencies specified in signal, and only those, are included
332 bool audio_signal_detect(struct audio_signal *signal, int sampling_rate, in audio_signal_detect() argument
349 /* Apply a Hann window to the input signal, to reduce frequency leaks in audio_signal_detect()
350 * due to the endpoints of the signal being discontinuous. in audio_signal_detect()
409 for (i = 0; i < signal->freqs_count; i++) in audio_signal_detect()
442 for (j = 0; j < signal->freqs_count; j++) { in audio_signal_detect()
443 if (signal->freqs[j].channel >= 0 && in audio_signal_detect()
444 signal->freqs[j].channel != channel) in audio_signal_detect()
447 if (signal->freqs[j].freq > in audio_signal_detect()
449 signal->freqs[j].freq < in audio_signal_detect()
460 if (j == signal->freqs_count) { in audio_signal_detect()
478 for (i = 0; i < signal->freqs_count; i++) { in audio_signal_detect()
479 if (signal->freqs[i].channel >= 0 && in audio_signal_detect()
480 signal->freqs[i].channel != channel) in audio_signal_detect()
485 signal->freqs[i].freq); in audio_signal_detect()