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