Найти Π² Π”Π·Π΅Π½Π΅

πŸ’¬Π‘ΠΎΠ·Π΄Π°ΡŽ свой Ρ‡Π°Ρ‚ Π½Π° Python. Аудиозвонки ΠΈ ΠΊΠΎΠ΄Π΅ΠΊ Opus. Π§Π°ΡΡ‚ΡŒ 2

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! На связи Π΅Π½ΠΎΡ‚ΠΈΠΊ 🦝 И сСгодня Π² этой ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ (с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°) я ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ создания своСго πŸ’¬ Ρ‡Π°Ρ‚Π° Π½Π° Python. БСгодня я расскаТу ΠΊΠ°ΠΊ Ρƒ мСня ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊ Π² Python ΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Opus. Π‘ΠΏΠ΅Ρ€Π²Π° нСбольшоС прСдисловиС 🫠 Π― Ρ…ΠΎΡ‚Π΅Π» Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части стати ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ вСсь процСсс записи, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π°ΡƒΠ΄ΠΈΠΎ. Но Π² процСссС написания ΡΡ‚Π°Ρ‚ΡŒΠΈ понял, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½Ρƒ это всё Π½Π΅ Π²Π»Π΅Π·Π΅Ρ‚ Π΄Π° ΠΈ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ 🫣 Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этой части ΠΌΡ‹ рассмотрим запись ΠΈ сТатиС записанного Π·Π²ΡƒΠΊΠ°. Π’ своСй ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π°Ρ‡Π°Π» Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ создании своСго Ρ‡Π°Ρ‚Π° с нуля Π½Π° Python. Π’ Π½Π΅ΠΉ я ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ описал возмоТности Ρ‡Π°Ρ‚Π° ΠΈ Ρ‡Π΅Π³ΠΎ всё Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ. БСгодня я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° Π°ΡƒΠ΄ΠΈΠΎΠ·Π²ΠΎΠ½ΠΊΠ°Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ… созданиС отняло Ρƒ мСня Π»ΡŒΠ²ΠΈΠ½ΡƒΡŽ долю Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Ρ‚ΠΎ, ΠΊΠ°ΠΊ я Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π²ΠΎΠ½ΠΊΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°ΡƒΠ΄ΠΈΠΎ, Π·Π°ΠΊΠΈΠ΄Π°Π΅Ρ‚ мСня камнями. НС Π½Π°Π΄ΠΎ, позялувста, я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ‡ΡƒΡΡŒ 😌 ΠŸΠ΅Ρ€Π΅Π΄ΠΎ ΠΌΠ½ΠΎΠΉ стояла Π·Π°Π΄Π°Ρ‡Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π³
ОглавлСниС

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! На связи Π΅Π½ΠΎΡ‚ΠΈΠΊ 🦝 И сСгодня Π² этой ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ (с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°) я ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ создания своСго πŸ’¬ Ρ‡Π°Ρ‚Π° Π½Π° Python. БСгодня я расскаТу ΠΊΠ°ΠΊ Ρƒ мСня ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊ Π² Python ΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Opus.

Π‘ΠΏΠ΅Ρ€Π²Π° нСбольшоС прСдисловиС 🫠 Π― Ρ…ΠΎΡ‚Π΅Π» Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части стати ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ вСсь процСсс записи, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π°ΡƒΠ΄ΠΈΠΎ. Но Π² процСссС написания ΡΡ‚Π°Ρ‚ΡŒΠΈ понял, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½Ρƒ это всё Π½Π΅ Π²Π»Π΅Π·Π΅Ρ‚ Π΄Π° ΠΈ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ 🫣 Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этой части ΠΌΡ‹ рассмотрим запись ΠΈ сТатиС записанного Π·Π²ΡƒΠΊΠ°.

πŸŒŠΠ²Π’ΠΎΠ΄Π½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

Π’ своСй ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π°Ρ‡Π°Π» Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ создании своСго Ρ‡Π°Ρ‚Π° с нуля Π½Π° Python. Π’ Π½Π΅ΠΉ я ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ описал возмоТности Ρ‡Π°Ρ‚Π° ΠΈ Ρ‡Π΅Π³ΠΎ всё Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ.

БСгодня я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° Π°ΡƒΠ΄ΠΈΠΎΠ·Π²ΠΎΠ½ΠΊΠ°Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ… созданиС отняло Ρƒ мСня Π»ΡŒΠ²ΠΈΠ½ΡƒΡŽ долю Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π›ΡŽΠ±ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Ρ‚ΠΎ, ΠΊΠ°ΠΊ я Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π²ΠΎΠ½ΠΊΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°ΡƒΠ΄ΠΈΠΎ, Π·Π°ΠΊΠΈΠ΄Π°Π΅Ρ‚ мСня камнями. НС Π½Π°Π΄ΠΎ, позялувста, я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ‡ΡƒΡΡŒ 😌

ΠŸΠ΅Ρ€Π΅Π΄ΠΎ ΠΌΠ½ΠΎΠΉ стояла Π·Π°Π΄Π°Ρ‡Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ голос Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python, Π΄Π° Π΅Ρ‰Ρ‘ ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ для Π½Π°Ρ‡Π°Π»Π° разбСрСмся ΠΊΠ°ΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°ΡƒΠ΄ΠΈΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Аудиозвонок (ΠΈΠ»ΠΈ Π°ΡƒΠ΄ΠΈΠΎΠΏΠΎΡ‚ΠΎΠΊ) - это нСпрСрывная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹Ρ… ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² Π°ΡƒΠ΄ΠΈΠΎ ΠΏΠΎ сСти ΠΎΡ‚ отправитСля ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ. ΠšΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹Π΅ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ Π΅Ρ‰Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‡Π°Π½ΠΊΠ°ΠΌΠΈ, Π² контСкстС Π°ΡƒΠ΄ΠΈΠΎΠ·Π²ΠΎΠ½ΠΊΠ° - Π°ΡƒΠ΄ΠΈΠΎΡ‡Π°Π½ΠΊΠ°ΠΌΠΈ. Аудиочанк - это ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ Π·Π²ΡƒΠΊΠ° (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 20 миллисСкунд).

πŸ’‘ И Ссли ΠΎΠ΄ΠΈΠ½ Π°ΡƒΠ΄ΠΈΠΎΡ‡Π°Π½ΠΊ это 20 мс, Ρ‚ΠΎ 1 сСкунда Π°ΡƒΠ΄ΠΈΠΎ это 50 Ρ‚Π°ΠΊΠΈΡ… Ρ‡Π°Π½ΠΊΠΎΠ².

Ну, ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ понятнСС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ эти ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹Π΅ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ Π°ΡƒΠ΄ΠΈΠΎ Π² Python.

πŸŽ™ΠšΠ°ΠΊ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ голос Π² Python?

Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° PyAudio, которая ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ваш ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½ Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€.

УстанавливаСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· PIP:

pip install pyaudio

Π”Π°Π»Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ PyAudio:

import pyaudio
pa = pyaudio.PyAudio()

ПослС Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° записи:

input_stream = pa.open(
format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=960,
stream_callback=record_chunk
)

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ разбСрСмся Ρ‡Ρ‚ΠΎ Π·Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° записи:

  • format β€” это Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π²ΡƒΠΊΠ°. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠΎΠ½ΠΎ Π°ΡƒΠ΄ΠΈΠΎ 16 Π±ΠΈΡ‚.
  • channels β€” количСство Π°ΡƒΠ΄ΠΈΠΎΠΊΠ°Π½Π°Π»ΠΎΠ². Π£ нас это ΠΌΠΎΠ½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Π½Π°Π».
  • rate β€” частота дискрСтизации, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ количСство Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ сигнала Π² сСкунду. Π’ нашСм случаС это 16000 Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ Π² сСкунду. Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ этот ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ качСство Π·Π²ΡƒΠΊΠ°.
  • input = True β€” ΠΏΠΎΡ‚ΠΎΠΊ настроСн Π½Π° запись Π·Π²ΡƒΠΊΠ°.
  • frames_per_buffer β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‡Π°Π½ΠΊΠ° Π² Π±Π°ΠΉΡ‚Π°Ρ….
  • stream_callback β€” ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся послС записи ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π°Π½ΠΊΠ°.

Как ΡƒΠ·Π½Π°Ρ‚ΡŒ какая Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π»ΠΈΠ½Π½Π° Ρƒ записанного Ρ‡Π°Π½ΠΊΠ°? ΠœΡ‹ Π·Π½Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‡Π°Π½ΠΊΠ° ΠΈ частоту дискрСтизации. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Ρ‡Π°Π½ΠΊΠ°, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ частоту дискрСтизации Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‡Π°Π½ΠΊΠ°.

Π£ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π΄Π»ΠΈΠ½Π°:

16000/960=16.6 мс.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° записи Π·Π²ΡƒΠΊΠ° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² консоль Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π°Π½ΠΊΠ°, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Ρƒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ всСх записанных Ρ‡Π°Π½ΠΊΠΎΠ² (ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² дальнСйшСм).

-2

Π§Ρ‚ΠΎ Π² этом ΠΊΠΎΠ΄Π΅ происходит? Π― Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΏΠΎΡ‚ΠΎΠΊ записи Π·Π²ΡƒΠΊΠ° с ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Callback Ρ‡Π°Π½ΠΊΠΈ с ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½Π° ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ ΠΈΡ… Π² массив record_data. А Π² бСсконСчном Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду Π²Ρ‹Π²ΠΎΠΆΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива record_data Π² Π±Π°ΠΉΡ‚Π°Ρ….

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ получаСтся ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

-3

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π·Π° 12 сСкунд записи Ρƒ нас Π²Ρ‹ΡˆΠ»ΠΎ 382 тысячи Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ 382 Кб. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π²Π½ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ сСти. Если ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎ сСти, Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΠΎ ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ Π² самом Π°ΡƒΠ΄ΠΈΠΎ. Π”Π° ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° ΡΠ΅Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ сильная. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ эти Ρ‡Π°Π½ΠΊΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ, Π±Π»Π°Π³ΠΎ для этого ΡƒΠΆΠ΅ созданы Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ΄Π΅ΠΊΠΈ. НапримСр ΠΌΡ‹ рассмотрим использованиС ΠΊΠΎΠ΄Π΅ΠΊΠ° Opus.

πŸ”ˆΠ§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Opus ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ сТимаСт Π°ΡƒΠ΄ΠΈΠΎ?

Opus (Ρ€Π°Π½Π΅Π΅ извСстный ΠΊΠ°ΠΊ Harmony) β€” это Π°ΡƒΠ΄ΠΈΠΎΠΊΠΎΠ΄Π΅ΠΊ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для сТатия Π·Π²ΡƒΠΊΠ° с потСрями. Он идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для использования Π² прилоТСниях, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π² прилоТСниях для аудиосвязи.

Opus (ΠΊΠΎΠ΄Π΅ΠΊ) β€” ВикипСдия

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄Π΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ популярных мСссСндТСров Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π²ΠΎΠ½ΠΊΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Telegram. И для создания Π°ΡƒΠ΄ΠΈΠΎΠ·Π²ΠΎΠ½ΠΊΠΎΠ² Π² своСм Ρ‡Π°Ρ‚Π΅ я Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Opus. Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄Π΅ΠΊ ΡƒΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ условия сСти: Ссли соСдинСниС Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π·Π²ΡƒΠΊ Π² высоком качСствС, Π° Ссли ΡΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π° β€” сниТаСт качСство, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ.

Как ΠΆΠ΅ Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности ΠΊΠΎΠ΄Π΅ΠΊΠ° Opus Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π° Python. Для этого Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°-мост ΠΌΠ΅ΠΆΠ΄Ρƒ Opus ΠΈ Python opuslib-next. УстанавливаСтся эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· PIP:

pip install opuslib-next

Π”Π°Π»Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Opus

encoder = opuslib_next.Encoder(
fs=16000, # Частота записи (16 ΠΊΠ“Ρ† достаточно для Ρ€Π΅Ρ‡ΠΈ)
channels=1, # Один канал (моно)
application='voip' # РСТим для голосовой связи
)

НСкоторыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π°ΠΌ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹:

  • sample_rate - частота дискрСтизации (ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρƒ записываСмого Π·Π²ΡƒΠΊΠ°, Ρƒ нас это 16000)
  • channels - количСство ΠΊΠ°Π½Π°Π»ΠΎΠ² записи (Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ записываСмому Π·Π²ΡƒΠΊΡƒ, Ρƒ нас ΠΌΠΎΠ½ΠΎ, поэтому 1)
  • application - это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Ρ€Π΅ΠΆΠΈΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π·Π²ΡƒΠΊΠ° (Π² нашСм случаС voip ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ максимальноС сТатиС для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ голоса Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ)

НС зря я написал Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° opuslib-next являСтся мостом ΠΌΠ΅ΠΆΠ΄Ρƒ Python ΠΈ Opus. Для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ΄Π΅ΠΊΠΎΠΌ Opus Π½Π°ΠΌ Π΅Ρ‰Ρ‘ потрСбуСтся сама Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° opus.dll. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собираСтся ΠΈΠ· исходников, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π°ΠΉΡ‚ΠΈ Π΅Ρ‘ Π² сСти Π² ΡƒΠΆΠ΅ собранном Π²ΠΈΠ΄Π΅. Π― ΠΊΠ°ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π»ΡŽΠ±ΡΡ‰ΠΈΠΉ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅, слоТности, собрал Π΅Ρ‘ ΠΈΠ· исходников.

GitHub - xiph/opus: Modern audio compression for the internet.

Если Π±ΡƒΠ΄Π΅Ρ‚ интСрСсно, Π΄Π° ΠΈ Ρƒ мСня Π±ΡƒΠ΄Π΅Ρ‚ врСмя, ΠΎΠΏΠΈΡˆΡƒ процСсс сборки Opus для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ОБ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ своСго Ρ‡Π°Ρ‚Π° для Windows, Linux ΠΈ macOS я собирал эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ОБ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π”ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠ΄ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π»Π΅ΠΆΠΈΡ‚ рядом с исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ. ДобавляСм Encoder ΠΎΡ‚ Opus ΠΈ провСряСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

-4

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ записанныС Ρ‡Π°Π½ΠΊΠΈ Π² record_data ΠΌΡ‹ ΠΈΡ… сТимаСм Ρ‡Π΅Ρ€Π΅Π· Opus. ΠœΠ΅Ρ‚ΠΎΠ΄ encoder.encode() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Π³Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°: Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΆΠ°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ этих Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚. Π΅. Ρ€Π°Π·ΠΌΠ΅Ρ€ записанного Ρ‡Π°Π½ΠΊΠ°). И Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ вСсьма Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‚.

-5

Π—Π° Ρ‚Π΅ ΠΆΠ΅ 12 сСкунд Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Ρ‹ΡˆΠ»ΠΎ 19,7 Кб, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 20 Ρ€Π°Π· мСньшС!

Π­Ρ‚ΠΎ лишь ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ всСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π°ΡƒΠ΄ΠΈΠΎΠ·Π²ΠΎΠ½ΠΊΠΎΠ². ΠŸΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСсколько статСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. БСйчас ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ запись ΠΈ сТатиС Π°ΡƒΠ΄ΠΈΠΎΡ‡Π°Π½ΠΊΠΎΠ². Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠ°ΠΊΠ΅Ρ‚, ΡƒΠΊΠ°Π·Π°Π² получатСля, ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° сСрвСр-рСтранслятор (ΠΏΠΎΡ‡Π΅ΠΌΡƒ рСтранслятор - расскаТу Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…). Π’Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с Π°ΡƒΠ΄ΠΈΠΎΡ‡Π°Π½ΠΊΠ°ΠΌΠΈ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСкомпрСссии ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† воспроизвСдСниС.

Помимо этого, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

  • βœ… ΡƒΡΠΈΠ»Π΅Π½ΠΈΡŽ громкости (ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ),
  • βœ… ΡˆΡƒΠΌΠΎΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡŽ (Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ),
  • ⏳ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ),
  • πŸ›‘ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ компСнсации эха (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ AEC Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρƒ мСня Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ сих ΠΏΠΎΡ€).
Как Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ выглядит интСрфСйс ΠΌΠΎΠ΅Π³ΠΎ Ρ‡Π°Ρ‚Π°
Как Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ выглядит интСрфСйс ΠΌΠΎΠ΅Π³ΠΎ Ρ‡Π°Ρ‚Π°

А Π½Π° сСгодня всё! Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… я ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ процСсс Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°ΡƒΠ΄ΠΈΠΎΠ·Π²ΠΎΠ½ΠΊΠΎΠ² πŸ”Š Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… публикациях, Ссли интСрСсно, ΠΎΠΏΠΈΡˆΡƒ процСсс ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ (Π½Π΅Π΄Π°Π²Π½ΠΎ Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ).

Бпасибо Π·Π° ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅! 🦝 ВсСм ΡƒΠ΄Π°Ρ‡ΠΈ! НадСюсь Π±Ρ‹Π»ΠΎ интСрСсно

-7