Я пытаюсь измерить вывод и выводить из wav файла. Предпочтительно первый и последний 5 секунд или около того. Я в основном пытаюсь присвоить числовое значение, которое означает "эта песня имеет медленное лидерство" или "Эта песня имеет резкий конец".
Мое мышление состояло в том, чтобы получить наклон значений дБ, но я не могу найти инструмент командной строки linux, который даст мне значения дБ. Я знаю, что их можно измерить, потому что Audacity имеет вид сигнала (db).
В принципе, я ищу способ собрать точки данных, чтобы дублировать этот график, чтобы я мог получить наклон.
EDIT - работа в java
Я не знаю каких-либо средств командной строки для этого, но писать python script с помощью этой функции довольно просто, используя библиотеки scipy
.
Мы можем использовать scipy.io.wavfile
для ввода файла IO, а затем сами вычислять значения дБ (обратите внимание, что это не обязательно будет стандартным значением дБ, так как это будет зависеть от ваших динамиков и настроек громкости).
Сначала мы получаем файл:
from scipy.io.wavfile import read
samprate, wavdata = read('file.wav')
Затем мы разбиваем файл на куски, где количество блоков зависит от того, насколько точно вы хотите измерить громкость:
import numpy as np
chunks = np.array_split(wavdata, numchunks)
Наконец, мы вычисляем объем каждого фрагмента:
dbs = [20*log10( sqrt(mean(chunk**2)) ) for chunk in chunks]
где dbs
теперь представляет собой список значений дБ (опять же, не обязательно истинные уровни звука SPL) для каждого фрагмента вашего файла.
Вы также можете легко разделить данные по-другому, используя перекрывающиеся куски и т.д.
Литература: - scipy.io.wavfile - dB (SPL)
Вот лишь некоторые из вопросов о том, как читать аудиофайлы и рисовать формы сигналов и осциллограммы в Java.
Как создать звуковой файл в Java