Объединить две base64 строки (полученые через запись с микрофона)

Происходит запись с микрофона. От клиента я получаю чанки голоса в виде обычной base64 строки.

Мне нужно объединить их и отправить в Google API одной строкой base64 на распознавание речи. Грубо говоря в первом чанке закодировано слово Hello, а во втором world!. Мне нужно склеить два чанка, отправить их в гугл апи одной строкой и получить в ответе Hello world!

Необходимо сделать что-то подобное.

https://cloud.google.com/speech-to-text

Google также отправляет данные с микрофона в строке base64 с помощью веб-сокетов (см. Network)

К сожалению, микрофона под рукой у меня нет - проверить не могу. А делать надо сейчас.

Предположим, я получаю

chunk1 = "TgvsdUvK...."
chunk2 = "UZZxgh5V...."

Нашёл вот такой вот ответ. https://stackoverflow.com/questions/37278521

Верно ли я понимаю, что достаточно будет просто

base64.b64encode(chunk1 + chunk2))

Или нужно что-то ещё знать? К сожалению, всё упирается в отсутствие микрофона(


Ответы (2 шт):

Автор решения: m0nte-cr1st0
import base64

string1_base64 = 'U3RyaW5nQQ=='  # StringA
string2_base64 = 'U3RyaW5nQg=='  # StringB

# need to convert the strings to bytes first in order to decode them
base64_string1_bytes = string1_base64.encode('ascii')
base64_string2_bytes = string2_base64.encode('ascii')

# now, decode them into the actual bytes the base64 represents
base64_string1_bytes_decoded = base64.decodebytes(base64_string1_bytes)
base64_string2_bytes_decoded = base64.decodebytes(base64_string2_bytes)

# combine the bytes together
combined_bytes = base64_string1_bytes_decoded + base64_string2_bytes_decoded

# now, encode these bytes as base64
combined_bytes_base64 = base64.encodebytes(combined_bytes)

# finally, decode these bytes so you're left with a base64 string:
combined_bytes_base64_string = combined_bytes_base64.decode('ascii')
print(combined_bytes_base64_string) # output: U3RyaW5nQVN0cmluZ0I=

# let's prove that it concatenated successfully
base64_combinedstring_bytes = combined_bytes_base64_string.encode('ascii')
base64_combinedstring_bytes_decoded_bytes = base64.decodebytes(base64_combinedstring_bytes)
base64_combinedstring_bytes_decoded_string = base64_combinedstring_bytes_decoded_bytes.decode('ascii')
print(base64_combinedstring_bytes_decoded_string) # output: StringAStringB

Для n строк

import base64

input_strings = ['U3RyaW5nQQ==', 'U3RyaW5nQg==']
input_strings_bytes = [input_string.encode('ascii') for input_string in input_strings]
input_strings_bytes_decoded = [base64.decodebytes(input_string_bytes) for input_string_bytes in input_strings_bytes]
combined_bytes = bytes()
for decoded in input_strings_bytes_decoded:
    combined_bytes += decoded
combined_bytes_base64 = base64.encodebytes(combined_bytes)
combined_bytes_base64_string = combined_bytes_base64.decode('ascii')
print(combined_bytes_base64_string) # output: U3RyaW5nQVN0cmluZ0I=
→ Ссылка
Автор решения: Nikolay L

Вы можете добавить к первой строке вторую, если первая не заканчивается на '==' или '=', в остальных случаях нужно перекодировать. Может поможет такая фишка что строки кодируются без "=", если их длинна кратна 3, т.е. "Hello world!" разбить например по 6 символов на: 'Hello ','world!', после кодировки они склеются нормально. Но обычно это делается для файлов 20 мб. Далее такие ссылки становятся громоздкими, и что и будь падает другое

→ Ссылка