2009-06-05 9 views
6

Mam te pliki z rozszerzeniem ".adc". Są to po prostu nieprzetworzone pliki danych. Mogę je otworzyć za pomocą Audacity, używając File-> Import-> Raw danych z kodowaniem "Signed 16 bit" i częstotliwością próbkowania "16000 Khz".Python open raw plik danych audio

Chciałbym zrobić to samo z python. Myślę, że moduł audioop jest tym, czego potrzebuję, ale nie mogę znaleźć przykładów, jak go używać do czegoś tak prostego.

Głównym celem jest otworzenie pliku i odtworzenie określonej lokalizacji w pliku, na przykład od drugiej 10 do drugiej 20. Czy jest coś do zrobienia dla mojego zadania?

Thanx z góry.

Odpowiedz

7

Do otwarcia pliku wystarczy file(). Aby znaleźć lokalizację, nie potrzebujesz audioop: po prostu musisz przekonwertować sekundy na bajty i pobrać wymagane bajty pliku. Na przykład, jeśli twój plik ma 16-kHz 16-bitowe mono, każda sekunda to 32 000 bajtów danych. Więc 10 sekunda to 320kB do pliku. Po prostu wyszukaj odpowiednie miejsce w pliku, a następnie odczytaj odpowiednią liczbę bajtów.

A audioop nie może ci pomóc z najtrudniejszą częścią: mianowicie odtwarzaniem dźwięku. Prawidłowy sposób zrobienia tego bardzo zależy od twojego systemu operacyjnego.

EDYCJA: Przepraszam, zauważyłem, że twoja nazwa użytkownika to "thelinuxer". Rozważ pyAO do odtwarzania dźwięku z Pythona w systemie Linux. Najprawdopodobniej będziesz musiał zmienić format próbkowania, aby odtwarzać audio --- audioop pomoże ci w tym (zobacz ratecv, tomono/tostereo, lin2lin i stronniczość)

+0

Czy 16kHz 16-bitowe mono nie byłoby 16 000 bajtów danych? (i 32 000 bajtów, jeśli był stereo?) – elias

+0

Ah, nvm, rozumiem! 16 bitów == 2 bajty. Następnie 2 bajty * 16 próbek/sekundę == 32 000 bajtów/sekundę. – elias

4

Bardzo dużo udało mi się zrobić:

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

można użyć PySoundFile otworzyć plik jako tablica numpy i odtworzyć go z python-sounddevice.

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) 

Możesz użyć indeksowania w tablicy NumPy, aby wybrać określoną część danych audio.