diff options
author | Hans Oesterholt <hans@oesterholt.net> | 2013-01-16 17:32:16 +0100 |
---|---|---|
committer | Hans Oesterholt <hans@oesterholt.net> | 2013-01-16 17:32:16 +0100 |
commit | 5634c40efd8f5ee11288a0dd0ca8205f08431c82 (patch) | |
tree | 1db82fb1b55fe94c03f07a460c42604da76d27d7 | |
parent | d665b4b7afdc2c3ee96623227b2869f1f8c98f3d (diff) |
CueSheets: mp3splt tags are UTF-8, which is of couse ok. However some devices, like the Philips GoGear don't support utf-8 tags. So we use TagLib to rewrite the Tags
-rw-r--r-- | src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs | 11 | ||||
-rw-r--r-- | src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs | 71 | ||||
-rw-r--r-- | src/CueSheets/CueSheets.csproj | 4 | ||||
-rw-r--r-- | src/CueSheets/Makefile.am | 2 |
4 files changed, 84 insertions, 4 deletions
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs b/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs index 06a7525..fc291de 100644 --- a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs +++ b/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs @@ -12,6 +12,13 @@ namespace Banshee.CueSheets } private void CreateGui() { + Gtk.FileChooserButton fc=new Gtk.FileChooserButton("Choose directory to put your splitted files",Gtk.FileChooserAction.SelectFolder); + string fn=Banshee.Configuration.ConfigurationClient.Get<string>("cuesheets_todevice",""); + if (fn!="") { fc.SelectFilename(fn); } + fc.FileSet+=new EventHandler(delegate(Object sender,EventArgs args) { + fn=fc.Filename; + Banshee.Configuration.ConfigurationClient.Set<string>("cuesheets_todevice",fn); + }); Gtk.Button btn=new Gtk.Button("Split!"); Gtk.ProgressBar bar=new Gtk.ProgressBar(); Gtk.ProgressBar nr=new Gtk.ProgressBar(); @@ -19,7 +26,8 @@ namespace Banshee.CueSheets btn.Clicked+=delegate(object sender,EventArgs args) { ok.Sensitive=false; _splt.SplitWithPaths (); - _splt.SplitToDir ("/tmp"); + //_splt.convertToLatin1 (); + _splt.SplitToDir (fn,true); GLib.Timeout.Add(10,delegate () { bar.Fraction=_splt.ProgressOfCurrentTrack; int n=_splt.ProgressNTracks; @@ -30,6 +38,7 @@ namespace Banshee.CueSheets return !_splt.SplitFinished; }); }; + base.VBox.Add (fc); base.VBox.Add (nr); base.VBox.Add (bar); base.VBox.Add (btn); diff --git a/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs b/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs index 0a3db4e..6e6546a 100644 --- a/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs +++ b/src/CueSheets/Banshee.CueSheets/mp3splt/Mp3Split.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Text; using System.Threading; using System.Runtime.CompilerServices; +using System.IO; namespace Banshee.CueSheets { @@ -76,11 +77,18 @@ namespace Banshee.CueSheets private int _progress_current_track; private float _progress_of_current_track; private bool _finished; + private string _file_format; + + private bool _convert_to_latin1; + private string _directory; + + private CueSheet _sheet; public delegate void ProgressCallBack(IntPtr progres,IntPtr data); public Mp3Split (CueSheet s) { int error=0; + _sheet=s; _mp3_state=mp3splt_new_state (out error); error=mp3splt_find_plugins (_mp3_state); @@ -89,6 +97,7 @@ namespace Banshee.CueSheets mp3splt_set_int_option(_mp3_state,Mp3SpltOptions.SPLT_OPT_SET_FILE_FROM_CUE_IF_FILE_TAG_FOUND,1); mp3splt_set_int_option(_mp3_state,Mp3SpltOptions.SPLT_OPT_OUTPUT_FILENAMES,(int) SpltOutputFileNamesOptions.SPLT_OUTPUT_FORMAT); mp3splt_set_oformat(_mp3_state,"@A - @b - @n - @t",out error); + _file_format="@A - @b - @n - @t"; mp3splt_put_cue_splitpoints_from_file(_mp3_state,s.cueFile (),out error); mp3splt_set_default_genre_tag(_mp3_state,s.genre ()); @@ -111,6 +120,7 @@ namespace Banshee.CueSheets int error=0; mp3splt_set_int_option(_mp3_state,Mp3SpltOptions.SPLT_OPT_CREATE_DIRS_FROM_FILENAMES,1); mp3splt_set_oformat(_mp3_state,"@A/@b/@n @t",out error); + _file_format="@A/@b/@n @t"; } public int ProgressCurrentTrack { @@ -151,21 +161,67 @@ namespace Banshee.CueSheets private void Splitter() { int result=mp3splt_split (_mp3_state); + if (result>=0) { + Hyena.Log.Information ("convert to latin1="+_convert_to_latin1); + if (_convert_to_latin1) { + convertToLatin1 (); + } + } SplitFinished=true; Hyena.Log.Information ("splitresult="+result); } - public void SplitToDir(string directory) { - + public void SplitToDir(string directory,bool convert_to_latin1) { mp3splt_set_path_of_split(_mp3_state,directory); mp3splt_set_progress_function (_mp3_state,new ProgressCallBack(Progress),IntPtr.Zero); SplitFinished=false; + _convert_to_latin1=convert_to_latin1; + _directory=directory; Thread split_thread=new Thread(new ThreadStart(Splitter)); split_thread.Start (); Hyena.Log.Information ("thread:"+split_thread); //Hyena.Log.Information ("split-to-dir: result="+result); } + public void convertToLatin1() { + setLatinTags (_sheet); + } + + private void setLatinTags(CueSheet s) { + int i,N; + for(i=0,N=s.nEntries ();i<N;i++) { + ProgressCurrentTrack=i; + setLatinTag (i,s,s.entry (i)); + } + } + + private void setLatinTag(int track,CueSheet s,CueSheetEntry e) { + string fn=_file_format; + fn=fn.Replace ("@A",s.performer()); + fn=fn.Replace ("@b",s.title ()); + fn=fn.Replace ("@n",(track+1).ToString ()); + fn=fn.Replace ("@t",e.title ()); + fn=_directory+"/"+fn+".mp3"; + Hyena.Log.Information ("file to convert:"+fn); + if (File.Exists(fn)) { + TagLib.File file=TagLib.File.Create(fn); + if (file==null) { + Hyena.Log.Error ("Cannot create taglib file for "+fn); + return; + } else { + Hyena.Log.Information("Setting tags for "+fn); + file.Tag.Album=s.title (); + file.Tag.AlbumArtists=new string[]{s.performer ()}; + file.Tag.Composers=new string[]{s.composer ()}; + file.Tag.Genres=new string[]{s.genre ()}; + file.Tag.Title=e.title (); + file.Tag.Track=(uint) track+1; + file.Tag.Performers=new string[]{e.performer ()}; + file.Save (); + } + } + } + #region IDisposable implementation public void Dispose () { @@ -269,6 +325,17 @@ namespace Banshee.CueSheets [DllImport ("libmp3splt.dll")] private static extern int mp3splt_find_plugins(IntPtr state); + + [DllImport ("libmp3splt.dll")] + private static extern int mp3splt_append_tags(IntPtr state, + string title, + string artist, + string album, + string performer, + string year, + string comment, + int track, + string genre); } diff --git a/src/CueSheets/CueSheets.csproj b/src/CueSheets/CueSheets.csproj index 3c1cecf..af092e1 100644 --- a/src/CueSheets/CueSheets.csproj +++ b/src/CueSheets/CueSheets.csproj @@ -83,6 +83,10 @@ <Private>False</Private> <Package>gtk-sharp-2.0</Package> </Reference> + <Reference Include="taglib-sharp, Version=2.0.4.0, Culture=neutral, PublicKeyToken=db62eba44689b5b0"> + <Private>False</Private> + <Package>taglib-sharp</Package> + </Reference> </ItemGroup> <ItemGroup> <EmbeddedResource Include="CueSheets.addin.xml"> diff --git a/src/CueSheets/Makefile.am b/src/CueSheets/Makefile.am index a23d478..cfa8f86 100644 --- a/src/CueSheets/Makefile.am +++ b/src/CueSheets/Makefile.am @@ -26,6 +26,6 @@ SOURCES = \ Banshee.CueSheets/Tools/Tools.cs \ Banshee.CueSheets/Version/CS_Info.cs -RESOURCES = CueSheets.addin.xml Resources/GlobalUI.xml +RESOURCES = CueSheets.addin.xml include $(top_srcdir)/build/build.mk |