Спектрограмма аудио питон, что делать?

Есть код питона
'''import sys, codecs
save_stdout = sys.stdout
sys.stdout = codecs.open("output.txt","w+")'''
import matplotlib.pyplot as plt
import scipy.io.wavfile
import numpy as np
Fs, X = scipy.io.wavfile.read('капля1.wav')
if isinstance(X[0], np.ndarray):  # стерео
        X = X.mean(1)
print(Fs, X.shape)
facecolor = '#D0ECE6'  # '#EDFAEA'
fig, axes = plt.subplots(figsize=(9, 4), facecolor=facecolor)
plt.xlabel('Время, c', fontsize='xx-large')
plt.ylabel('Частота, Гц', fontsize='xx-large')
# plt.title('Спектрограмма для колбы')
cmap = plt.get_cmap('magma')
try: T1, T2 = 15.03, 15.12  # (int(i) for i in input('Как обрезать?').split())
except: T1, T2 = 0, len(X)/Fs
t1, t2 = 1, 2  # (int(i) for i in input('Что выделить?').split())
plt.specgram(X[int(T1*Fs) : int(T2*Fs-len(X)) if len(X)!=T2*Fs else None], NFFT=64, pad_to=2048, mode='psd', Fs=Fs, noverlap=0,
             cmap=cmap)
# plt.colorbar(label='Уровень (дБ)', use_gridspec=False)
axes.add_artist(plt.Rectangle((t1-T1, 0), t2-t1, 100000, color='k', alpha=0.2))
axes.tick_params(labelsize='large', width=1)
fig.tight_layout()
plt.savefig('спектрограмма.png', facecolor=facecolor)
plt.show()

Выдает
5c49721167c3b435837037.png
Все вроде хорошо, но можно лучше (это audasity так сделала:
5c497231e5244308198056.pngТут можно увидеть, что Аudasity ориентируется на горизонтальные линии, а питон - на вертикальные (сорян, что пишу языком детсада, но по другому не умею).
Подскажите, пожалуйста, как в питоне можно сделать так же хорошо
  • Вопрос задан
  • 2418 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Alibaba2018
Я брал некоторое время назад курс Data Science Jose Portilla на udemy.com, где он очень много давал примеров как делать графики через MatplotLib и Seaborne.

Если не жалко $10-15, то не пожалеете, т.к. он приводит прим. такие же графики и обьясняет всю их подноготную.
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Тут надо "поиграться" параметрами. Или узнать как строит(параметры) её Аudasity.
почему тут NFFT=64, pad_to=2048, mode='psd', Fs=Fs, noverlap=0
вместо NFFT=256, pad_to=2048, mode='psd', Fs=Fs, noverlap=128
Ответ написан
@lz961
Спектрограммы отличаются длительностью окна. В примере, созданном с помощью audasity, окно анализа длиннее и, в результате, лучше частотное разрешение. В примере на Python окно короче, частотное разрешение хуже, но лучше временное. Попробуйте увеличить NFFT (длительность окна в отчетах), параметрами играть придется в любом случае.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы