← strona główna

Meteosonifikacja

Jest to przykład sonifikacji adaptowanej. Jako źródło danych posłużą dane meteorologiczne z pomiarów dokonywanych na przestrzeni lat na warszawskim lotnisku Okęcie.

Tutaj link do pliku z tymi danym w formacie CSV (plik można importować do programów kalkulacyjnych): meteo12375.csv (plik ma rozmiar około 20MB).

Dane zostały pobrane z serwisu meteostat.net

Link do przykładowych wykresów pogodowych z lotniska Okęcie

Przykładowe pomiary wyglądają następująco:

2023,04,18,05,7.5,3.4,75,,,36,11.1,20.4,1016.7,,2
2023,04,18,06,8.6,3.6,71,,,32,13.0,22.2,1016.8,,2
2023,04,18,07,10.1,3.8,65,,,21,14.8,24.1,1016.9,,2
2023,04,18,08,11.4,3.7,59,,,8,14.8,25.9,1016.9,,2
2023,04,18,09,12.4,3.6,55,,,355,16.7,27.8,1016.8,,2
2023,04,18,10,13.3,3.4,51,,,345,16.7,27.8,1016.6,,

Przykładowo, wykresy temperatury są dokonywane co godzinę. Mamy więc 24 pomiary w ciągu doby:

Jeden rok pomiarów zawiera więc 365x24=8760 pomiarów. Traktując te liczby jako pojedyncze próbki dźwięku cyfrowego o częstotliwości próbkowania 8760 Hz otrzymamy więc jedną sekundę dźwięku. 22 lata pomiarów dadzą 22 sekundy dźwięku.

Ponieważ taki dźwięk będzie składał się z mniejszych „falek” (rytm dobowy temperatury) usłyszymy w dźwięku ton o częstotliwości około 365 Hz:

Ponadto dźwięk faluje zgodnie z rocznymi oscylacjami temperatury, co daje rodzaj powolnego vibrato (około 1s).

Pomysł ten zrealizować można prostym kodem w języku matlab:

% źródło danych
% https://bulk.meteostat.net/v2/hourly/{station}.csv.gz
% https://bulk.meteostat.net/v2/hourly/12375.csv.gz

idStacji = 12375 % identyfikator stacji Warszawa Okęcie
plikCSV = [num2str(idStacji),'.csv']; % nazwa pliku
X = csvread (plikCSV); % odczyt pliku CSV
indxs = find(X(:, 1) >= 1999); % indeksy danych od 1999 r.
x = X(indxs, :); % wzięcie tylko danych od 1999 roku
kol = 14; % kolumna w tabeli pomiarów -- temperatura powietrza
t = x(:, kol); % wzięcie tylko danych o temperaturze
t = (rescale(t) * 2) - 1; % przeskalowanie do -1:1
t = t * .9; % zabezpieczenie przed przesterowaniem
dst = [num2str(idStacji),'.wav']; % nazwa pliku wav
fs = 365 * 24; % częstotliwość próbkowania -- ilości godzin w roku
audiowrite(dst, t, fs); % zapis do pliku wav

Autorstwo kodu i próbek dźwiękowych: Marcin Strzelecki