Как я могу получить определенную частоту на определенной временной отметке в аудиофайле? - PullRequest
0 голосов
/ 27 ноября 2018

Привет! В настоящее время я использую Librosa для аудиопроекта, над которым я работаю, и мне было интересно, как я могу получить амплитуду частоты в определенный период времени в аудиофайле.Я не знаю, просто ли это, но я посмотрел онлайн и ничего не могу найти.Я знаю, что вы можете создать спектрограмму, но как вы можете получить информацию, такую ​​как амплитуда частоты на данной временной отметке?

РЕДАКТИРОВАТЬ: я имел в виду амплитуду на отметке времени.

1 Ответ

0 голосов
/ 22 января 2019

Спектрограмма представляет собой дискретное частотно-временное представление.В либрозе частотные бины расположены вдоль первой оси, а время - вдоль второй оси.Частотные интервалы зависят от количества выбранных БПФ, а временные интервалы зависят от длины скачка.

В следующем примере показано, как получить амплитуду в заданном месте на спектрограмме, а также соответствующее время и частотуэто местоположение.

import librosa
import numpy

filename = librosa.util.example_audio_file()
y, sr = librosa.load(filename)
n_fft = 1024
hop_length = 512

spec = numpy.abs(librosa.core.stft(y, n_fft=n_fft, hop_length=hop_length))
freqs = librosa.core.fft_frequencies(n_fft=n_fft)
times = librosa.core.frames_to_time(spec[0], sr=sr, n_fft=n_fft, hop_length=hop_length)

print('spectrogram size', spec.shape)

fft_bin = 14
time_idx = 1000

print('freq (Hz)', freqs[fft_bin])
print('time (s)', times[time_idx])
print('amplitude', spec[fft_bin, time_idx])

Точно так же вы можете перейти от частоты и времени к индексу в спектрограмме.Но так как он был дискретизирован, вы всегда должны округляться до ближайшего индекса.

...