ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
visualization.h File Reference

Go to the source code of this file.

Macros

#define AUDIO_VISUALIZATION_SAMPLE_RATE   48000
#define AUDIO_VISUALIZATION_COLOR_STANDARD   0
#define AUDIO_VISUALIZATION_COLOR_DARKER   1
#define AUDIO_VISUALIZATION_COLOR_BRIGHTER   2

Enumerations

enum  audio_visualization_source_t {
  AUDIO_VISUALIZATION_SOURCE_MIC = 0 , AUDIO_VISUALIZATION_SOURCE_MEDIA , AUDIO_VISUALIZATION_SOURCE_REMOTE , AUDIO_VISUALIZATION_SOURCE_LOCAL_MIX ,
  AUDIO_VISUALIZATION_SOURCE_MIX , AUDIO_VISUALIZATION_SOURCE_COUNT
}

Functions

void audio_visualization_submit (audio_visualization_source_t source, const float *samples, size_t count)
void audio_visualization_submit_stereo (audio_visualization_source_t source, const float *samples, size_t count)
void audio_visualization_read (audio_visualization_source_t source, float *samples, size_t count)

Macro Definition Documentation

◆ AUDIO_VISUALIZATION_COLOR_BRIGHTER

#define AUDIO_VISUALIZATION_COLOR_BRIGHTER   2

◆ AUDIO_VISUALIZATION_COLOR_DARKER

#define AUDIO_VISUALIZATION_COLOR_DARKER   1

Definition at line 17 of file visualization.h.

Referenced by visualization_color_for_level().

◆ AUDIO_VISUALIZATION_COLOR_STANDARD

#define AUDIO_VISUALIZATION_COLOR_STANDARD   0

Definition at line 16 of file visualization.h.

◆ AUDIO_VISUALIZATION_SAMPLE_RATE

#define AUDIO_VISUALIZATION_SAMPLE_RATE   48000

Definition at line 14 of file visualization.h.

Referenced by audio_visualization_render_fft().

Enumeration Type Documentation

◆ audio_visualization_source_t

Enumerator
AUDIO_VISUALIZATION_SOURCE_MIC 
AUDIO_VISUALIZATION_SOURCE_MEDIA 
AUDIO_VISUALIZATION_SOURCE_REMOTE 
AUDIO_VISUALIZATION_SOURCE_LOCAL_MIX 
AUDIO_VISUALIZATION_SOURCE_MIX 
AUDIO_VISUALIZATION_SOURCE_COUNT 

Definition at line 5 of file visualization.h.

Function Documentation

◆ audio_visualization_read()

void audio_visualization_read ( audio_visualization_source_t source,
float * samples,
size_t count )

Definition at line 108 of file visualization.c.

108 {
109 if (!samples)
110 return;
112 memset(samples, 0, count * sizeof(float));
113 return;
114 }
115 static_mutex_lock_named(&history_mutex, "audio_visualization_history");
116 size_t available_count = count < VISUALIZATION_HISTORY ? count : VISUALIZATION_HISTORY;
117 size_t output_offset = count - available_count;
118 for (size_t i = 0; i < count; i++)
119 samples[i] = 0.0f;
120 size_t first_source = source;
121 size_t last_source = source;
123 first_source = AUDIO_VISUALIZATION_SOURCE_MIC;
126 first_source = AUDIO_VISUALIZATION_SOURCE_MIC;
128 }
129 for (size_t current = first_source; current <= last_source; current++) {
130 size_t start = (write_position[current] + VISUALIZATION_HISTORY - available_count) % VISUALIZATION_HISTORY;
131 for (size_t i = 0; i < available_count; i++)
132 samples[output_offset + i] += history[current][(start + i) % VISUALIZATION_HISTORY];
133 }
134 static_mutex_unlock(&history_mutex);
135 for (size_t i = 0; i < count; i++)
136 samples[i] = fmaxf(-1.0f, fminf(1.0f, samples[i]));
137}
audio_visualization_source_t source
Definition fft.c:24
#define VISUALIZATION_HISTORY

References AUDIO_VISUALIZATION_SOURCE_COUNT, AUDIO_VISUALIZATION_SOURCE_LOCAL_MIX, AUDIO_VISUALIZATION_SOURCE_MEDIA, AUDIO_VISUALIZATION_SOURCE_MIC, AUDIO_VISUALIZATION_SOURCE_MIX, AUDIO_VISUALIZATION_SOURCE_REMOTE, source, and VISUALIZATION_HISTORY.

Referenced by audio_visualization_render_fft(), and audio_visualization_render_waveform().

◆ audio_visualization_submit()

void audio_visualization_submit ( audio_visualization_source_t source,
const float * samples,
size_t count )

Definition at line 93 of file visualization.c.

93 {
94 if ((!GET_OPTION(waveform) && !GET_OPTION(fft)) || !samples || source < AUDIO_VISUALIZATION_SOURCE_MIC ||
96 return;
97 static_mutex_lock_named(&history_mutex, "audio_visualization_history");
98 size_t position = write_position[source];
99 for (size_t i = 0; i < count; i++) {
100 float sample = samples[i];
101 history[source][position] = isfinite(sample) ? fmaxf(-1.0f, fminf(1.0f, sample)) : 0.0f;
102 position = (position + 1) % VISUALIZATION_HISTORY;
103 }
104 write_position[source] = position;
105 static_mutex_unlock(&history_mutex);
106}
#define GET_OPTION(field)
Safely get a specific option field (lock-free read).
Definition options.h:1336

References AUDIO_VISUALIZATION_SOURCE_MIC, AUDIO_VISUALIZATION_SOURCE_REMOTE, GET_OPTION, source, and VISUALIZATION_HISTORY.

Referenced by audio_visualization_submit_stereo(), and mirror_submit_audio_samples().

◆ audio_visualization_submit_stereo()

void audio_visualization_submit_stereo ( audio_visualization_source_t source,
const float * samples,
size_t count )

Downmix interleaved stereo only for display analysis, preserving its sample clock.

Definition at line 78 of file visualization.c.

78 {
79 if (!samples || count % 2)
80 return;
81 float mono[480];
82 for (size_t offset = 0; offset < count;) {
83 size_t frames = (count - offset) / 2;
84 if (frames > 480)
85 frames = 480;
86 for (size_t i = 0; i < frames; i++)
87 mono[i] = samples[offset + i * 2] * 0.5f + samples[offset + i * 2 + 1] * 0.5f;
89 offset += frames * 2;
90 }
91}
void audio_visualization_submit(audio_visualization_source_t source, const float *samples, size_t count)

References audio_visualization_submit(), and source.

Referenced by audio_write_samples().