wczytując pliki formatu WAV w Matlabie korzysta się z następującej
instrukcji
[y, fs, bits] = wavread('GLASS.wav'); // standardowy pliczek gdzieś z
katalogu win
% fs = 8000 Hz; bits = 8
jeśli dźwięk jest mono to otrzymamy tablicę y wymiaru Nx1, gdzie N to
liczba sampli, w przypadku sygnału 2-kanałowego, będzie to Nx2;
y jest ciągiem próbek o wartościach zmiennopozycyjnych i wszystko się
zgadza, ponieważ po wczytaniu tego samego pliku w programie Audacity
widać odpowiednie oscylacje na przebiegu czasowym w zakresie [-1, 1]
teraz aby wykonać w Pythonie, to co było robione w Matlabie, trzeba
wprowadzić kod:
import wave # biblioteka wbudowana w środowisko
wav = wave.read('GLASS.wav', 'rb')
y = wav.readframes(N); # N wynosi 4096
jeśli teraz wylistujemy y, otrzymujemy ciąg bajtów (definicja z ang.
manuala), innej metody do odczytania WAV chyba nie ma. Ponadto
dlaczego w etykiecie metody readframes() jest ten suffix 'frames' i
jakie ramki może oznaczać? Czy takie dane oznaczają próbki w postaci
skwantowanej, ale np. zapisy \x82sygq jak na rozdzielczość 8-bitową są
trochę dziwne, gdzie tu rozróżnienie na kanały. Ponadto jak z takich
danych policzyć FFT, w Matlabie ta postać zmiennopozycyjna wyjaśniała
wszystko w rozumieniu przejścia z sygnału analogowego na sygnał
dyskretny jako chwilowe amplitudy z określonym interwałem próbkowania
(wartości jak przy produkcji sygnału ze składowych harmonicznych),
potem ewentualna analiza częstotliwościowa lub kwantyzacja na sygnał
cyfrowy...
Tutaj jestem w kropce :(
Ktoś się bawił z wave pod Pythonem vs. Matlab i może pomóc?
Pozdrawiam
Jan Wicijowski
faktycznie:
import array
array.array('H', daneRAW) # unsigned short int (2B) dla
rozdzielczosci probkowania 16 bit
array.array('B', daneRAW) # unsigned char (1B) dla dzwieku 8-bitowego
gdzie daneRAW to ciagi bajtow pobrane za pomoca readframes()
jak dzwiek jest dwukanalowy, to sample = array.array('H', daneRAW);
iloscProbek = len(sample) / 2
i mamy faktyczna liczbe probek; mysle, ze wiarygodne wnioski, bo
porownane z wynikami
Matlaba, identyko :)
polecam tez biblioteke PySonic
Pozdrawiam,
kony