2012-03-23 6 views
1

Ich möchte Sound für 1 Sekunde mit einer Python geschrieben App für SL4A aufnehmen und dann die maximale Amplitude des Sounds finden.Get Amplitude des aufgenommenen Sounds mit Python mit SL4A

Gibt es einen Teil der SL4A-API, den ich verwenden kann oder einen Teil der Python-APIs, die verwendet werden können? Oder gibt es ein Python-Modul, das ich installieren kann?

Ich habe die Python-API von SL4A durchsucht, aber nichts mit Amplitude gefunden. Vielleicht habe ich es einfach verpasst.

UPDATE:

Ich habe es geschafft, die wave.py Modul in meinen Code zu importieren und versuchen, die aufgezeichnete Datei zu öffnen. Aber wenn ich Zugriff auf

wave.open("/sdcard/sl4aTemp/sound_sample.wav")

es diesen Fehler wirft,

File does not start with RIFF id

Für diejenigen von Ihnen, die neugierig sind, wie mein Code hier sieht es aus ist:

import android, audioop, time, wave 

droid = android.Android() 

print "Recording starts in: " 
for i in range(0,5): 
    time.sleep(1) 
    print str(5-i) 
time.sleep(1) 

print "Speak!" 
droid.recorderStartMicrophone('/sdcard/sl4aTemp/sound_sample.wav') 
time.sleep(3) 
droid.recorderStop() 

print "Processing file in:" 
for i in range(0,3): 
    print str(3-i) 
    time.sleep(1) 

filename = "/sdcard/sl4aTemp/sound_sample.wav" 

if wave.open(filename,"r") == True: 
    print "Processing " + filename 
else: 
    print "File not processed" 

FILE=wave.open(filename,"r") 
rez=FILE.readframes(30) 
print str(rez) 

Antwort

1

Die Standard-Antwort auf Sound-Verarbeitung mit Python ist PyAudio, das ist ein separates Paket, das tatsächlich von PortAudio abhängt, die wahrscheinlich wurde nicht für Android gebaut, so ist es nicht wirklich eine gute Lösung (es sei denn, Sie fühlen sich wie ein Held und versuchen, es zu bauen). Eine andere Option ist die audioop module. Das Problem besteht darin, dass Sie das Format, in dem die Datei gespeichert ist, in das Format audioop konvertieren müssen (Zeichenfolgen mit 8/16/32 Bit breiten Ganzzahlen mit Vorzeichen). Es ist schwer zu sagen, wie Sie das machen würden, aber wenn Sie wirklich Glück haben, wird es eine .wav-Datei sein und Sie können einfach wave module's readframes verwenden (was die Daten bequem als eine Folge von Bytes ausgibt).

Also, wenn SL4A alle Python-Core implementiert, können Sie in der Lage sein, es ohne Abhängigkeiten zu tun.

+0

Ich werde es versuchen müssen, klingt die Idee vielversprechend. –

+0

Also, ich habe es geschafft, den Sound aufzunehmen, und ich habe die 'import wave, audioop'-Module verwendet, es sagt nicht, dass es ein Fehler ist, aber wenn ich versuche,' wave.open() 'zu verwenden, sagt es nicht finde die Datei 'wave.py'. Also habe ich danach gesucht und ich versuche es zu einem Modul zu machen, das ich in mein Projekt importieren werde und hoffentlich komme ich über dieses Problem hinweg. Nochmals vielen Dank für die Hinweise! –

Verwandte Themen