2009-06-05 18 views
6

Ich habe diese Dateien mit der Endung ".adc". Sie sind einfach Rohdaten-Dateien. Ich kann sie mit Audacity über Datei-> Importieren-> Rohdaten mit Codierung "Signed 16 bit" und Sample-Rate "16000 Khz" öffnen.Python offene rohe Audiodatei

Ich möchte das gleiche mit Python tun. Ich denke, dass Audioop-Modul ist, was ich brauche, aber ich kann nicht scheinen, Beispiele zu finden, wie man es für etwas so einfaches verwendet.

Das Hauptziel ist es, die Datei zu öffnen und eine bestimmte Stelle in der Datei abzuspielen, zum Beispiel von der zweiten 10 zur zweiten 20. Gibt es etwas für meine Aufgabe?

Vielen Dank im Voraus.

Antwort

7

Zum Öffnen der Datei benötigen Sie nur . Um einen Ort zu finden, brauchen Sie kein audioop: Sie müssen nur Sekunden in Bytes umwandeln und die benötigten Bytes der Datei bekommen. Zum Beispiel, wenn Ihre Datei 16 kHz 16-Bit-Mono ist, ist jede Sekunde 32.000 Bytes Daten. Also die 10. Sekunde ist 320kB in die Datei. Suchen Sie einfach an der entsprechenden Stelle in der Datei und lesen Sie die entsprechende Anzahl an Bytes.

Und audioop kann Ihnen nicht mit dem schwierigsten Teil helfen: nämlich, das Audio zu spielen. Die richtige Vorgehensweise hängt sehr von Ihrem Betriebssystem ab.

EDIT: Entschuldigung, ich habe gerade bemerkt, dass Ihr Benutzername "thelinuxer" ist. Betrachten Sie pyAO zum Abspielen von Audio von Python unter Linux. Sie müssen wahrscheinlich das Sample-Format ändern, um das Audio zu spielen --- audioop wird Ihnen dabei helfen (siehe ratecv, tomono/tostereo, lin2lin und bias)

+0

Wäre 16kHz 16bit Mono nicht 16.000 Byte Daten? (und 32.000 Bytes, wenn es Stereo wäre?) – elias

+0

Ah, nvm, ich verstehe es! 16 Bit = 2 Bytes. Dann 2 Bytes * 16 Abtastungen/Sekunde == 32.000 Bytes/Sekunde. – elias

4

Vielen Dank konnte ich Folgendes tun:

def play_data(filename, first_sec, second_sec): 
    import ao 
    from ao import AudioDevice 
    dev = AudioDevice(2, bits=16, rate=16000,channels=1) 
    f = open(filename, 'r') 
    data_len = (second_sec-first_sec)*32000 
    f.seek(32000*first_sec) 
    data = f.read(data_len) 
    dev.play(data) 
    f.close() 

play_data('AR001_3.adc', 2.5, 5) 
1

können Sie PySoundFile verwenden, um die Datei als NumPy Array zu öffnen und es mit python-sounddevice spielen.

import soundfile as sf 
import sounddevice as sd 

sig, fs = sf.read('myfile.adc', channels=2, samplerate=16000, 
        format='RAW', subtype='PCM_16') 
sd.play(sig, fs) 

Sie können die Indizierung auf dem NumPy Array verwenden, um einen bestimmten Teil der Audiodaten zu wählen.