read#
- scipy.io.wavfile.read(filename, mmap=False)[Quelle]#
Öffnet eine WAV-Datei.
Gibt die Abtastrate (in Samples/Sekunde) und Daten aus einer LPCM WAV-Datei zurück.
- Parameter:
- filenameString oder geöffnetes Dateihandle
Eingabe-WAV-Datei.
- mmapbool, optional
Ob Daten als speicherabbildend gelesen werden sollen (Standard: False). Nicht kompatibel mit einigen Bittiefen; siehe Hinweise. Nur für reale Dateien zu verwenden.
Hinzugefügt in Version 0.12.0.
- Rückgabe:
- rateint
Abtastrate der WAV-Datei.
- datanumpy array
Aus der WAV-Datei gelesene Daten. Der Datentyp wird aus der Datei bestimmt; siehe Hinweise. Daten sind 1-dimensional für 1-Kanal-WAV, andernfalls 2-dimensional mit der Form (Nsamples, Nchannels). Wenn eine dateiähnliche Eingabe ohne einen C-ähnlichen Dateideskriptor (z. B.
io.BytesIO) übergeben wird, ist dies nicht beschreibbar.
Hinweise
Gängige Datentypen: [1]
WAV-Format
Min
Max
NumPy dtype
32-Bit Fließkomma
-1.0
+1.0
float32
32-Bit Integer PCM
-2147483648
+2147483647
int32
24-Bit Integer PCM
-2147483648
+2147483392
int32
16-Bit Integer PCM
-32768
+32767
int16
8-Bit Integer PCM
0
255
uint8
WAV-Dateien können beliebige Bittiefen angeben, und diese Funktion unterstützt das Lesen jeder Integer-PCM-Tiefe von 1 bis 64 Bit. Daten werden im kleinsten kompatiblen NumPy-Integer-Typ im linksbündigen Format zurückgegeben. 8 Bit und niedriger sind vorzeichenlos, während 9 Bit und höher vorzeichenbehaftet sind.
Beispielsweise werden 24-Bit-Daten als int32 gespeichert, wobei das MSB der 24-Bit-Daten im MSB des int32 gespeichert ist, und typischerweise ist das niedrigstwertige Byte 0x00. (Wenn eine Datei jedoch tatsächlich Daten über ihre angegebene Bittiefe hinaus enthält, werden diese Bits ebenfalls gelesen und ausgegeben. [2])
Diese Bitjustierung und Vorzeichenübereinstimmung entspricht dem nativen internen Format von WAV, was das speicherabbildende Lesen von WAV-Dateien ermöglicht, die 1, 2, 4 oder 8 Bytes pro Sample verwenden (sodass 24-Bit-Dateien nicht speicherabbildend gelesen werden können, 32-Bit-Dateien jedoch schon).
IEEE Float PCM im 32- oder 64-Bit-Format wird unterstützt, mit oder ohne mmap. Werte, die [-1, +1] überschreiten, werden nicht beschnitten.
Nicht-lineare PCM (mu-law, A-law) wird nicht unterstützt.
Referenzen
[1]IBM Corporation und Microsoft Corporation, „Multimedia Programming Interface and Data Specifications 1.0“, Abschnitt „Data Format of the Samples“, August 1991 http://www.tactilemedia.com/info/MCI_Control_Info.html
[2]Adobe Systems Incorporated, „Adobe Audition 3 User Guide“, Abschnitt „Audio file formats: 24-bit Packed Int (type 1, 20-bit)“, 2007
Beispiele
>>> from os.path import dirname, join as pjoin >>> from scipy.io import wavfile >>> import scipy.io
Holen Sie sich den Dateinamen für eine Beispiel-.wav-Datei aus dem Verzeichnis tests/data.
>>> data_dir = pjoin(dirname(scipy.io.__file__), 'tests', 'data') >>> wav_fname = pjoin(data_dir, 'test-44100Hz-2ch-32bit-float-be.wav')
Laden Sie den Inhalt der .wav-Datei.
>>> samplerate, data = wavfile.read(wav_fname) >>> print(f"number of channels = {data.shape[1]}") number of channels = 2 >>> length = data.shape[0] / samplerate >>> print(f"length = {length}s") length = 0.01s
Plotten Sie die Wellenform.
>>> import matplotlib.pyplot as plt >>> import numpy as np >>> time = np.linspace(0., length, data.shape[0]) >>> plt.plot(time, data[:, 0], label="Left channel") >>> plt.plot(time, data[:, 1], label="Right channel") >>> plt.legend() >>> plt.xlabel("Time [s]") >>> plt.ylabel("Amplitude") >>> plt.show()