Задать вопрос
SladkayaDoza
@SladkayaDoza
Обучаюсь программированию

Как достичь точности по времени при выводе чего либо в консоль?

Я хочу сделать вывод спектра аудио файла по его hz, с помощью librosa я смог получить спектр и преобразовать его (возможно не правильно) в цифровые значения, но возникла проблема что вывод не успевает выводить семплы из цикла for поэтому он зачастую опаздывает и выводит позже, как можно это реализовать и синхронизировать звук с выводом спектра?
Код:
import librosa
import numpy as np
import matplotlib.pyplot as plt
import librosa.display
import time
print("load")
def rotate(arr):
    out = []
    for i in range(len(arr[0])):
        new = []
        for b in arr:
            new.append(b[i])
        out.append(new)
    return out

# arr = [[1,2,3],[1,2,3]]
# print(rotate(arr)) # [[1,1],[2,2],[3,3]]

y, sr = librosa.load('41_1.wav', sr=8000, mono=True)  # sr - частота аудио

melspec = librosa.feature.melspectrogram(y=y, sr=sr)
melspec = librosa.power_to_db(melspec).astype(np.float32)
nmelspec = np.array(rotate(melspec))
print(len(nmelspec))
print(len(nmelspec[0]))

for i in range(len(nmelspec)):
    oneTime = time.time()
    hz20_100 = max(nmelspec[i][:20])
    hz100_300 = max(nmelspec[i][20:50])
    hz300_1000 = max(nmelspec[i][50:90])
    hz1000_5000 = max(nmelspec[i][90:110])
    hz5000_20000 = max(nmelspec[i][110:127])
    if hz20_100 < 0: print(0)
    else: print("0"*(int(hz20_100/4)+1))
    if hz100_300 < 0: print(0)
    else: print("0"*(int(hz100_300/4)+1))
    if hz300_1000 < 0: print(0)
    else: print("0"*(int(hz300_1000/4)+1))
    if hz1000_5000 < 0: print(0)
    else: print("0"*(int(hz1000_5000/4)+1))
    if hz5000_20000 < 0: print(0)
    else: print("0"*(int(hz5000_20000/4)+1))
    print("---------------------")
    time.sleep(70/len(nmelspec)-(time.time()-oneTime))  # 70 секунд длится запись в аудио файле
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM Куратор тега Python
Delphi Developer, сис. админ
Код у тебя медленный. Замерь выполнение одной итерации цикла и всё увидишь
Ответ написан
Ваш ответ на вопрос

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

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