Was sind chunks, Muster und Rahmen bei Verwendung von pyaudio

Nachdem sich durch die Dokumentation der pyaudio und Lesen einige andere Artikel auf dem web, ich bin verwirrt, wenn mein Verständnis richtig ist.

Dies ist der code für die audio-Aufnahme finden Sie auf pyaudio Website:

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

und wenn ich diese Zeilen dann bin ich in der Lage zu spielen, was ich aufgezeichnet:

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. "RATE" ist die Anzahl der Proben pro Sekunde.
  2. "CHUNK" ist die Anzahl der Bilder in den Puffer.
  3. Jedem frame werden 2 Proben als "CHANNELS=2".
  4. Größe jeder Probe wird 2 bytes, berechnet die Funktion: pyaudio.get_sample_size(pyaudio.paInt16).
  5. Daher die Größe der einzelnen Rahmen aus 4 bytes.
  6. In den "frames" - Liste, die Größe der einzelnen Elemente muss 1024*4 bytes, zum Beispiel, die Größe der frames[0] werden müssen, 4096 bytes. Allerdings
    sys.getsizeof(frames[0]) zurück 4133, aber len(frames[0]) zurück 4096.
  7. for Schleife int(RATE /CHUNK * RECORD_SECONDS) mal, ich kann nicht verstehen, warum. Hier ist die gleiche Frage beantwortet, die von "Ruben Sanchez", aber ich kann nicht sicher sein, wenn es richtig ist, wie er sagt CHUNK=bytes. Und nach seiner Erklärung, es muss int(RATE /(CHUNK*2) * RECORD_SECONDS) als (CHUNK*2) ist die Anzahl der Proben, Lesen Sie in einem Puffer mit jeder iteration.
  8. Schließlich, wenn ich schreiben print frames[0] es druckt Kauderwelsch, wie es versucht zu behandeln-string, der ASCII-kodierten was es nicht ist, es ist nur ein Strom von bytes. So wie Drucke ich diesen stream von bytes in hexadezimal mit struct Modul? Und wenn ich später ändern Sie den hexadezimal-Wert mit Werte meine Wahl, wird es noch eine spielbare Ton?

Was ich oben schrieb, war mein Verständnis der Dinge, und viele von Ihnen vielleicht falsch.

InformationsquelleAutor shiva | 2016-03-13
Schreibe einen Kommentar