Hier ist mein Code. Idealerweise sollten sowohl struct.unpack und encode ('hex') als auch die Rückkehr zu int genau dasselbe sein?Wie dekodiert man eine 16-Bit-ASCII-Daten zu einer Ganzzahl, wenn Sie es in einer Zeichenfolge von 2 Zeichen in Python mit Struct-Modul haben?
INPUT -
Aber sie sind nicht das gleiche in diesem Fall, wenn Sie eine .wav-Datei geben mit nchannels = 1, samplewidth = 2, Framerate = 44100, COMPTYPE = "None" , compname = "Nicht komprimiert"
SAMPLE OUTPUT -
-15638 == EAC2 == 27330
-15302 3ac4 == == 15044
-14.905 c7c5 == == 18373
-14.449 8fc7 == == 4039
Die linken und rechten Handseite sollte gleich sein Recht?
import wave
import sys
import struct
audiofile = wave.open(sys.argv[1], 'r')
# reading a file (normal file open)
print audiofile.getparams()
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
for i in range(audiofile.getnframes()):
frame = audiofile.readframes(1)
# reading each frame (Here frame is 16 bits [.wav format of each frame])
print struct.unpack('<h', frame)[0], ' == ',
# struct.unpack(fmt, string) --- for more info about fmt -> https://docs.python.org/2/library/struct.html
# If we it is two samples per frame, then we get a tuple with two values -> left and right samples
value = int(frame.encode('hex'), 16)
# getting the 16-bit value [each frame is 16 bits]
if(value > 32767):
value -= 2**16
# because wav file format specifies 2's compliment as in even the negative values are there
print frame.encode('hex') , ' == ', value
audiofile.close()
Mit Ihrem Einzug scheint etwas falsch zu sein. Bitte repariere? – smarx
Auch nicht sicher, was Ihre Frage ist. Vielleicht können Sie einen kürzeren Code-Ausschnitt angeben, seine Ausgabe teilen und die von Ihnen erwartete Ausgabe teilen. – smarx
@smarx Ich habe eine Beispielausgabe hinzugefügt. Meine Hauptfrage ist, wenn ich Frame zu hex codiere und zurück zum int-Typ konvertiere und wenn ich struct-Modul verwende, um direkt den Wert von 16-Bits im int-Typ zu bekommen - Sie sollten gleich sein, oder? –