Wie ändere ich die Samplerate des Mikrofons unter Linux auf 16000?
Ich arbeite derzeit an einem Projekt, für das ich versuche, Deepspeech auf einem Himbeer-Pi zu verwenden, während ich Mikrofon-Audio verwende, aber es wird immer wieder ein ungültiger Abtastratenfehler angezeigt. Mit pyAudio erstelle ich einen Stream, der die vom Modell gewünschte Abtastrate verwendet, nämlich 16000, aber das von mir verwendete Mikrofon hat eine Abtastrate von 44100. Beim Ausführen des Python-Skripts wird keine Ratenkonvertierung durchgeführt und die Abtastrate des Mikrofons und die erwartete Die Abtastrate des Modells führt zu einem ungültigen Abtastratenfehler.
Die Mikrofoninformationen werden von pyaudio folgendermaßen aufgelistet:
{'index': 1, 'structVersion': 2, 'name': 'Logitech USB Microphone: Audio (hw:1,0)', 'hostApi': 0, 'maxInputChannels': 1, 'maxOutputChannels': 0, 'defaultLowInputLatency': 0.008684807256235827, 'defaultLowOutputLatency': -1.0, 'defaultHighInputLatency': 0.034829931972789115, 'defaultHighOutputLatency': -1.0, 'defaultSampleRate': 44100.0}
Das erste, was ich versuchte, war, die pyAudio-Stream-Abtastrate auf 44100 einzustellen und das Modell damit zu versorgen. Aber nach dem Testen stellte ich fest, dass das Modell nicht gut funktioniert, wenn es eine andere Rate als die angeforderte 16000 erhält.
Ich habe versucht, eine Möglichkeit zu finden, die Mikrofonänderungsrate auf 16000 zu ändern oder zumindest die Rate auf 16000 zu konvertieren, wenn sie im Python-Skript verwendet wird, aber ohne Erfolg.
Das Letzte, was ich versucht habe, ist das Ändern der .asoundrc-Datei, um herauszufinden, um die Rate zu ändern, aber ich weiß nicht, ob es möglich ist, die Rate des Mikrofons in dieser Datei auf 16000 zu ändern. So sieht die Datei derzeit aus:
pcm.!default {
type asymd
playback.pcm
{
type plug
slave.pcm "dmix"
}
capture.pcm
{
type plug
slave.pcm "usb"
}
}
ctl.!default {
type hw
card 0
}
pcm.usb {
type hw
card 1
device 0
rate 16000
}
Der Python-Code, den ich erstellt habe, funktioniert unter Windows, was vermutlich darauf zurückzuführen ist, dass Windows die Eingaberate in die Abtastrate im Code konvertiert. Aber Linux scheint dies nicht zu tun.
tldr; Die Mikrofonrate beträgt 44100, muss jedoch auf 16000 geändert werden, um verwendet werden zu können. Wie macht man das unter Linux?
Bearbeiten 1:
Ich erstelle den pyAudio-Stream folgendermaßen:
self.paStream = self.pa.open(rate = self.model.sampleRate(), channels = 1, format= pyaudio.paInt16, input=True, input_device_index = 1, frames_per_buffer= self.model.beamWidth())
Es verwendet die Rate und die Strahlbreite des Modells sowie die Anzahl der Kanäle des Mikrofons und den Index des Mikrofons.
Ich erhalte den nächsten Audio-Frame und formatiere ihn richtig, um ihn mit dem Stream zu verwenden, den ich für das Modell erstelle, das ich mache:
def __get_next_audio_frame__(self):
audio_frame = self.paStream.read(self.model.beamWidth(), exception_on_overflow= False)
audio_frame = struct.unpack_from("h" * self.model.beamWidth(), audio_frame)
return audio_frame
exception_on_overflow = False
wurde verwendet, um das Modell mit einer Eingaberate von 44100 zu testen, ohne dass dies auf False gesetzt ist, würde der gleiche Fehler auftreten, mit dem ich mich derzeit befasse. model.beamWidth
ist eine Variable, die den Wert für die Anzahl der vom Modell erwarteten Chunks enthält. Ich habe dann diese Menge an Stücken gelesen und sie neu formatiert, bevor ich sie dem Stream des Modells zugeführt habe. Was so passiert:
modelStream.feedAudioContent(self.__get_next_audio_frame__())
Antworten
Nach einigen weiteren Tests habe ich die Konfigurationsdatei für den Puls bearbeitet. In dieser Datei können Sie Einträge auskommentieren, mit denen Sie die Standard- und / oder alternative Abtastrate bearbeiten können. Die Bearbeitung der alternativen Abtastrate von 48000 auf 16000 konnte mein Problem lösen.
Die Datei befindet sich hier : /etc/pulse/daemon.conf
. Wir können diese Datei auf Raspberian mit öffnen und bearbeiten sudo vi daemon.conf
. Dann müssen wir die Zeile auskommentieren, ; alternate-sample-rate = 48000
indem wir die entfernen ;
und den Wert von 48000
in ändern 16000
. Speichern Sie die Datei und beenden Sie vim. Starten Sie dann das Pulseaudio mit neu pulseaudio -k
, um sicherzustellen, dass die geänderte Datei ausgeführt wird.
Wenn Sie mit vim und Linux nicht vertraut sind, finden Sie hier eine ausführlichere Anleitung zum Ändern der Samplerate.