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 __init__(
      self,
      in_channels,
      out_channels,
      hidden_channels,
      c_in_channels,
      params,
  ):
      super().__init__()
      # prenet
      self.prenet = torch.nn.Conv1d(
          in_channels, params["hidden_channels"], 1
      )
      # wavenet layers
      self.wn = WNBlocks(
          params["hidden_channels"],
          c_in_channels=c_in_channels,
          **params,
      )
      # postnet
      self.postnet = [
          torch.nn.Conv1d(
              params["hidden_channels"], hidden_channels, 1
          ),
          torch.nn.ReLU(),
          torch.nn.Conv1d(hidden_channels, hidden_channels, 1),
          torch.nn.ReLU(),
          torch.nn.Conv1d(hidden_channels, hidden_channels, 1),
          torch.nn.ReLU(),
          torch.nn.Conv1d(hidden_channels, out_channels, 1),
      ]
      self.postnet = nn.Sequential(*self.postnet)
  
imports: import torch
  from torch import nn
  from TTS.tts.layers.generic.res_conv_bn import Conv1dBN, Conv1dBNBlock, ResidualConv1dBNBlock
  from TTS.tts.layers.generic.transformer import FFTransformerBlock
  from TTS.tts.layers.generic.wavenet import WNBlocks
  from TTS.tts.layers.glow_tts.transformer import RelativePositionTransformer
label_desc: Use image node_id 1 to create a new WaveNetDecoder object from inherited base classes: nn with example: obj = WaveNetDecoder(in_channels, out_channels, hidden_channels, c_in_channels, params)