class_docstr: GramVaaniDownloader downloads a GramVaani dataset.
  Args:
    gram_vaani_csv (GramVaaniCSV): A GramVaaniCSV representing the data to download
    target_dir (str): The path to download the data to
  Attributes:
      data (:class:`pandas.DataFrame`): `pandas.DataFrame` Containing the GramVaani csv data
code: def _download(
      self, audio_url, transcript, audio_length, mp3_directory
  ):
      if audio_url == "audio_url":
          return
      mp3_filename = os.path.join(
          mp3_directory, os.path.basename(audio_url)
      )
      if not os.path.exists(mp3_filename):
          _logger.debug("Downloading mp3 file...%s", audio_url)
          urllib.request.urlretrieve(audio_url, mp3_filename)
      else:
          _logger.debug("Already downloaded mp3 file...%s", audio_url)
  
imports: import csv
  import logging
  import math
  import os
  import subprocess
  import urllib
  from pathlib import Path
  import pandas
  from sox import Transformer
  import swifter
  from deepspeech_training.util.importers import get_importers_parser, get_validate_label
label_desc: Use image node_id 4 for calling the GramVaaniDownloader obj's underlying member method code with example usage: obj._download(audio_url, transcript, audio_length, mp3_directory) without return types