MCPcopy Create free account
hub / github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI / audio_callback

Method audio_callback

gui_v1.py:667–818  ·  view source on GitHub ↗

音频处理

(
            self, indata: np.ndarray, outdata: np.ndarray, frames, times, status
        )

Source from the content-addressed store, hash-verified

665 printt("ENDing VC")
666
667 def audio_callback(
668 self, indata: np.ndarray, outdata: np.ndarray, frames, times, status
669 ):
670 """
671 音频处理
672 """
673 start_time = time.perf_counter()
674 indata = librosa.to_mono(indata.T)
675 if self.gui_config.threhold > -60:
676 rms = librosa.feature.rms(
677 y=indata, frame_length=4 * self.zc, hop_length=self.zc
678 )
679 db_threhold = (
680 librosa.amplitude_to_db(rms, ref=1.0)[0] < self.gui_config.threhold
681 )
682 for i in range(db_threhold.shape[0]):
683 if db_threhold[i]:
684 indata[i * self.zc : (i + 1) * self.zc] = 0
685 self.input_wav[: -self.block_frame] = self.input_wav[
686 self.block_frame :
687 ].clone()
688 self.input_wav[-self.block_frame :] = torch.from_numpy(indata).to(
689 self.config.device
690 )
691 self.input_wav_res[: -self.block_frame_16k] = self.input_wav_res[
692 self.block_frame_16k :
693 ].clone()
694 # input noise reduction and resampling
695 if self.gui_config.I_noise_reduce and self.function == "vc":
696 input_wav = self.input_wav[
697 -self.crossfade_frame - self.block_frame - 2 * self.zc :
698 ]
699 input_wav = self.tg(
700 input_wav.unsqueeze(0), self.input_wav.unsqueeze(0)
701 )[0, 2 * self.zc :]
702 input_wav[: self.crossfade_frame] *= self.fade_in_window
703 input_wav[: self.crossfade_frame] += (
704 self.nr_buffer * self.fade_out_window
705 )
706 self.nr_buffer[:] = input_wav[-self.crossfade_frame :]
707 input_wav = torch.cat(
708 (self.res_buffer[:], input_wav[: self.block_frame])
709 )
710 self.res_buffer[:] = input_wav[-2 * self.zc :]
711 self.input_wav_res[-self.block_frame_16k - 160 :] = self.resampler(
712 input_wav
713 )[160:]
714 else:
715 self.input_wav_res[-self.block_frame_16k - 160 :] = self.resampler(
716 self.input_wav[-self.block_frame - 2 * self.zc :]
717 )[160:]
718 # infer
719 if self.function == "vc":
720 f0_extractor_frame = self.block_frame_16k + 800
721 if self.gui_config.f0method == "rmvpe":
722 f0_extractor_frame = (
723 5120 * ((f0_extractor_frame - 1) // 5120 + 1) - 160
724 )

Callers

nothing calls this directly

Calls 2

printtFunction · 0.70
inferMethod · 0.45

Tested by

no test coverage detected