Ich hatte vor einiger Zeit die Möglichkeit, ein Signal für eine hochauflösende Schallquelle zu verarbeiten. Zu dieser Zeit habe ich verschiedene Python-Bibliotheken durchsucht, die 24-Bit-WAV lesen können. Notieren Sie sich dies.
Es gibt scipy.io.wavfile
als Bibliothek zum Lesen von wav in Python,
Dies unterstützt wav nur mit der Anzahl der Quantisierungsbits = {8,16,32,64,96,128}.
Mit anderen Worten, 24-Bit-WAV kann nicht gelesen werden.
Die meisten hochauflösenden Schallquellen auf der Straße sind also 24-Bit
Da dies ein Problem ist, habe ich versucht herauszufinden, wie man 24-Bit-WAV liest.
(Ich habe es nicht implementiert, es tut mir leid, wenn ich einen Fehler mache n) Es sollte gut sein, wenn das von readframes () erhaltene Byte-Objekt ordnungsgemäß konvertiert und in numpy.ndarray gespeichert wird. Da es jedoch erforderlich ist, eine 24-Bit-Einheitsbyte-Zeichenfolge in einem 32-Bit-Typ zu speichern, scheint die Entpackverarbeitung ein wenig mühsam zu sein.
scikits.audiolab http://cournape.github.io/audiolab/ Ein relativ alter libsndfile-Wrapper. Sie können WAV mit MATLAB-ähnlicher Notation lesen und schreiben.
test_audiolab.py
from scikits.audiolab import wavread
data, fs, fmt = wavread(fn)
wavio https://github.com/WarrenWeckesser/wavio Eine relativ neue Bibliothek. (Es scheint, dass es intern mit Wave implementiert wird) Es ist möglich, Wellen einer beliebigen Anzahl von fs / Quantisierungsbits einschließlich 24 Bits zu lesen und zu schreiben.
test_wavio.py
import wavio
w = wavio.read(fn_in)
fs = w.rate
bit = 8 * w.sampwidth
data = w.data.T
data = data / float( 2**(bit-1) ) # -1.0 to 1.Normalisiert auf 0
--Nur WAV wird unterstützt
Persönlich denke ich, dass "Wavio" die derzeit optimale Lösung ist. Es hat den Nachteil, dass es nur mit WAV verwendet werden kann, aber im schlimmsten Fall kann es mit Sox oder ffmpeg konvertiert werden.
Wenn Sie die Abhängigkeit von nicht standardmäßigen Bibliotheken nicht erhöhen möchten, implementieren Sie sie vorsichtig mit Wave.
Recommended Posts