Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 05.03.2020
Сообщений: 4
1

Guitar Tuner Python - Частота звука

05.03.2020, 20:23. Показов 5183. Ответов 7

Author24 — интернет-сервис помощи студентам
Всем привет
хочу создать тюнер для акустической гитары на Python.

но проблема в том что если я запускаю код и включаю на телефон вот эту запись то ответ программы тот же что и в видео.
Но если я ставлю звук гитары с частотой 329.63HZ то результаты от 600Hz до 2500Hz где-то так.
Вопрос : как это исправить ?

вот код для чтения частоты :
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from matplotlib.mlab import find
import pyaudio
import numpy as np
import math
 
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 20
 
 
def Pitch(signal):
    signal = np.fromstring(signal, 'Int16')
    crossing = [math.copysign(1.0, s) for s in signal]
    index = find(np.diff(crossing))
    f0 = round(len(index) * RATE / ( 2 * np.prod(len(signal))))
    return f0
 
 
p = pyaudio.PyAudio()
 
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                output=True,
                frames_per_buffer=chunk)
 
for i in range(0, RATE // chunk * RECORD_SECONDS):
    data = stream.read(chunk)
    Frequency = Pitch(data)
    print("%f Frequency" % Frequency)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2020, 20:23
Ответы с готовыми решениями:

Построить график звука из wav файла, преобразование Фурье, амплитуда и частота звука
Добрый день. У меня есть звук, который записан в wav файл(например 10 секунд). Нужно извлечь...

Частота звука в видеофайле
Добрый вечер! нигде не могу найти теорию как можно определить частоту (по кадрам) в видеофайле......

Частота текущего звука
как получить частоту звука за текущую милисекунду?, перерыл кучу исходников, фурье и т д, не...

Частота звука переданного микрофоном
Люди, может кто знает, поделитесь, как узнать частоту звука. Конкретнее, звука переданного...

7
4921 / 2674 / 550
Регистрация: 07.11.2019
Сообщений: 4,395
05.03.2020, 22:30 2
Видео не работает. Постройте график записи в матплотлибе и оцените шумы.. М.б. дело в гармониках?
Хм.. искать частоту через количество пересечений нуля немного странно. Есть же преобразование Фурье..
0
0 / 0 / 0
Регистрация: 05.03.2020
Сообщений: 4
05.03.2020, 22:33  [ТС] 3
Video :
https://www.youtube.com/watch?v=lFRfUyOjVF8
0
4921 / 2674 / 550
Регистрация: 07.11.2019
Сообщений: 4,395
05.03.2020, 22:48 4
На видео звук стационарный, у гитары же он достаточно быстрозатухающий.
0
0 / 0 / 0
Регистрация: 05.03.2020
Сообщений: 4
06.03.2020, 01:05  [ТС] 5
сколько рыл в инете не нашел алг который ищет частоту через Фурье, поможешь ?
0
4921 / 2674 / 550
Регистрация: 07.11.2019
Сообщений: 4,395
06.03.2020, 07:50 6
heterun2233, любой учебник по DSP (Digital Signal Processing, цифровая обработка сигналов)
0
0 / 0 / 0
Регистрация: 05.03.2020
Сообщений: 4
06.03.2020, 17:09  [ТС] 7
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import pyaudio
import numpy as np
 
CHUNK = 4096 # number of data points to read at a time
RATE = 44100 # time resolution of the recording device (Hz)
#DEVICE = 0 # default
 
p = pyaudio.PyAudio()
 
stream=p.open(format=pyaudio.paInt16,
              channels=1,
              rate=RATE,
              input=True,
              frames_per_buffer=CHUNK)
 
while True:
    indata = np.fromstring(stream.read(CHUNK),dtype=np.int16)
 
    # Take the fft and square each value
    fftData=abs(np.fft.rfft(indata))**2
    # find the maximum
    which = fftData[1:].argmax() + 1
    # use quadratic interpolation around the max
    if which != len(fftData)-1:
        y0,y1,y2 = np.log(fftData[which-1:which+2:])
        x1 = (y2 - y0) * .5 / (2 * y1 - y2 - y0)
        # find the frequency and output it
        thefreq = (which+x1)*RATE/CHUNK
        print("The freq is %f Hz." % (thefreq))
    else:
        thefreq = which*RATE/CHUNK
        print("The freq is %f Hz." % (thefreq))
 
stream.close()
p.terminate()
это ближе не всё равно не даётся точную герцовку, но если открыть .wav file этим алгоритмом то всё работает
0
4921 / 2674 / 550
Регистрация: 07.11.2019
Сообщений: 4,395
06.03.2020, 17:23 8
М.б. имеет смысл добавить амплитудный детектор, т.е. начинать обработку, когда превышен уровень звука.
Также хорошо бы умножить перед обработкой сигнал на какую-нибудь оконную функцию.
Для большей точности м.б. надо будет увеличить CHUNK
0
06.03.2020, 17:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2020, 17:23
Помогаю со студенческими работами здесь

Частота выходного звука, с bass.dll
Кто нибудь работал со звуком?можете поделиться ссылками или инфой как это делается.допустим взять...

Уравнение движения, логарифмический декремент, частота звука
Помогите, пожалуйста, решить задачи: 1)Уравнение движения тела массой 1 кг имеет вид x =...

Какая минимальная частота воспроизведения звука функции Beep?
Здравствуйте. У меня есть вопрос. Какая минимальная частота воспроизведения звука функции Beep?...

Частота звука, прибор, переводящий одни частоты в другие
Добрый день, я собираю деньги на изучение феномена телепатии. Мне очень нужны люди в команду по...

Частота звука в Wav файле (найти через Быстрое Преобразование Фурье)
Собственно, нужно найти частоту звука в Wav файле. Везде говорят о БПФ, но я нигде не нашел...

Guitar hero
Всем доброго времени суток. Помогите пожалуйста. Получила задание: разработать приложение guitar...

Guitar hero c++
Привет. Выбрал guitar hero как тему курсовой и сейчас продумываю алгоритм. Хотелось бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru