Skocz do zawartości

Wykrywanie dźwięków określonego typu


Pomocna odpowiedź

Napisano (edytowany)

Cześć,

w Internecie znaleźć można wiele projektów pozwalających na uruchomienie jakiejś akcji za pomocą na przykład klaśnięcia. Jednak są to metody prymitywne, bazujące na głośności dźwięku. Zastanawiam się, czy dałoby radę wykonać takie zadanie na przykład za pomocą analizy częstotliwościowej (FFT, Goertzel) lub jakimś innym, bardziej pewnym sposobem. Ktoś próbował coś takiego zrobić? Macie jakieś propozycje? Próbowałem metod np.correlate() oraz np.corrcoef(). Wyniki były takie sobie, łatwo znaleźć dźwięki inne niż klaśnięcie, dające wysoką korelację. Innych pomysłów na razie nie mam.

import numpy as np
from numpy.fft import fft
import matplotlib.pyplot as plt
import pyaudio

# Widmo dla pojedynczego klaśnięcia
pattern = np.loadtxt('pattern.txt')

audio_source = pyaudio.PyAudio()
chunk        = int(44100 * 0.2)

stream = audio_source.open(
    input             = True,
    format            = pyaudio.paInt16,
    rate              = 44100,
    frames_per_buffer = chunk,
    channels          = 1
)

while True:
    samples = np.fromstring(stream.read(chunk), dtype = np.int16)

    if samples.max() >= 10000:
        spectrum = np.abs(fft(samples * np.hamming(len(samples))))

        if np.corrcoef(spectrum, pattern)[0][1] >= 0.55:
            print('OK...')

stream.stop_stream()
stream.close()
audio_source.terminate()

Pozdrawiam

Edytowano przez ghost1313

@ghost1313 oczywiście wszystko zależy od tego jaki układ jest do dyspozycji, niektórzy powiedzą też, że to przesada, ale pewnie można się pobawić chociażby AI. Zerknij do tego artykułu, w którym @Elvis wykrywał gest machania płytką: https://forbot.pl/blog/sztuczna-inteligencja-na-stm32-przyklad-uzycia-x-cube-ai-id41588 Może w podobny sposób dałoby się fajnie wykrywać niektóre dźwięki?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...