예제 #1
0
        public async void Load(string fileName = null)
        {
            if (fileName == null && FileName != null)
            {
                fileName = FileName;
            }
            else
            {
                throw new Exception("No file load: " + fileName);
            }


            if (fileName.StartsWith("http") ||
                fileName.StartsWith("rstp"))
            {
                mediaEngineEx.Source = fileName;
            }
            else
            {
                Windows.Storage.StorageFile file = await Windows.Storage.StorageFile.GetFileFromPathAsync(fileName);

                var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);

                ByteStream byteStream = new ByteStream(stream);
                mediaEngineEx.SetSourceFromByteStream(byteStream, fileName);
            }

            PlaybackPosition = StartPosition;
        }
예제 #2
0
        static void Main(string[] args)
        {
            // Select a File to play
            var openFileDialog = new OpenFileDialog {
                Title = "Select a music file", Filter = "Music Files(*.WMA;*.MP3;*.WAV)|*.WMA;*.MP3;*.WAV"
            };
            var result = openFileDialog.ShowDialog();

            if (result == DialogResult.Cancel)
            {
                return;
            }

            // Initialize MediaFoundation
            MediaManager.Startup();

            // Creates the MediaEngineClassFactory
            var mediaEngineFactory = new MediaEngineClassFactory();

            // Creates MediaEngine for AudioOnly
            var mediaEngine = new MediaEngine(mediaEngineFactory, null, MediaEngineCreateFlags.AudioOnly);

            // Register our PlayBackEvent
            mediaEngine.PlaybackEvent += OnPlaybackCallback;

            // Query for MediaEngineEx interface
            mediaEngineEx = mediaEngine.QueryInterface <MediaEngineEx>();

            // Opens the file
            var fileStream = openFileDialog.OpenFile();

            // Create a ByteStream object from it
            var stream = new ByteStream(fileStream);

            // Creates an URL to the file
            var url = new Uri(openFileDialog.FileName, UriKind.RelativeOrAbsolute);

            // Set the source stream
            mediaEngineEx.SetSourceFromByteStream(stream, url.AbsoluteUri);

            // Wait for MediaEngine to be ready
            if (!eventReadyToPlay.WaitOne(1000))
            {
                Console.WriteLine("Unexpected error: Unable to play this file");
            }

            // Play the music
            mediaEngineEx.Play();

            // Wait until music is stopped.
            while (!isMusicStopped)
            {
                Thread.Sleep(10);
            }
        }
예제 #3
0
        public void Open(Stream stream, Uri uri)
        {
            tokenSource.Cancel();
            frameLoopTask = null;
            var temp = byteStream;

            engine.SetSourceFromByteStream(byteStream = new ByteStream(stream), TempPathForUri(stream, uri));
            engine.Load();
            temp?.Dispose();
            tokenSource = new CancellationTokenSource();
        }
예제 #4
0
 public void SetBytestream(IRandomAccessStream streamHandle)
 {
     byteStream = new ByteStream(streamHandle);
     mediaEngineEx.SetSourceFromByteStream(byteStream, Url);
 }
예제 #5
0
        private void LoadNewMusic(SoundMusic lastPlayRequestMusicInstance)
        {
            currentMusic = lastPlayRequestMusicInstance;

            mediaEngineEx.SetSourceFromByteStream(new ByteStream(currentMusic.Stream), "MP3");
        }
예제 #6
0
 public void SetBytestream(Stream stream)
 {
     byteStream = new ByteStream(stream);
     mediaEngineEx.SetSourceFromByteStream(byteStream, Url);
 }
예제 #7
0
        /// <summary>
        /// Defines the entry point of the application.
        /// </summary>
        /// <param name="args">The args.</param>

        public static void Run()
        {
            // Select a File to play
            var openFileDialog = new OpenFileDialog {
                Title = "Select a file",
            };
            var result = openFileDialog.ShowDialog();

            if (result == DialogResult.Cancel)
            {
                return;
            }

            // Initialize MediaFoundation
            MediaManager.Startup();

            var renderForm = new SharpDX.Windows.RenderForm();

            device = CreateDeviceForVideo(out dxgiManager);

            // Creates the MediaEngineClassFactory
            var mediaEngineFactory = new MediaEngineClassFactory();

            //Assign our dxgi manager, and set format to bgra
            MediaEngineAttributes attr = new MediaEngineAttributes();

            attr.VideoOutputFormat = (int)SharpDX.DXGI.Format.B8G8R8A8_UNorm;
            attr.DxgiManager       = dxgiManager;

            // Creates MediaEngine for AudioOnly
            var mediaEngine = new MediaEngine(mediaEngineFactory, attr, MediaEngineCreateFlags.None);

            // Register our PlayBackEvent
            mediaEngine.PlaybackEvent += OnPlaybackCallback;

            // Query for MediaEngineEx interface
            mediaEngineEx = mediaEngine.QueryInterface <MediaEngineEx>();

            // Opens the file
            var fileStream = openFileDialog.OpenFile();

            // Create a ByteStream object from it
            var stream = new ByteStream(fileStream);

            // Creates an URL to the file
            var url = new Uri(openFileDialog.FileName, UriKind.RelativeOrAbsolute);

            // Set the source stream
            mediaEngineEx.SetSourceFromByteStream(stream, url.AbsoluteUri);

            // Wait for MediaEngine to be ready
            if (!eventReadyToPlay.WaitOne(1000))
            {
                Console.WriteLine("Unexpected error: Unable to play this file");
            }

            //Create our swapchain
            swapChain = CreateSwapChain(device, renderForm.Handle);

            //Get DXGI surface to be used by our media engine
            var texture = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            var surface = texture.QueryInterface <SharpDX.DXGI.Surface>();

            //Get our video size
            int w, h;

            mediaEngine.GetNativeVideoSize(out w, out h);

            // Play the music
            mediaEngineEx.Play();

            long ts;

            RenderLoop.Run(renderForm, () =>
            {
                //Transfer frame if a new one is available
                if (mediaEngine.OnVideoStreamTick(out ts))
                {
                    mediaEngine.TransferVideoFrame(surface, null, new SharpDX.Rectangle(0, 0, w, h), null);
                }

                swapChain.Present(1, SharpDX.DXGI.PresentFlags.None);
            });

            mediaEngine.Shutdown();
            swapChain.Dispose();
            device.Dispose();
        }
예제 #8
0
        internal override void LoadMusic(SoundMusic music)
        {
            CurrentMusic = music;

            mediaEngineEx.SetSourceFromByteStream(new ByteStream(CurrentMusic.Stream), "MP3");
        }