Ce sont des morceaux, des échantillons et des images lors de l'utilisation de pyaudio

Après la documentation de pyaudio et de la lecture de certains articles sur le web, je suis confus si ma compréhension est correcte.

C'est le code pour l'enregistrement audio trouvé sur pyaudio du site:

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()

et si j'ajoute ces lignes alors que je suis en mesure de jouer tout ce que j'ai enregistré:

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()
  1. "TAUX" est le nombre d'échantillons prélevés par seconde.
  2. "BLOC" est le nombre d'images dans la mémoire tampon.
  3. Chaque image aura 2 échantillons comme des "CANAUX=2".
  4. La taille de chaque échantillon est de 2 octets, calculée à l'aide de la fonction: pyaudio.get_sample_size(pyaudio.paInt16).
  5. Donc la taille de chaque image est de 4 octets.
  6. Dans les "cadres" de la liste, la taille de chaque élément doit être de 1024*4 octets, par exemple, la taille de frames[0] doit être de 4096 octets. Cependant,
    sys.getsizeof(frames[0]) retourne 4133, mais len(frames[0]) retourne 4096.
  7. for boucle s'exécute int(RATE /CHUNK * RECORD_SECONDS) fois, je ne peux pas comprendre pourquoi. Ici est la même réponse à la question par "Ruben Sanchez" mais je ne peux pas être sûr si son correct comme il le dit CHUNK=bytes. Et selon ses explications, il doit être int(RATE /(CHUNK*2) * RECORD_SECONDS) comme (CHUNK*2) est le nombre d'échantillons lire dans un tampon à chaque itération.
  8. Enfin, quand j'écris print frames[0], il imprime le charabia qu'il essaie de traiter la chaîne ASCII codé qui elle ne l'est pas, c'est juste un flux d'octets. Alors, comment puis-je imprimer ce flux d'octets en hexadécimal en utilisant struct module? Et si plus tard, j'ai chaque changement de la valeur hexadécimale avec les valeurs de mon choix, il sera toujours produire un jouable de son?

Ce que j'ai écrit ci-dessus a été ma compréhension des choses et beaucoup d'entre eux peut-être tort.

OriginalL'auteur shiva | 2016-03-13