Как создать аудио (.wav) для кафки в одном сообщении - PullRequest
3 голосов
/ 02 ноября 2019

Чтобы применить речевую аналитику в реальном времени, используя технологии больших данных, я пытаюсь использовать KAFKA в начале. Поэтому сначала я конвертирую файл .wav в байты с помощью WAVIO API, а затем отправляю сообщения, содержащие [data (тип nparray), rate (integer) и sampwidth (integer)] в kafka, после того как эти сообщения будут использованы потребителем, который преобразуетих снова в файл .wav.

Проблема в том, как я могу отправить и получить эти [данные, скорость, объем выборки] в и из kafka в одном сообщении (каждое сообщение представляет файл .wav)?

Для производителя:

    producer = KafkaProducer(bootstrap_servers='localhost:9092')
    x = wav2bytes("bush_read") # return tuple containing(data, rate, sampwidth)
    #here I'm sending 3 messages
    producer.send("TestTopic", key=b'data', value=b'%s' % (x[0])) # data -> nparray
    producer.send("TestTopic", key=b'rate', value=b'%d' % (x[1]))   # rate -> int
    producer.send("TestTopic", key=b'sampwidth', value=b'%d' % (x[2]))  #sampwidth -> int
    send("TestTopic","bush_read")

Для потребителя:

    for message in consumer:
        msg = message     # I want somthing like this
        file = bytes2wav("name", msg.data, msg.rate, msg.sampwidth )

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Вы можете отправить его как json (или любую другую сериализацию), если хотите, создайте json, например

{'data' : data, 'rate': rate, 'sampwidth': sampwidth}

, и вы можете десериализовать его в потребителе

0 голосов
/ 03 ноября 2019

Просто еще одна мысль !!

Если файл .wav достаточно большой, это может создать нагрузку на брокера, что может замедлить работу кластера. Этого можно избежать, опубликовав справочные сообщения рядом с полным большим файлом.

  1. Храните большой файл в том месте, где внешнее хранилище
  2. Публикуйте мета-ссылку файла в теме, указываяв местоположение сохраненного файла
  3. Потребитель может использовать ссылку и найти файл во внешнем хранилище.
...