Определить основную частоту говорящего голоса - PullRequest
2 голосов
/ 22 сентября 2019

Я пытаюсь определить воспринимаемую высоту звукового образца (только голос, без фона или музыки), чтобы затем идентифицировать голос как бас, тенор, альт, меццо-сопрано, сопрано.

Для выполненияпоэтому я использую aubio, который возвращает список временных кодов и соответствующую частоту любого данного аудиофайла.

Я изо всех сил пытаюсь найти наилучший способ использования данных для определения высоты тона.Моя первоначальная идея либо просто нехороша, либо плохо выполнена:

  1. Я беру список частот, возвращаемых aubio, и вычисляю медиану так:
// iterate through the time/frequencies returned by aubio
// $output is a list of number pairs (one pair per line):
// The timecode followed by a whitespace followed by the frequency
// at that timecode in hertz.

foreach($output as $sample) {

    // extract frequency information
    $freq_sample=substr($sample,strpos($sample,' '));

    // add frequency to array
    $freqs[]=floor($freq_sample);

}       

// to calculate median frequency: sort array with frequencies
// and fetch the element in the middle

sort($freqs);
$median=$freqs[floor(count($freqs)/2)];
Затем я беру медианную найденную частоту и сопоставляю ее с "басами", "баритоном", "тенором", "альтом" и т. Д.

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

Я считаю, что способ, которым я пытаюсь определить основную частоту, имеет недостаток, но я изо всех сил пытаюсь придуматьлучший подход.

Возникают, например, следующие вопросы:

  1. Должен ли я отказаться от любых частот выше, например, 400 Гц, поскольку они, вероятно, из звуков, подобных "s""и т. д .?

  2. Когда люди воспринимают высоту голоса, что мы на самом деле слушаем?Основная частота?Энергия определенных частот?

Общий вопрос, который суммирует это:

«Используя данные aubio, каков правильный программный подход для расчета воспринимаемого шагазаписи голоса (говорить, не петь)? "

РЕДАКТИРОВАТЬ - КАК Я ИСПОЛЬЗУЮ AUBIO

exec('aubiopitch /pathtomp3file/audio.mp3',$output);
...