Децибел значения в определенных точках в файле WAV

2

Я пытаюсь измерить вывод и выводить из wav файла. Предпочтительно первый и последний 5 секунд или около того. Я в основном пытаюсь присвоить числовое значение, которое означает "эта песня имеет медленное лидерство" или "Эта песня имеет резкий конец".

Мое мышление состояло в том, чтобы получить наклон значений дБ, но я не могу найти инструмент командной строки linux, который даст мне значения дБ. Я знаю, что их можно измерить, потому что Audacity имеет вид сигнала (db).

Изображение 174551

В принципе, я ищу способ собрать точки данных, чтобы дублировать этот график, чтобы я мог получить наклон.

EDIT - работа в java

  • 1
    Я согласен с ответом Исаака, что вы, вероятно, не найдете никаких инструментов командной строки, чтобы сделать это, но проблема довольно плохо определена. Позвольте мне подчеркнуть, что вам не обязательно нужны значения в дБ, чтобы определить, есть ли у песни резкое или медленное начало или конец. На самом деле, график в Audacity не использует дБ. Есть много ответов на SO о рисовании сигналов в Java, а также, я полагаю, C и Javascript.
  • 0
    @BjornRoche, если график не использует дБ, то почему они называют его волновой формой (дБ)? (Это в дополнение к их другим представлениям: Форма волны, Спектограмма, Журнал спектограммы (f) и Высота (EAC)). Если получить значения регулярного сигнала проще, я рассмотрю это.
Показать ещё 4 комментария
Теги:
audio
command-line

2 ответа

4

Я не знаю каких-либо средств командной строки для этого, но писать 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)

  • 0
    Я знаю, что ОП спрашивал о дБ, но не нужно преобразовывать в дБ для создания осциллограммы или обзора осциллограммы. см. например: stackoverflow.com/questions/11091924/…
  • 0
    @ К сожалению, я не знаю Python. Я редактировал, что я работаю в Java. Если ваш пример кода завершен, я думаю, мне просто нужно знать, как получить модуль scipy.io.wavfile.
Показать ещё 2 комментария
0

Вот лишь некоторые из вопросов о том, как читать аудиофайлы и рисовать формы сигналов и осциллограммы в Java.

Как создать звуковой файл в Java

Как я могу извлечь данные из моего wav файла?

Java-программа для создания формы PNG для аудиофайла

  • 0
    спасибо за эти ссылки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню