
Чи неправильно задокументований розмір аудіокадрів у `gpt-realtime-translate`?
https://ift.tt/H1C9uYe
Документація подій сервера реального часу перекладу API gpt-realtime-translate стверджує, що дельти аудіо на виході передаються потоком у кадрах по 200 мс аудіо PCM16, закодованого у Base64. Частота дискретизації як на вході, так і на виході дорівнює 24 кГц. Якщо мої обчислення вірні, 200 мс аудіо за 24 кГц мають дорівнювати 4800 зразкам на кадр.
Проте, після декодування Base64-рядка та конвертації байтів у масив NumPy, масив містить 9600 зразків, що дорівнює 400 мс аудіо за заданою частотою дискретизації.
Я використовую такий код, який адаптував із довідки з реального часу розмов для Python, щоб декодувати та конвертувати аудіо:
def pcm16_to_float(pcm16):
pcm16_iter = map(lambda x: x[0] / 32767, struct.iter_unpack("<h", pcm16))
return np.fromiter(pcm16_iter, dtype=np.float32)
def base64_decode_audio(encoded):
decoded = base64.b64decode(encoded)
float32_array = pcm16_to_float(decoded)
return float32_array
Спочатку мій код видавав помилку, оскільки я очікував лише 4800 зразків і виділяв відповідний буфер. Після збільшення розміру буфера до 9600 зразків я зміг відтворювати вихідне аудіо без спотворень.
Питання: чи я правильно декодую кадри, чи документація стверджує неправильний розмір кадра.
EDIT:
Я використовую такі функції для кодування аудіо, яке має бути у вигляді NumPy-масиву у форматі float32:
def float_to_pcm16(float32_array):
clipped = map(lambda x: max(-1.0, min(1.0, x)), float32_array)
pcm16 = b"".join(struct.pack("<h", int(x * 32767)) for x in clipped)
return pcm16
def base64_encode_audio(float32_array):
pcm_bytes = float_to_pcm16(float32_array)
encoded = base64.b64encode(pcm_bytes).decode("ascii")
return encoded
Також я провів два тести, щоб звузити джерело проблеми.
У першому тесті я згенерував масив випадкових даних, закодував та безпосередньо розкодував його за допомогою вищезазначених функцій. Окрім деяких неточностей через приведення типів, вхідний і вихідний масиви однакові. Це виключає моїEncoding/Decoding як джерело помилки.
Другий тест стосувався поведінки API. Я згенерував масив з 48 000 нулів (які трактуються як тиша) і відправив його як один фрагмент до API. За документацією цей фрагмент має бути розбитий на десять кадрів по 4800 зразків кожен (за припущенням вище 200 мс = 4800 зразків) і кожен кадр буде поміщено до черги обробки. На мою скромну думку, я повинен отримати десять (або трохи більше ніж десять, але точно не менше) кадрів, кожен містить 4800 зразків. А на моє здивування я отримав 16 кадрів по 9600 зразків кожен. Я отримав 3,2x більше зразків, ніж відправив, незважаючи на тишу.
З кожним кроком поведінка API стає все дивнішою.
HI-FI News
через OpenAI Developer Community – Останні пости https://ift.tt/hPg5yeK
Червень 15, 2026 о 23:54 PM
June 15, 2026 at 11:54PM

Залишити відповідь