Что такое куски, образцы и кадры при использовании pyaudio

Пройдя документацию по pyaudio и прочитав некоторые другие статьи в Интернете, я не понимаю, правильно ли я понимаю.

Вот код для аудиозаписи, найденный на сайте pyaudio:

import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

print("* recording")

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

print("* done recording")

stream.stop_stream()
stream.close()
p.terminate()

и если я добавлю эти строки, я смогу воспроизвести все, что записал:

play=pyaudio.PyAudio()
stream_play=play.open(format=FORMAT,
                      channels=CHANNELS,
                      rate=RATE,
                      output=True)
for data in frames: 
    stream_play.write(data)
stream_play.stop_stream()
stream_play.close()
play.terminate()
«СКОРОСТЬ» - это количество выборок в секунду.«CHUNK» - это количество кадров в буфере.Каждый кадр будет иметь 2 сэмпла как «CHANNELS = 2».Размер каждой выборки составляет 2 байта, рассчитывается с помощью функции:pyaudio.get_sample_size(pyaudio.paInt16).Поэтому размер каждого кадра составляет 4 байта.В списке «frames» размер каждого элемента должен быть 1024 * 4 байта, например, размерframes[0] должно быть 4096 байт. Тем не мение,sys.getsizeof(frames[0]) возвращается4133, ноlen(frames[0]) возвращается4096.for цикл выполняетсяint(RATE / CHUNK * RECORD_SECONDS) раз я не могу понять, почему.Вот на тот же вопрос ответил "Рубен Санчес", но я не уверен, правильно ли он говоритCHUNK=bytes, И согласно его объяснению, это должно бытьint(RATE / (CHUNK*2) * RECORD_SECONDS) как(CHUNK*2) количество выборок, прочитанных в буфере за каждую итерациюНаконец, когда я пишуprint frames[0], он печатает тарабарщину, пытаясь обработать строку в кодировке ASCII, а это не просто поток байтов. Итак, как мне распечатать этот поток байтов в шестнадцатеричном формате, используяstruct модуль? И если позже я заменим каждое шестнадцатеричное значение на значения по своему выбору, будет ли оно воспроизводить воспроизводимый звук?

Все, что я написал выше, было моим пониманием вещей, и многие из них, возможно, ошибались.

Ответы на вопрос(1)

Ваш ответ на вопрос