class_docstr: WaveNet based decoder with a prenet and a postnet.
  
  prenet: conv1d_1x1
  postnet: 3 x [conv1d_1x1 -> relu] -> conv1d_1x1
  
  TODO: Integrate speaker conditioning vector.
  
  Note:
      default wavenet parameters;
          params = {
              "num_blocks": 12,
              "hidden_channels":192,
              "kernel_size": 5,
              "dilation_rate": 1,
              "num_layers": 4,
              "dropout_p": 0.05
          }
  
  Args:
      in_channels (int): number of input channels.
      out_channels (int): number of output channels.
      hidden_channels (int): number of hidden channels for prenet and postnet.
      params (dict): dictionary for residual convolutional blocks.
class_docstr_tok: ["WaveNet","based","decoder","with","a","prenet","and","a","postnet",".","prenet",":","conv1d_1x1","postnet",":","3","x","[","conv1d_1x1","-",">","relu","]","-",">","conv1d_1x1","TODO",":","Integrate","speaker","conditioning","vector",".","Note",":","default","wavenet","parameters",";","params","=","{","``","num_blocks","''",":","12",",","``","hidden_channels","''",":192",",","``","kernel_size","''",":","5",",","``","dilation_rate","''",":","1",",","``","num_layers","''",":","4",",","``","dropout_p","''",":","0.05","}","Args",":","in_channels","(","int",")",":","number","of","input","channels",".","out_channels","(","int",")",":","number","of","output","channels",".","hidden_channels","(","int",")",":","number","of","hidden","channels","for","prenet","and","postnet",".","params","(","dict",")",":","dictionary","for","residual","convolutional","blocks","."]
code: def forward(self, x, x_mask=None, g=None):
      x = self.prenet(x) * x_mask
      x = self.wn(x, x_mask, g)
      o = self.postnet(x) * x_mask
      return o
  
imports: import torch
  from torch import nn
  from TTS.tts.layers.generic.res_conv_bn import Conv1dBNBlock, ResidualConv1dBNBlock, Conv1dBN
  from TTS.tts.layers.generic.wavenet import WNBlocks
  from TTS.tts.layers.glow_tts.transformer import RelativePositionTransformer
label_desc: Use image node_id 2 for calling the WaveNetDecoder obj's underlying member method code with example usage: obj.forward(x, x_mask, g) and returns: o