use crate::models::wavenet::common::WAVENET_MAX_NUM_FRAMES;
use super::super::super::params::A2_NUM_LAYERS;
use super::super::a2_prewarm_common;
use super::WaveNetA2;
impl<const CH: usize> WaveNetA2<CH> {
#[cold]
pub fn prewarm(&mut self) {
a2_prewarm_common(
A2_NUM_LAYERS,
self.receptive_field_size,
&mut self.layer_buffers,
&self.layer_ring_sizes,
&mut self.layer_buffer_starts,
&mut self.layer_in,
&mut self.head_accum,
&mut self.head_write_pos,
);
if self.has_weights() {
let prewarm_samples = self.receptive_field_size;
let block = WAVENET_MAX_NUM_FRAMES;
let zeros = [0.0f32; WAVENET_MAX_NUM_FRAMES];
let mut discard = [0.0f32; WAVENET_MAX_NUM_FRAMES];
let mut remaining = prewarm_samples;
while remaining > 0 {
let nf = remaining.min(block);
self.process(&zeros[..nf], &mut discard[..nf]);
remaining -= nf;
}
}
}
}