Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Serge A. Suchkov                     2:5020/400     29 May 2003  15:02:42
 To : Oleg Redzuk
 Subject : Re: xmms + russian
 -------------------------------------------------------------------------------- 
 
 Oleg Redzuk wrote:
 
 > Hello Alexey.
 >
 > Wed Apr 16 2003 22:23, you wrote to Evgeny Kulakov:
 >
 >  AM> просто id3tag в кодровке cp1251 , советую поставить пропаченный xmms из
 >  AM> asp linux
 >
 > А тогда такой вопpос
 > Выходит что сp1251 стал стандаpт де факто для id3tag?
 > Как быть то? Всегда использовать 1251 хотя для линукса он не pодной, или
 > пpописывать тэги в кои8 и иметь гемоpой в windows?
 > Может есть надежда на юникод или еще какой нить волшебный способ?
 >
 
 Hу чтото типа этого я делал (только за давностью лет для версии 1.2.6)
 
 вот патчик - желающие могут выкинуть проверку локали (сейчас она уже давно не
 везде ru_RU.KOI8-R)
 и доработать определитель кодировок  (у меня он ошибался примерно в 1 случае из
 500 )
 
 diff -ur xmms-1.2.6/Input/mpg123/configure.c
 xmms-1.2.6-ss/Input/mpg123/configure.c
 - --- xmms-1.2.6/Input/mpg123/configure.c Wed May  9 00:14:13 2001
 +++ xmms-1.2.6-ss/Input/mpg123/configure.c      Tue Dec 24 15:36:50 2002
 @@ -28,7 +28,7 @@
  static GtkWidget *streaming_cast_title, *streaming_udp_title;
  static GtkWidget *streaming_proxy_hbox, *streaming_proxy_auth_hbox,
 *streaming_save_dirbrowser;
  static GtkWidget *streaming_save_hbox, *title_id3_box, *title_tag_desc;
 -static GtkWidget *title_override, *title_id3_entry, *title_id3v2_disable;
 +static GtkWidget *title_override, *title_id3_entry, *title_id3v2_disable,
 *title_id3_convert;
 
  MPG123Config mpg123_cfg;
 
 @@ -108,6 +108,10 @@
 
         mpg123_cfg.title_override =
 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_override));
         mpg123_cfg.disable_id3v2 =
 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_id3v2_disable));
 +
 +       if(strstr(getenv("LC_MESSAGES"),"ru_RU.KOI8-R"))
 +           mpg123_cfg.title_id3_convert =
 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_id3_convert));
 +
         g_free(mpg123_cfg.id3_format);
         mpg123_cfg.id3_format =
 g_strdup(gtk_entry_get_text(GTK_ENTRY(title_id3_entry)));
 
 @@ -139,6 +143,10 @@
         xmms_cfg_write_boolean(cfg, "MPG123", "use_udp_channel",
 mpg123_cfg.use_udp_channel);
         xmms_cfg_write_boolean(cfg, "MPG123", "title_override",
 mpg123_cfg.title_override);
         xmms_cfg_write_boolean(cfg, "MPG123", "disable_id3v2",
 mpg123_cfg.disable_id3v2);
 +
 +        if(strstr(getenv("LC_MESSAGES"),"ru_RU.KOI8-R"))
 +          xmms_cfg_write_boolean(cfg, "MPG123", "title_id3_convert",
 mpg123_cfg.title_id3_convert);
 +
         xmms_cfg_write_string(cfg, "MPG123", "id3_format",
 mpg123_cfg.id3_format);
         xmms_cfg_write_boolean(cfg, "MPG123", "detect_by_content",
 mpg123_cfg.detect_by_content);
  #ifdef USE_3DNOW
 @@ -604,11 +612,18 @@
                                      mpg123_cfg.disable_id3v2);
         gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_id3v2_disable, FALSE,
 FALSE, 0);
 
 +/* - Convert cp1251 to koi8-r  -*/
 +        if(strstr(getenv("LC_MESSAGES"),"ru_RU.KOI8-R")) {
 +        title_id3_convert = gtk_check_button_new_with_label(_("Convert ID3
 tags from cp1251 to koi8-r encoding"));
 +        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(title_id3_convert),
 +                                    mpg123_cfg.title_id3_convert);
 +        gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_id3_convert, FALSE,
 FALSE, 0);
 +       }
 +/* -- */
         title_override = gtk_check_button_new_with_label(_("Override generic
 titles"));
         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(title_override),
 mpg123_cfg.title_override);
         gtk_signal_connect(GTK_OBJECT(title_override), "clicked",
 title_override_cb, NULL);
         gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_override, FALSE,
 FALSE, 0);
 -
         title_id3_box = gtk_hbox_new(FALSE, 5);
         gtk_widget_set_sensitive(title_id3_box, mpg123_cfg.title_override);
         gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_id3_box, FALSE,
 FALSE, 0);
 diff -ur xmms-1.2.6/Input/mpg123/fileinfo.c
 xmms-1.2.6-ss/Input/mpg123/fileinfo.c
 - --- xmms-1.2.6/Input/mpg123/fileinfo.c  Sat Jun 16 03:08:19 2001
 +++ xmms-1.2.6-ss/Input/mpg123/fileinfo.c       Tue Dec 24 15:25:46 2002
 @@ -419,6 +419,13 @@
                         if (!strncmp(tag.tag, "TAG", 3))
                         {
                                 id3_found = TRUE;
 +
 +                               if(mpg123_cfg.title_id3_convert &&
 analyze_encoding(tag.title,30)
 
 >0){
 
 +                                  xlat( tag.title,30,0);
 +                                  xlat( tag.artist,30,0);
 +                                  xlat( tag.album,30,0);
 +                                 }
 +
                                 set_entry_tag(GTK_ENTRY(title_entry),
                                               tag.title, 30);
                                 set_entry_tag(GTK_ENTRY(artist_entry),
 diff -ur xmms-1.2.6/Input/mpg123/mpg123.c xmms-1.2.6-ss/Input/mpg123/mpg123.c
 - --- xmms-1.2.6/Input/mpg123/mpg123.c    Tue Jan  8 18:59:16 2002
 +++ xmms-1.2.6-ss/Input/mpg123/mpg123.c Tue Dec 24 16:13:21 2002
 @@ -5,6 +5,22 @@
  #include <stdlib.h>
  #include <pthread.h>
 
 +const char
 WinCode[66]={0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0x
 cd,0xce,
 
 +
 0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,
 +                        0xde,0xdf,0xe0,
 +
 0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
 +
 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,
 +                        0xff,0xa8,0xb8
 +                       };
 +
 +const char
 KoiCode[66]={0xe1,0xe2,0xf7,0xe7,0xe4,0xe5,0xf6,0xfa,0xe9,0xea,0xeb,0xec,0xed,0x
 ee,0xef,
 
 +
 0xf0,0xf2,0xf3,0xf4,0xf5,0xe6,0xe8,0xe3,0xfe,0xfb,0xfd,0xff,0xf9,0xf8,0xfc,
 +                        0xe0,0xf1,0xc1,
 +
 0xc2,0xd7,0xc7,0xc4,0xc5,0xd6,0xda,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,
 +
 0xd2,0xd3,0xd4,0xd5,0xc6,0xc8,0xc3,0xde,0xdb,0xdd,0xdf,0xd9,0xd8,0xdc,0xc0,
 +                        0xd1,0xb3,0xa3
 +                       };
 +
  static const long outscale = 32768;
 
  static struct frame fr, temp_fr;
 @@ -66,6 +82,55 @@
         N_("Anime"), N_("JPop"), N_("Synthpop")
  };
 
 +gint analyze_encoding(gchar* Buff, gint len)
 +{
 +int i,j,ret,is_rusUP=0,is_rusDOWN=0;
 +for(i=0;i<len;i++) {
 +    for(j=0;j<sizeof(WinCode);j++) {
 +        if(WinCode[j]==Buff[i]) {
 +           if(j < 0x20)
 +              is_rusDOWN++;
 +           else
 +              is_rusUP++;
 +           break;
 +          }
 +       }
 +   }
 +if(is_rusUP+is_rusDOWN) {
 +   ret = is_rusUP-is_rusDOWN;
 +   return ret;
 +}
 +else
 +return 0;
 +}
 +
 +void xlat(gchar* Buff, gint len, gint _enc)
 +{
 +gint  i,n,k,j;
 +
 +gchar* SrcEnc;
 +gchar* DstEnc;
 +
 +DstEnc = SrcEnc = WinCode;
 +
 +if(_enc == 0) {
 +  SrcEnc = WinCode;
 +  DstEnc = KoiCode;
 +} else {
 +  SrcEnc = KoiCode;
 +  DstEnc = WinCode;
 +}
 +for(i=0;i<len;i++) {
 +    for(j=0;j<sizeof(WinCode);j++) {
 +        if(SrcEnc[j]==Buff[i]) {
 +           Buff[i]=DstEnc[j];
 +           break;
 +          }
 +       }
 +   }
 +}
 +
 +
  double mpg123_compute_tpf(struct frame *fr)
  {
         const int bs[4] = {0, 384, 1152, 1152};
 @@ -180,7 +245,8 @@
         mpg123_cfg.cast_title_streaming = FALSE;
         mpg123_cfg.use_udp_channel = TRUE;
         mpg123_cfg.title_override = FALSE;
 -       mpg123_cfg.disable_id3v2 = FALSE;
 +       mpg123_cfg.title_id3_convert = FALSE;
 +        mpg123_cfg.disable_id3v2 = FALSE;
         mpg123_cfg.detect_by_content = FALSE;
         mpg123_cfg.use_3dnow = 0;
 
 @@ -207,6 +273,7 @@
         xmms_cfg_read_string(cfg, "MPG123", "proxy_pass",
 &mpg123_cfg.proxy_pass);
 
         xmms_cfg_read_boolean(cfg, "MPG123", "title_override",
 &mpg123_cfg.title_override);
 +       xmms_cfg_read_boolean(cfg, "MPG123", "title_id3_convert",
 &mpg123_cfg.title_id3_convert);
         xmms_cfg_read_boolean(cfg, "MPG123", "disable_id3v2",
 &mpg123_cfg.disable_id3v2);
         if (!xmms_cfg_read_string(cfg, "MPG123", "id3_format",
 &mpg123_cfg.id3_format))
                 mpg123_cfg.id3_format = g_strdup("%p - %t");
 @@ -517,16 +584,31 @@
  void mpg123_id3v1_to_id3v2(struct id3v1tag_t *v1, struct id3tag_t *v2)
  {
         memset(v2,0,sizeof(struct id3tag_t));
 +
 +       if(mpg123_cfg.title_id3_convert && analyze_encoding(v1->title,30)>0)
 +          xlat(v1->title,30,0);
         strncpy(v2->title, v1->title, 30);
 +
 +       if(mpg123_cfg.title_id3_convert && analyze_encoding(v1->artist,30)>0)
 +          xlat(v1->artist,30,0);
         strncpy(v2->artist, v1->artist, 30);
 +
 +       if(mpg123_cfg.title_id3_convert && analyze_encoding(v1->album,30)>0)
 +          xlat(v1->album,30,0);
         strncpy(v2->album, v1->album, 30);
 +
 +       if(mpg123_cfg.title_id3_convert &&
 analyze_encoding(v1->u.v1_0.comment,30)
 
  >0 )
 
 +          xlat(v1->u.v1_0.comment,30,0);
         strncpy(v2->comment, v1->u.v1_0.comment, 30);
 +
         strncpy(v2->genre, get_id3_genre(v1->genre), sizeof (v2->genre));
 +
         g_strstrip(v2->title);
         g_strstrip(v2->artist);
         g_strstrip(v2->album);
         g_strstrip(v2->comment);
         g_strstrip(v2->genre);
 +
         v2->year = atoi(v1->year);
 
         /* Check for v1.1 tags. */
 @@ -539,7 +621,10 @@
  static char* mpg123_getstr(char* str)
  {
         if (str && strlen(str) > 0)
 -               return str;
 +       {
 +        return str;
 +       }
 +
         return NULL;
  }
 
 diff -ur xmms-1.2.6/Input/mpg123/mpg123.h xmms-1.2.6-ss/Input/mpg123/mpg123.h
 - --- xmms-1.2.6/Input/mpg123/mpg123.h    Wed Sep 19 01:34:19 2001
 +++ xmms-1.2.6-ss/Input/mpg123/mpg123.h Tue Dec 24 15:21:12 2002
 @@ -39,6 +39,9 @@
  #define         MPG_MD_DUAL_CHANNEL     2
  #define         MPG_MD_MONO             3
 
 +extern const char WinCode[66];
 +extern const char KoiCode[66];
 +
  struct id3v1tag_t {
         char tag[3]; /* always "TAG": defines ID3v1 tag 128 bytes before EOF */
 
         char title[30];
 @@ -147,6 +150,7 @@
         gboolean title_override, disable_id3v2;
         gboolean detect_by_content;
         gint use_3dnow;
 +       gboolean title_id3_convert;
  }
  MPG123Config;
 
 @@ -292,6 +296,8 @@
  void mpg123_get_id3v2(id3_t * id3d, struct id3tag_t *tag);
  gchar *mpg123_format_song_title(struct id3tag_t *tag, gchar *filename);
  double mpg123_relative_pos(void);
 +gint analyze_encoding(gchar* Buff, gint len);
 +void xlat(gchar* Buff, gint len, gint _enc);
 >
 > Oleg
 >
 > ... Раздался девичий кpик, плавно пеpеходящий в женский...
 
 --
 Serge A. Suchkov
 Dipl. Eng.
 HVOF research group
 Power Engineering Research Institute
 Bauman State Technical University, Moscow
 -----------------------------------------
 Phone: +7(095) 263-69-74 E-Mail: ss@e1.bmstu.ru
 --- ifmail v.2.15dev5
  * Origin: BMSTU (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 xmms + russian   Vitaly Kovalev   08 Apr 2003 08:04:55 
 Re: xmms + russian   Alex Antropoff   08 Apr 2003 16:30:31 
 xmms + russian   Vitaly Kovalev   09 Apr 2003 13:50:26 
 xmms + russian   Valery Shishkov   10 Apr 2003 08:27:11 
 xmms + russian   Mykola Lyakhovych   13 Apr 2003 15:50:37 
 xmms + russian   ilya voronin   13 Apr 2003 22:24:22 
 Re: xmms + russian   Alexander Ogol   09 Apr 2003 02:07:30 
 Re: xmms + russian   Dmitriy Kuryshev   14 Apr 2003 19:48:34 
 xmms + russian   Alexey Miller   16 Apr 2003 22:42:46 
 RE: xmms + russian   Evgeny Kulakov   10 Apr 2003 20:33:37 
 xmms + russian   Alexey Miller   16 Apr 2003 22:23:00 
 xmms + russian   Oleg Redzuk   18 Apr 2003 08:13:18 
 Re: xmms + russian   Serge A. Suchkov   29 May 2003 15:02:42 
 xmms + russian   Sergey Bestuzhev   18 Apr 2003 18:40:52 
 Re: xmms + russian   Michael Shigorin   18 Apr 2003 21:05:50 
 Re: xmms + russian   Andrey Slusar   21 Apr 2003 22:27:35 
 xmms + russian   Nikita Melnikov   19 Apr 2003 13:24:42 
 Re: xmms + russian   Vladimir Mosgalin   21 Apr 2003 00:20:45 
 xmms + russian   Nikita Melnikov   23 Apr 2003 00:33:12 
 xmms + russian   Alexey Miller   18 Apr 2003 20:55:00 
 Re: xmms + russian   Vladimir Mosgalin   18 Apr 2003 23:58:49 
 Re: Re: xmms + russian   Alexandr S. Agranovsky   22 Apr 2003 06:16:04 
 Re: xmms + russian   Michael Shigorin   18 Apr 2003 21:05:48 
 xmms + russian   Alexander Stavitsky   26 Apr 2003 10:25:12 
Архивное /ru.linux/55258c8323db.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional