Conversation
|
这个功能好啊 以前千千静听上是有的,希望原作者能合并到主线里。或者我该如何下载使用你的分支呢? |
|
刚刚尝试跑了一下代码,发现CTagLibHelper::GetReplayGain函数似乎无法正确获取到REPLAYGAIN_TRACK_GAIN的值,建议使用CAudioTag::GetAudioTagPropertyMap函数获取,同时将GetReplayGain的逻辑移到CAudioTag类中。 |
|
时间有点长了差点忘记了,回顾了一下,CAudioTag::GetAudioTagPropertyMap直接调用了taglib,我查看了taglib的官网,似乎并未提到任何有关响度均衡或replay gain的内容,实际使用时也确实无法直接使用taglib获取到REPLAYGAIN_TRACK_GAIN标签,所以只能另外获取标签,浏览后发现放在CTagLibHelper::OtherPropertyToSongInfo也许是更好的选择,所以CTagLibHelper::GetReplayGain的一部分逻辑移到了CTagLibHelper::OtherPropertyToSongInfo,另一部分逻辑是只针对MP4文件的,移到了CTagLibHelper::getM4aPropertyMap。 (之前单独用CTagLibHelper::GetReplayGain是因为播放用的IPlayerCore::Open(const wchar_t* file_path)函数只能接收文件名,和标签无关,但是响度均衡需要在播放时用到标签,所以为了在IPlayerCore::Open函数里获取到标签的值就这样写的。) 这个逻辑感觉挺复杂的,它不像一般的标签和播放无关,它是和播放有关的。倒是有点像均衡器,但是参数又要从标签中获取。 关于无法正确获取到REPLAYGAIN_TRACK_GAIN的值,我目前只测试了mp3、flac、mp4文件,均能正确获取,其他文件类型没有测试。 所以就看这个REPLAYGAIN_TRACK_GAIN标签怎么处理了,如果要和其他标签一样,那就是按照这个新提交的,并且需要修改CSongDataManager::SaveSongData和CSongDataManager::LoadSongData;如果是单独获取,那就是按照原来的。 细节关于标签的逻辑把replay_gain属性放到了SongInfo里,同时对应修改了SongInfo::CopyAudioTag,增加新的文件时可以正常获取标签,但是不敢修改CSongDataManager::SaveSongData和CSongDataManager::LoadSongData,这个改了可能影响很大,而且和版本号有关不敢乱改。所以现在增加新的文件时可以正常获取标签,如果已经播放过的文件需要用“重新载入播放列表”才能获取REPLAYGAIN_TRACK_GAIN标签。 关于播放的逻辑把ApplyReplayGain移到了CPlayer::MusicControl函数里的case Command::OPEN中,增加了IPlayerCore::ApplyReplayGain,CFfmpegCore和CMciCore里的ApplyReplayGain没有实现就先空着了。 |
现在会自动读取音频中的REPLAYGAIN_TRACK_GAIN标签(使用rsgain提取)并调整响度。 rsgain的目标标准化响度是-18 LUFS,表达的是再增加gain dB的响度就到达-18 LUFS了,但是由于平时下载的音乐的响度计算平均后为-10 LUFS,这里要计算的是再增加多少dB的响度就到达-10 LUFS。
关于标签的逻辑:CTagLibHelper::GetReplayGain的一部分逻辑移到了CTagLibHelper::OtherPropertyToSongInfo,另一部分逻辑是只针对MP4文件的,移到了CTagLibHelper::getM4aPropertyMap。 把replay_gain属性放到了SongInfo里,同时对应修改了SongInfo::CopyAudioTag,但是没有修改CSongDataManager::SaveSongData和CSongDataManager::LoadSongData,所以现在增加新的文件时可以正常获取标签,如果已经播放过的文件需要用“重新载入播放列表”才能获取REPLAYGAIN_TRACK_GAIN标签。 应用响度均衡的逻辑:现在将ApplyReplayGain移到了CPlayer::MusicControl函数里的case Command::OPEN中,增加了IPlayerCore::ApplyReplayGain虚函数,CFfmpegCore和CMciCore里的ApplyReplayGain暂时还没有实现就先空着了。
BassCore.cpp里一些多余的改动去掉; BassFxLibrary.h里要手动添加原先bass_fx.h的部分内容; 更改选项界面,增加响度均衡的复选框。
在修复之前,需要手动使用“重新载入播放列表”。 这个数据版本不确定是不是应该自增一,就先这样了。
由于每个音乐的响度不同,所以想看看有没有响度均衡的功能,看到#488 已经有人提到了,但是没有实现,于是自己实现了一下响度均衡的功能。
现在在选项中开启后,会自动读取音频中的REPLAYGAIN_TRACK_GAIN标签并调整响度,此标签是通过 rsgain 预先计算后以标签的形式保存到音频文件中的,是提前用rsgain的命令行工具计算好的。以后也许可以把rsgain集成到应用中,就像修改标签、下载歌词和封面的功能那样。(或者作者也可以看看有没有别的获取REPLAYGAIN_TRACK_GAIN的方法)
其他
rsgain的目标标准化响度是-18 LUFS,表达的是再增加gain dB的响度就到达-18 LUFS了,但是由于平时下载的音乐的响度计算平均后为-10 LUFS(根据自己的经验得出,可能有待调整),这里要计算的是再增加多少dB的响度就到达-10 LUFS。以及BASS_FX的调整是线性音量,需要把dB转换到线性系数。
顺便夸夸作者的软件真的非常好用!希望作者能在README文档里写下贡献指南之类的,新人第一次参与开源还是有点迷茫的。