Invalid shape for monophonic audio

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

Hi,
der Code hier nimmt sound auf, speichert die Audio Datei, lädt sie erneut und lässt eine KI etwas bestimmen.

Code: Alles auswählen

myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1)
sd.wait()
write(filename, fs, myrecording)
audio, sample_rate = librosa.load(filename)
mfcc = librosa.feature.mfcc(y=audio, sr=sample_rate, n_mfcc=40)
mfcc_processed = np.mean(mfcc.T, axis=0)
prediction = model.predict(np.expand_dims(mfcc_processed, axis=0))
Es ist meiner meinung nach ein Umweg den aufgenommenen Ton erst zu speichern und dann erneut zu laden. Also müsste es doch so aussehen wenn man den Code fürs speichern entfernt. Oder?

Code: Alles auswählen

myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1)
sd.wait()
#write(filename, fs, myrecording)
#audio, sample_rate = librosa.load(filename)
mfcc = librosa.feature.mfcc(y=myrecording, sr=fs, n_mfcc=40)
mfcc_processed = np.mean(mfcc.T, axis=0)
prediction = model.predict(np.expand_dims(mfcc_processed, axis=0))
Leider beendet sich das Skript mit folgendem Error:

Code: Alles auswählen

Invalid shape for monophonic audio: ndim=2, shape=(88200, 1)
Also stimmt die Samplerate nicht. Ich habe ein bisschen herumprobiert und immer kam der oder ein Ähnlicher Error Code raus. Auch das Googlen nach dieser Error Message hat mich nicht weitergebracht, da keiner die sounddevice Bibliothek benutzt.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das ist ein bisschen schlecht zu beurteilen, ohne den umliegenden Code und die verwendeten Bibliotheken zu kennen bzw. du lieferst ja auch eher eine dünne Datenlage.

Ich vermute mal, dass der Fehler daran liegt, dass `myrecording` halt der Rückgabewert von `sd.rec` ist, während `audio` und `sample_rate` der Rückgabewert von `librosa.load` sind. `librosa.feature` kann mit `sd.rec` aber nichts anfangen, weil das Objekt nicht die Eigenschaften hat, die erwartet werden. Das ist ja wahrscheinlich nicht nur der reine Inhalt, der da rumgereicht wird.

Wenn du dir IO auf einen physischen Datenträger sparen willst, dann nimm' ein "file-type object", welches aber nur im RAM lebt. Z.B. `BytesIO` aus dem io Modul. Das sollte normalerweise gehen.

Gruß, noisefloor
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

Thx,
lese mich gleich in die io Bibliothek ein.
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

@noisefloor, danke für die Hilfe. Hat alles funktioniert
Antworten