Is the `gpt-realtime-translate` audio frame size documented incorrectly?

від

у

Чи неправильно задокументований розмір аудіокадрів у `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


Коментарі

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

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *