mirror of
https://github.com/valentderah/totk-pc-recomp.git
synced 2026-11-11 01:41:02 +00:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37 lines
2.2 KiB
C
37 lines
2.2 KiB
C
/* Additional DSP effects. Wire layouts and algorithms follow Ryujinx.Audio
|
|
(MIT, third_party/licenses/Ryujinx-Audio.txt). No device or guest-memory access. */
|
|
#pragma once
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
typedef struct {
|
|
uint8_t input[6], output[6]; uint16_t channel_max, channels;
|
|
uint32_t delay_max, delay, sample_rate, in_gain, feedback, out_gain, dry_gain, spread, lowpass;
|
|
uint8_t status;
|
|
} AudrenDelayParam;
|
|
typedef struct {
|
|
uint8_t input[6], output[6]; uint16_t channel_max, channels;
|
|
int32_t sample_rate, early_mode, early_gain, pre_delay, late_mode, late_gain,
|
|
decay, hf_decay, coloration, reverb_gain, out_gain, dry_gain;
|
|
uint8_t status;
|
|
} AudrenReverbParam;
|
|
typedef struct {
|
|
uint8_t input[6], output[6]; uint16_t channel_max, channels; int32_t sample_rate;
|
|
float threshold, ratio; int32_t attack_time, release_time;
|
|
float input_gain, attack, release, output_gain;
|
|
uint8_t status, makeup, statistics, reset_statistics;
|
|
} AudrenCompressorParam;
|
|
typedef struct { uint8_t input[24], output[24]; float volume[24]; uint32_t count; } AudrenBufferMixParam;
|
|
typedef struct { uint8_t input[6], output[6]; int16_t numerator[3], denominator[2]; uint8_t channels, status; } AudrenBiquadEffectV1;
|
|
typedef struct { uint8_t input[6], output[6]; uint32_t padding; float numerator[3], denominator[2]; uint8_t channels, status; uint16_t reserved; } AudrenBiquadEffectV2;
|
|
_Static_assert(offsetof(AudrenDelayParam,status)==52,"delay wire layout");
|
|
_Static_assert(offsetof(AudrenReverbParam,status)==64,"reverb wire layout");
|
|
_Static_assert(offsetof(AudrenCompressorParam,status)==52,"compressor wire layout");
|
|
_Static_assert(sizeof(AudrenBufferMixParam)==148,"buffer-mix wire layout");
|
|
_Static_assert(sizeof(AudrenBiquadEffectV1)==24 && sizeof(AudrenBiquadEffectV2)==40,"biquad wire layouts");
|
|
typedef struct AudioEffectDsp AudioEffectDsp;
|
|
AudioEffectDsp *audio_effect_create(unsigned type, const void *param, unsigned revision);
|
|
void audio_effect_free(AudioEffectDsp *s);
|
|
void audio_effect_update(AudioEffectDsp *s, const void *param);
|
|
void audio_effect_process(AudioEffectDsp *s, float *const input[6], float *const output[6], int frames);
|
|
void audio_effect_statistics(AudioEffectDsp *s, void *output, unsigned bytes);
|