我的 Rhythmbox 库里有 The Offspring 的 Greatest Hits 和 Queen 的 Greatest Hits。按专辑排序时,结果如下:
我怎样才能让 rhythmbox 按专辑排序,以致于它不会交错不同艺术家创作的同名专辑?
答案1
开箱即用,rhythmbox 无法区分不同的“最热门歌曲”专辑,因为它将专辑标题视为唯一标识符。
通过 rhythmbox 插件coverart-浏览器,我们将专辑标题和专辑艺术家都视为唯一标识符。
如图所示 - 两位艺术家拥有相同的“最热门歌曲”标题,但由于两张专辑出自不同的艺术家之手,因此专辑是分开显示的。
您应该注意 - 当翻录 CD 时,通常不会翻录专辑艺术家而是留空。
更糟糕的是,对于多位艺术家的专辑(合辑),专辑艺术家和艺术家字段也都留空。因此,您可能会得到两张标题完全相同的专辑。
这里的技巧是选择一张专辑的所有曲目,右键单击并选择属性,然后填写专辑艺术家字段以使其唯一
请参阅下面的链接以获取安装说明。
相关问题:
答案2
我在各种系统和不同的播放器上都看到过这个问题,我想到唯一的解决方案就是用艺术家作为前缀来命名专辑。
例如:
“Red Hot Chilli Peppers 最佳热门歌曲”,而不仅仅是“最佳热门歌曲”。
我知道这需要大量工作,但如果有人有更好的方法,我很乐意听到。
答案3
您无法在 Rhythmbox 中执行此操作。但是,我认为这种情况发生是一个错误。您应该在上游打开一个有关此问题的错误(如果尚未打开)。应该其做法是,按专辑排序,然后按专辑艺术家排序,然后按艺术家排序,然后按唱片编号排序,最后按曲目编号排序。但是,目前它还没有这样做。
答案4
我是一名开发人员,并将“按艺术家排序”添加到“rhythmdb_query_model_album_sort_func” - 见下文。
如果您是最终用户,能够为系统做好软件包构建准备,修补源,构建新软件包,安装,然后继续!;-)。
此补丁使用 rb v2.97 完成,较新的版本可能有不同的行号(尚未检查)但基本上代码应该是相同的。
Description: sort albums with same title first by artist, remove unnecesary space and tab
--- rhythmbox-2.97.orig/rhythmdb/rhythmdb-query-model.c
+++ rhythmbox-2.97/rhythmdb/rhythmdb-query-model.c
@@ -2192,7 +2192,7 @@ rhythmdb_query_model_drag_data_received
return FALSE;
}
-/*
+/*
* determines whether reordering is possible by checking up
* the chain for a model with a sort function set.
*/
@@ -2921,7 +2921,7 @@
* @data: nothing
*
* Sort function for sorting by album. Sorts by album, then
- * disc number, then track number, then title.
+ * artist, then disc number, then track number, then title.
*
* Returns: result of sort comparison between a and b.
*/
@@ -2959,6 +2959,31 @@ rhythmdb_query_model_album_sort_func (Rh
if (ret != 0)
return ret;
+ /* Then by artist */
+ a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_ARTIST_SORTNAME_SORT_KEY);
+ if (a_val[0] == '\0') {
+ a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_ARTIST_SORT_KEY);
+ }
+ b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_ARTIST_SORTNAME_SORT_KEY);
+ if (b_val[0] == '\0') {
+ b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_ARTIST_SORT_KEY);
+ }
+
+ if (a_val == NULL) {
+ if (b_val == NULL)
+ ret = 0;
+ else
+ ret = -1;
+ } else if (b_val == NULL)
+ ret = 1;
+ else
+ ret = strcmp (a_val, b_val);
+
+ if (ret != 0)
+ return ret;
+ /*else
+ return rhythmdb_query_model_album_sort_func (a, b, data); */
+
/* Then by disc number (assume 1 if non-existent) */
a_num = rhythmdb_entry_get_ulong (a, RHYTHMDB_PROP_DISC_NUMBER);
b_num = rhythmdb_entry_get_ulong (b, RHYTHMDB_PROP_DISC_NUMBER);
@@ -3168,7 +3193,7 @@
gpointer data)
{
gulong a_val, b_val;
-
+
if (rhythmdb_entry_is_lossless (a)) {
if (rhythmdb_entry_is_lossless (b))
return rhythmdb_query_model_location_sort_func (a, b, data);