Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.17 KB | None | 0 0
  1. \indent \indent Aplikacja wykorzystuje metodę \textit{getNotes} do pobierania częstotliwości ze spektrogramu – Listing nr 3 – 6.\\
  2. \indent W linii 23 przechowano okno czasowe za pomocą zmiennej \textit{chunk} - szerokość okna, na którym będziemy wykonywać szybką transformatę Fouriera. W linii 40 pobierane zostają zapakowane dane z pliku dźwiękowego. Następnie w linii 44, rozpakowano pobrane dane i zwrócono je w wyniku w postaci ramek. W pętli wykonano szybką transformatę Fouriera – linia 48. Wyniki z transformaty dodano do listy wynikowej, a następnie odnaleziono maksymalną wartość z wyniku. W warunku (linia 52 – 57), wykonano interpolacje kwadratową i przeliczono częstotliwość. Wykorzystanie interpolacji kwadratowej służy do odnalezienia częstotliwości bazowej dźwięku. Miejscami częstotliwość może spadać do 0 przez co został dodany warunek (Linia 59 – 60), który zabezpiecza program przed dzieleniem przez 0.\\
  3. \indent Pętla, w której uzyskaliśmy listę częstotliwości się zakończyła, a wyniki zostały dodane do wyrysowania na wykresie – linie 66 – 71. Wykres częstotliwości (Hz) od numeru \textit{chunk'a}.
  4.  
  5. \begin{center} \caption{Listing 3. Plik \textit{frequencyConverter.py} z metodą \textit{getNotes}}\\ \end{center} \lstinputlisting[language=Python, firstnumber=19, firstline=19,lastline=85]{Python/frequencyConverter.py}
  6.  
  7. \indent Wszelkie zbocza (rosnące bądź malejące) świadczą o zmianie nuty. Pętla w linii 91, sprawdza, w którym \textit{chunk'u} jest wyraźne zbocze (różnica częstotliwości większa lub mniejsza od \textit{epsilona} = 15 Hz). Następnie należy wyliczyć średnią częstotliwość pomiędzy zboczami, gdzie w wyniku otrzymamy jedną częstotliwość – szukaną nutkę. Linie 93 – 109 mają za zadanie sprawdzić, czy zbocze ma tendencję spadkową, rosnącą, lub jeżeli jest to nuta – brak tendencji. Opcje posiadające tendencję rosnącą lub malejącą, dodają listę \textit{detectChunkWithNoteFreqs} do \textit{freqsListForEachNote}, na której wykonamy operacje uśredniania wartości częstotliwości. Listę \textit{detectChunkWithNoteFreqs} tworzymy na nowo.\\
  8. \indent Po obliczeniu listy częstotliwości dla każdej nuty – \textit{freqsListForEachNote}, zostaje obliczony czas trwania dla każdej pojedynczej nuty oraz jej średnia wartość częstotliwości (linia 115). W wyniku obliczenia (linia 124) zostanie zwrócona nazwa nutki i jej oktawa. Operację dokonano z odwołaniem się do słownika \textit{notesDictionary}.
  9.  
  10. \begin{center} \caption{Listing 4. Plik \textit{frequencyConverter.py} z dalszą częścią kodu metody \textit{getNotes}} \end{center} \lstinputlisting[language=Python, firstnumber=87, firstline=87,lastline=124]{Python/frequencyConverter.py}
  11.  
  12. \indent Listing nr 5 prezentuje dalszą część metody \textit{getNotes}. W linii 127 zostaje dokonany wybór najdłuższego czasu trwania nutki. Znając ogólną zasadę zależności czasów trwania nut, możemy odpowiednio przeliczyć czas trwania całej nuty, pół nuty, itd. Przeliczanie czasu trwania poszczególnej nuty dla danego utworu prezentują linie 129 – 145. W dalszej części, tworzymy listę czasów dla biblioteki \textit{Abjad}, oraz drugą listę dla wyliczonych czasów trwania poszczególnych nut – linie 147 – 153.
  13.  
  14. \begin{center} \caption{Listing 5. Plik \textit{frequencyConverter.py} z dalszą częścią kodu metody \textit{getNotes}} \end{center}\lstinputlisting[language=Python, firstnumber=126, firstline=126,lastline=153]{Python/frequencyConverter.py}
  15.  
  16. \indent Kończąc działanie metody \textit{getNotes}, zostaje tylko sprawdzić czas trwania każdej nuty. Polega to na sprawdzeniu, ile \textit{chunk’ów} zajmuje dana nuta – Listing nr 6. W zależności od wyniku zostanie dodana odpowiednia wartość z listy \textit{abjadDurationList}. Program zwraca listę nut oraz ich czasy trwania, przekonwertowane odpowiednio pod bibliotekę \textit{Abjad}.
  17.  
  18. \begin{center} \caption{Listing 6. Plik \textit{frequencyConverter.py} z ostatnim fragmentem kodu metody \textit{getNotes}} \end{center} \lstinputlisting[language=Python, firstnumber=155, firstline=155,lastline=175]{Python/frequencyConverter.py}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement