Esempio n. 1
0
        public override void DidFinishLaunching(NSNotification notification)
        {
            Xamarin.Forms.Forms.Init();

            //TODO: Replace with Xamarin.Essentials API.
            string dataDir = NSSearchPath.GetDirectories(NSSearchPathDirectory.ApplicationSupportDirectory, NSSearchPathDomain.User)[0];

            dataDir = System.IO.Path.Combine(dataDir, "Unjammit");
            // Create dataDir, if it doesnt' exist.
            if (!System.IO.Directory.Exists(dataDir))
            {
                System.IO.Directory.CreateDirectory(dataDir);
            }

            Jammit.Forms.App.AllowedFileTypes = new string[] { "com.pkware.zip-archive" };
            Jammit.Forms.App.DataDirectory    = dataDir;

#if false
            Jammit.Forms.App.PlayerFactory =
                async(media) => await System.Threading.Tasks.Task.Run(() => new Audio.AppleJcfPlayer(media));
#else
            Jammit.Forms.App.PlayerFactory = async(media) => await System.Threading.Tasks.Task.Run(() =>
            {
                var player = new Audio.NAudioJcfPlayer(
                    media,
                    new Audio.AVAudioWavePlayer()
                {
                    DesiredLatency = 60, NumberOfBuffers = 2
                },
                    System.IO.Path.Combine(dataDir, "Tracks"),
                    Forms.Resources.Assets.Stick);

                player.TimerAction = () =>
                {
                    Xamarin.Forms.Device.StartTimer(new System.TimeSpan(0, 0, 1), () =>
                    {
                        Xamarin.Forms.Device.BeginInvokeOnMainThread(() => player.NotifyPositionChanged());

                        return(player.State == Audio.PlaybackStatus.Playing);
                    });
                };

                return(player);
            });
#endif

            Jammit.Forms.App.MediaLoader = new Model.FileSystemJcfLoader(dataDir);

            LoadApplication(new Jammit.Forms.App());

            base.DidFinishLaunching(notification);
            _window.Toolbar.Visible = false;
        }
Esempio n. 2
0
        //
        // This method is invoked when the application has loaded and is ready to run. In this
        // method you should instantiate the window, load the UI into it and then make the window
        // visible.
        //
        // You have 17 seconds to return from this method, or iOS will terminate your application.
        //
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();

            // Audio options
            NSError error = AVFoundation.AVAudioSession.SharedInstance().SetCategory(AVFoundation.AVAudioSessionCategory.Playback);

            Jammit.Forms.App.AllowedFileTypes = new string[] { "com.pkware.zip-archive" };
            Jammit.Forms.App.DataDirectory    = Xamarin.Essentials.FileSystem.AppDataDirectory;

#if false
            Jammit.Forms.App.PlayerFactory =
                async(media) => await System.Threading.Tasks.Task.Run(() => new Audio.AppleJcfPlayer(media));
#else
            Jammit.Forms.App.PlayerFactory = async(media) => await System.Threading.Tasks.Task.Run(() =>
            {
                var player = new Audio.NAudioJcfPlayer(
                    media,
                    new Audio.AVAudioWavePlayer()
                {
                    DesiredLatency = 60, NumberOfBuffers = 2
                },
                    System.IO.Path.Combine(Xamarin.Essentials.FileSystem.AppDataDirectory, "Tracks"),
                    Forms.Resources.Assets.Stick);

                player.TimerAction = () =>
                {
                    Xamarin.Forms.Device.StartTimer(new System.TimeSpan(0, 0, 1), () =>
                    {
                        Xamarin.Forms.Device.BeginInvokeOnMainThread(() => player.NotifyPositionChanged());

                        return(player.State == Audio.PlaybackStatus.Playing);
                    });
                };

                return(player);
            });
#endif

            Jammit.Forms.App.MediaLoader = new Model.FileSystemJcfLoader(Xamarin.Essentials.FileSystem.AppDataDirectory);

            LoadApplication(new Jammit.Forms.App());

            return(base.FinishedLaunching(app, options));
        }
Esempio n. 3
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource   = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            // Keep screen on
            Window.AddFlags(
                WindowManagerFlags.KeepScreenOn |
                WindowManagerFlags.DismissKeyguard |
                WindowManagerFlags.ShowWhenLocked |
                WindowManagerFlags.TurnScreenOn
                );

            // Initialize LibVLCSharp
            global::LibVLCSharp.Shared.Core.Initialize();

            var config = new MediaConfiguration();

            config.EnableHardwareDecoding = true;

            Jammit.Forms.App.DataDirectory = Xamarin.Essentials.FileSystem.AppDataDirectory;

#if false
            // To prevent audo desync, use SoXR resampler.
            // See https://code.videolan.org/videolan/LibVLCSharp/issues/263#note_48330
            Jammit.Forms.App.PlayerFactory = async(media) => await System.Threading.Tasks.Task.Run(() =>
                                                                                                   new Audio.VlcJcfPlayer(media, new MediaConfiguration[] { config }, new string[] { }));
#else
            Jammit.Forms.App.PlayerFactory = async(media) => await System.Threading.Tasks.Task.Run(() =>
            {
                var player = new Audio.NAudioJcfPlayer(
                    media,
                    new Audio.AndroidWavePlayer {
                    DesiredLatency = 60, NumberOfBuffers = 2
                },
                    System.IO.Path.Combine(Xamarin.Essentials.FileSystem.AppDataDirectory, "Tracks"),
                    Forms.Resources.Assets.Stick);

                player.TimerAction = () =>
                {
                    Xamarin.Forms.Device.StartTimer(new TimeSpan(0, 0, 1), () =>
                    {
                        Xamarin.Forms.Device.BeginInvokeOnMainThread(() => player.NotifyPositionChanged());

                        return(player.State == Audio.PlaybackStatus.Playing);
                    });
                };

                return(player);
            });
#endif

            Jammit.Forms.App.MediaLoader = new Model.FileSystemJcfLoader(Xamarin.Essentials.FileSystem.AppDataDirectory);

            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

            global::Xamarin.Essentials.Platform.Init(this, savedInstanceState);

            global::Xamarin.Forms.MessagingCenter.Subscribe <Jammit.Forms.Views.SongPage>(this, "PreventPortrait", sender =>
            {
                RequestedOrientation = ScreenOrientation.Landscape;
            });

            global::Xamarin.Forms.MessagingCenter.Subscribe <Jammit.Forms.Views.SongPage>(this, "AllowLandScapePortrait", sender =>
            {
                RequestedOrientation = ScreenOrientation.Unspecified;
            });

            LoadApplication(new Jammit.Forms.App());
        }
Esempio n. 4
0
        public static void Main(string[] args)
        {
            global::Gtk.Application.Init();
            global::Xamarin.Forms.Forms.Init();

            var dataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

            dataDir = System.IO.Path.Combine(dataDir, "Unjammit");
            // Create dataDir, if it doesnt' exist.
            if (!System.IO.Directory.Exists(dataDir))
            {
                System.IO.Directory.CreateDirectory(dataDir);
            }

            Jammit.Forms.App.DataDirectory = dataDir;
            Jammit.Forms.App.MediaLoader   = new Model.FileSystemJcfLoader(dataDir);
            Jammit.Forms.App.PlayerFactory = async(media) => await System.Threading.Tasks.Task.Run(() =>
                                                                                                   new Audio.VlcJcfPlayer(media, new LibVLCSharp.Shared.MediaConfiguration[] { }, new string[] { })
                                                                                                   );

            Jammit.Forms.App.PlayerFactory = async(media) => await System.Threading.Tasks.Task.Run(() =>
            {
                Audio.IJcfPlayer player = null;
                try
                {
                    player = new Audio.VlcJcfPlayer(media, new LibVLCSharp.Shared.MediaConfiguration[] { }, new string[] { });
                }
                catch (LibVLCSharp.Shared.VLCException)
                {
                    player = new Audio.NAudioJcfPlayer(
                        media,
                        new Audio.StubWavePlayer(),
                        System.IO.Path.Combine(Jammit.Forms.App.DataDirectory, "Tracks"),
                        Forms.Resources.Assets.Stick)
                    {
                        TimerAction = () =>
                        {
                            Xamarin.Forms.Device.StartTimer(new TimeSpan(0, 0, 1), () =>
                            {
                                Xamarin.Forms.Device.BeginInvokeOnMainThread(() => (player as Audio.NAudioJcfPlayer).NotifyPositionChanged());

                                return(player.State == Audio.PlaybackStatus.Playing);
                            });
                        }
                    };
                }

                return(player);
            });

            var app    = new Jammit.Forms.App();
            var window = new FormsWindow();

            window.LoadApplication(app);
            window.SetApplicationTitle("Unjammit!");
            window.Show();

            try
            {
                // Best-effort load VLC core.
                // See runtime requirements at:
                // https://github.com/videolan/libvlcsharp/blob/3.x/docs/linux-setup.md
                // NOTE: Major Linux distros (Ubuntu 20.04 just released) ship libVLC 3.
                // LibVLCSharp expects libVLC 4.
                // TODO: Ship with LibVLC 4 nightly build binaries: https://nightlies.videolan.org/
                // TODO: Write a GitHub issue!
                // UWP: Don't even try. This crashes the process irrevocably.
                if (Xamarin.Essentials.DeviceInfo.Platform != Xamarin.Essentials.DevicePlatform.Unknown)
                {
                    global::LibVLCSharp.Shared.Core.Initialize();
                }
            }
            finally
            {
                global::Gtk.Application.Run();
            }
        }