如何实现音乐风格的分析


很多网站会对音乐加上标签,比如 压抑/平静/明快/优美等。

人工标记肯定占一定比例,但是从数量来看应该有很大一部分是机器自动标记的,请问这是如何实现的,有没有好的项目可以参考

语音识别 音视频开发

Lyricus 12 years, 2 months ago
  1. 通常的思路是对音频编码进行分析,然后得出是哪个风格。这种方式需要对现有的各种风格进行采样并提取出通用的判断样本。因此实施难度会比较大。

  2. 一个讨巧的方式,是音频文件本身就会有一些流派的标志信息,保存在文件的头中。比如,mp3文件中,可以这样得到文件的流派信息(php代码):

   
  // get v1 info
  
function _get_v1_info()
{
$ret = array();
$tmpa = array('Title', 'Artist', 'Copyright', 'Description', 'Year', 'AlbumTitle');
foreach ($tmpa as $tmp)
{
$ret[$tmp] = $this->head1[$tmp];
if ($pos = strpos($ret[$tmp], ""))
$ret[$tmp] = substr($ret[$tmp], 0, $pos);
}
// count the Genre, [Track]
if ($this->head1['Reserved'] == 0) $ret['Track'] = $this->head1['Track'];
else $ret['Description'] .= chr($ret['Reserved']) . chr($ret['Track']);
// Genre_idx
$g = $this->head1['Genre'];
if (!isset($this->genres[$g])) $ret['Genre'] = 'Unknown';
else $ret['Genre'] = $this->genres[$g];
// return the value
$ret['ID3v1'] = 'yes';
return $ret;
}

其中提到的风格流派,有个相对完整的列表:

   
  var $genres = array('Blues','Classic Rock','Country','Dance','Disco','Funk','Grunge','Hip-Hop','Jazz','Metal','New Age','Oldies','Other','Pop','R&B','Rap','Reggae','Rock','Techno','Industrial','Alternative','Ska','Death Metal','Pranks','Soundtrack','Euro-Techno','Ambient','Trip-Hop','Vocal','Jazz+Funk','Fusion','Trance','Classical','Instrumental','Acid','House','Game','Sound Clip','Gospel','Noise','AlternRock','Bass','Soul','Punk','Space','Meditative','Instrumental Pop','Instrumental Rock','Ethnic','Gothic','Darkwave','Techno-Industrial','Electronic','Pop-Folk','Eurodance','Dream','Southern Rock','Comedy','Cult','Gangsta','Top 40','Christian Rap','Pop/Funk','Jungle','Native American','Cabaret','New Wave','Psychadelic','Rave','Showtunes','Trailer','Lo-Fi','Tribal','Acid Punk','Acid Jazz','Polka','Retro','Musical','Rock & Roll','Hard Rock','Unknown');
 

其他语言以及其他音频格式的处理方式类似。
更加详细的代码可以 参考这里

终于注册成功了 answered 12 years, 2 months ago

Your Answer