Przeczytałem wiele pytań na temat SO i, szczerze mówiąc, każde z nich nie opisuje żadnej konkretnej drogi. Niektórzy mówią „zrób FFT”, a niektórzy mówią „przekroczenie zera” itd. Ale posunąłem się tylko do zrozumienia, że cyfrowe wejście audio składa się z szeregu amplitud dla określonej częstotliwości i dobrze. Naprawdę nie wiem zbyt wiele poza tym.
Teraz znam twierdzenie Nyquista, częstotliwość, amplitudę, serie Fouriera itd., I to z 2-3 lat temu, kiedy robiłem to w moim programie uniwersyteckim w jakimś semestrze. Ale wtedy tak naprawdę nie uczono nas zbyt wiele na temat używania Fouriera w świecie rzeczywistym i nie zadałem sobie trudu, by wykopać więcej na ten temat poza nauką wystarczającą do zaliczenia przedmiotu. Ale teraz będę musiał użyć tego wszystkiego.
Oto migawka dźwięków, które próbuję wykryć:
Oczywiście dźwięki mają unikalne wykresy. Chcę tylko zrozumieć, jak wydobyć ich szczególne unikalne cechy dla ich unikalnych kolczastych linii na wykresie. Jak na przykład amplituda, częstotliwość itp. I na jak długo - choć to chyba banalne.
Chcę prosty krok po kroku, niejasną listę instrukcji - mogę wyszukiwać w terminologii, której nie rozumiem.
Może tak? -
Uzyskaj wejściowe dane audio
Spektrogram wykresu
Pobierz wykres spektrogramu dźwięku, który chcesz wykryć w cichym otoczeniu
Przestudiuj ten wykres - narysuj unikalne cechy tego dźwięku
Wykonaj jakąś funkcję, która może wykryć te szczególne cechy w transmisji audio na żywo, wykorzystując właściwości dźwięku znalezionego w (4)
Jeśli zostanie znalezione dopasowanie, cóż - zadanie zostało wykonane.
Poleruj algorytm, aby wyeliminować fałszywe negatywy.
Jestem zdezorientowany - jak przejść około 3,4,5. W szczególności 3 i 4. Ponieważ tworzę oprogramowanie, w którym użytkownik mógłby nagrywać dowolny dźwięk jako gest wprowadzony później, chciałbym, aby mój system mógł nagrać dowolny dźwięk i dopasować go do dźwięku na żywo kanał, aby wykryć ten gest dźwiękowy. Jak powiedzmy, kaszel, pstrykanie palcami, gwizdanie lub klaskanie. Lub mówiąc spółgłoski - lub lub lub . Prawie każdy dźwięk.
Myślałem o tym, aby użytkownik nagrał dźwięk, który chce przechowywać, jako gest w dość otoczeniu. A użytkownik wyda dźwięk tylko pomiędzy cichym wypełnieniem czasu ; 3 sekundy na początku i na końcu nagrania.
Powiedzmy, że przez pierwsze 3 sekundy mój system ustali, że prąd wejściowy to normalny cichy dźwięk tła. Nagła zmiana na wykresie oznaczałaby rozpoczęcie wprowadzania dźwięku. A kiedy to się skończy, nagrywanie będzie trwało kolejne 3 sekundy, a czas wypełniania będzie cichy . Zostanie to wykonane ręcznie przez użytkownika. Następnie automatycznie zapisuje charakterystykę tylko tej części, podczas której trwała nagła zmiana na wykresie - gdzieś pomiędzy czasami wypełnienia.
W ten sposób cechy tej części zostaną zapisane jako dane gestów tego dźwięku, które zostaną później wykorzystane do wykrycia tego konkretnego dźwięku w transmisji audio na żywo.
Problem w tym, że myślę o tym wszystkim w prostym języku angielskim. Muszę myśleć z matematyki i fizyki, aby móc efektywnie zaimplementować to w moim kodzie. Jestem tak cholernie nieświadomy tego, co napisać i gdzie napisać to w moim kodzie - nawet mając do dyspozycji tak wiele bibliotek i pytań dotyczących SO.
I przepraszam, jeśli to było długie.