Ejemplo n.º 1
0
        /// <summary>
        /// 'Start Audio Record' button click action function
        /// Button name is changes to 'Stop Audio Record' once recording is started
        /// Records audio to a file in the default account video folder
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void recordAudio_Click(object sender, RoutedEventArgs e)
        {
            recordAudio.IsEnabled   = false;
            playbackElement3.Source = null;

            try
            {
                if (recordAudio.Content.ToString() == "Start Audio Record")
                {
                    audioFile = await Windows.Storage.KnownFolders.VideosLibrary.CreateFileAsync(AUDIO_FILE_NAME, Windows.Storage.CreationCollisionOption.GenerateUniqueName);

                    status.Text = "Audio storage file preparation successful";

                    MediaEncodingProfile recordProfile = null;
                    recordProfile = MediaEncodingProfile.CreateM4a(Windows.Media.MediaProperties.AudioEncodingQuality.Auto);

                    await mediaCapture.StartRecordToStorageFileAsync(recordProfile, audioFile);

                    isRecording           = true;
                    recordAudio.IsEnabled = true;
                    recordAudio.Content   = "Stop Audio Record";
                    status.Text           = "Audio recording in progress... press \'Stop Audio Record\' to stop";
                }
                else
                {
                    status.Text = "Stopping audio recording...";

                    await mediaCapture.StopRecordAsync();

                    isRecording           = false;
                    recordAudio.IsEnabled = true;
                    recordAudio.Content   = "Start Audio Record";

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

                    status.Text = "Playback recorded audio: " + audioFile.Path;
                    playbackElement3.AutoPlay = true;
                    playbackElement3.SetSource(stream, audioFile.FileType);
                    playbackElement3.Play();
                }
            }
            catch (Exception ex)
            {
                status.Text = ex.Message;
                Cleanup();
            }
            finally
            {
                recordAudio.IsEnabled = true;
            }
        }
    public async void Record()
    {
        //Wait for init method to complet
        await Init();

        //Wait for capture
        await capture.StartRecordToStreamAsync(MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto), buffer);

        if (Recording)
        {
            throw new InvalidOperationException("cannot excute two records at the same time");
        }
        Recording = true;
    }
Ejemplo n.º 3
0
        internal async void btnStartStopRecord_Click(Object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            try
            {
                String fileName;
                EnableButton(false, "StartStopRecord");

                if (!m_bRecording)
                {
                    ShowStatusMessage("Starting Record");

                    fileName = AUDIO_FILE_NAME;

                    m_recordStorageFile = await Windows.Storage.KnownFolders.VideosLibrary.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.GenerateUniqueName);

                    ShowStatusMessage("Create record file successful");

                    MediaEncodingProfile recordProfile = null;
                    recordProfile = MediaEncodingProfile.CreateM4a(Windows.Media.MediaProperties.AudioEncodingQuality.Auto);

                    await m_mediaCaptureMgr.StartRecordToStorageFileAsync(recordProfile, this.m_recordStorageFile);

                    m_bRecording = true;
                    SwitchRecordButtonContent();
                    EnableButton(true, "StartStopRecord");

                    ShowStatusMessage("Start Record successful");
                }
                else
                {
                    stopRack.Visibility = Visibility.Collapsed;
                    ShowStatusMessage("Stopping Record");

                    await m_mediaCaptureMgr.StopRecordAsync();

                    m_bRecording = false;
                    EnableButton(true, "StartStopRecord");
                    SwitchRecordButtonContent();

                    ShowStatusMessage("Stop record successful");
                }
            }
            catch (Exception exception)
            {
                EnableButton(true, "StartStopRecord");
                ShowExceptionMessage(exception);
                m_bRecording = false;
            }
        }
Ejemplo n.º 4
0
        public async Task <bool> Start(int sampleRate)
        {
            if (!await Init(sampleRate))
            {
                return(false);
            }

            await _capture.StartRecordToStreamAsync(MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto), _buffer);

            if (Recording)
            {
                throw new InvalidOperationException("cannot excute two records at the same time");
            }

            Recording = true;

            return(Recording);
        }
Ejemplo n.º 5
0
        //ToDo-Make it public via an interface
        internal async Task <bool> Record()
        {
            if (isRecording)
            {
                loggingChannel.LogMessage("\nCurrent recording is not yet finished,so skip this cycle");
                NumberOfMissedRecordings++;
                return(isRecording);
            }

            DateTime currentDate   = DateTime.UtcNow;
            var      audioFileName = AudioFilePrefix + "_" + currentDate.ToString("yyyyMMddHHmmssfff") + ".m4a";

            try
            {
                //FindCodecsOnThisDevice();//ToDo-enable in debug
                var stopwatch = Stopwatch.StartNew();
                loggingChannel.LogMessage("\nStarted audio recording");
                var audioFile = await KnownFolders.VideosLibrary.CreateFileAsync(audioFileName, CreationCollisionOption.GenerateUniqueName);

                var recordProfileM4a = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Low);
                recordProfileM4a.Audio = AudioEncodingProperties.CreatePcm(8000, 1, 16);
                loggingChannel.LogMessage("\nAudio storage file preparation successful");
                await mediaCapture.StartRecordToStorageFileAsync(recordProfileM4a, audioFile);

                isRecording = true;
                loggingChannel.LogMessage("\nAudio recording in progress...");
                Thread.Sleep(recordingTimeInMilliSeconds);
                await StopRecording();

                stopwatch.Stop();
                loggingChannel.LogMessage("Recording logic took " + stopwatch.Elapsed.Seconds.ToString() + " seconds");
                SendToIotHub(currentDate, audioFile);
                return(isRecording);
            }
            catch (Exception ex)
            {
                loggingChannel.LogMessage("\n" + ex.Message);
                Cleanup();
                return(isRecording);
            }
        }
Ejemplo n.º 6
0
        public async Task <bool> Record()
        {
            try
            {
                await init();

                await capture.StartRecordToStreamAsync(MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto), buffer);

                if (running)
                {
                    throw new InvalidOperationException("cannot excute two records at the same time");
                }

                running = true;
            }
            catch (Exception e)
            {
                throw e;
            }

            return(true); //HACK!
        }
Ejemplo n.º 7
0
        private async void Button_Click(object sender, RoutedEventArgs e)//开始录音
        {
            try
            {
                //控制控件状态和动画
                storyboard.Begin();
                record.IsEnabled = false;
                stop.IsEnabled   = true;
                String fileName = "1.aac";

                //创建文件
                _recordStorageFile = await KnownFolders.VideosLibrary.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);

                //关键就是这俩句
                MediaEncodingProfile recordProfile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto);   //录音

                await _mediaCaptureManager.StartRecordToStorageFileAsync(recordProfile, this._recordStorageFile); //将录音保存到视频库
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message.ToString());
            }
        }
Ejemplo n.º 8
0
        async Task AudioTest()
        {
            var initSettings = new MediaCaptureInitializationSettings();
            var mediaCapture = new MediaCapture();
            await mediaCapture.InitializeAsync();

            var storageFile = await KnownFolders.VideosLibrary.CreateFileAsync("audioOut.mp3", CreationCollisionOption.GenerateUniqueName);

            var profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto);
            await mediaCapture.StartRecordToStorageFileAsync(profile, storageFile);

            await Task.Delay(TimeSpan.FromSeconds(5));

            await mediaCapture.StopRecordAsync();

            var stream = await storageFile.OpenAsync(FileAccessMode.Read);

            if (stream != null)
            {
                mediaElement.SetSource(stream, storageFile.ContentType);
                mediaElement.Play();
            }
        }
Ejemplo n.º 9
0
        //녹음 버튼 클릭
        private async void CaptureAudio()
        {
            try
            {
                Debug.WriteLine("Starting record");
                String fileName = "record.m4a";

                _recordStorageFile = await KnownFolders.VideosLibrary.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);

                Debug.WriteLine("Create record file successfully");

                MediaEncodingProfile recordProfile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto);
                await _mediaCaptureManager.StartRecordToStorageFileAsync(recordProfile, this._recordStorageFile);

                Debug.WriteLine("Start Record successful");

                _recording = true;
            }
            catch (Exception e)
            {
                Debug.WriteLine("Failed to capture audio");
            }
        }
Ejemplo n.º 10
0
        private async Task CaptureAudio()
        {
            try
            {
                Debug.WriteLine("Starting record");
                var fileName = "audio.wav";

                _recordStorageFile =
                    await
                    KnownFolders.VideosLibrary.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);

                Debug.WriteLine("Create record file successfully");

                var recordProfile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto);

                await _mediaCaptureManager.StartRecordToStorageFileAsync(recordProfile, _recordStorageFile);

                Debug.WriteLine("Start Record successful");
            }
            catch (Exception e)
            {
                Debug.WriteLine("Failed to capture audio:" + e.Message);
            }
        }
Ejemplo n.º 11
0
        private async void Checked()
        {
            try
            {
                var settings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
                settings.StreamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.Audio;
                settings.MediaCategory        = Windows.Media.Capture.MediaCategory.Other;
                settings.AudioProcessing      = Windows.Media.AudioProcessing.Default;
                await audioCapture.InitializeAsync(settings);

                StorageFolder externalDevices = KnownFolders.RemovableDevices;
                IReadOnlyList <StorageFolder> externalDrives = await externalDevices.GetFoldersAsync();

                StorageFolder usbStorage = externalDrives[0];

                //ENSURE FOLDER EXISTS
                if (await usbStorage.TryGetItemAsync("Recording") == null)
                {
                    await usbStorage.CreateFolderAsync("Recording");
                }

                string Folder_Pfad = "Recording\\" + DateTime.Now.Year.ToString();
                if (await usbStorage.TryGetItemAsync(Folder_Pfad) == null)
                {
                    await usbStorage.CreateFolderAsync(Folder_Pfad);
                }

                Folder_Pfad = Folder_Pfad + "\\" + DateTime.Now.Month.ToString();
                if (await usbStorage.TryGetItemAsync(Folder_Pfad) == null)
                {
                    await usbStorage.CreateFolderAsync(Folder_Pfad);
                }

                Folder_Pfad = Folder_Pfad + "\\" + DateTime.Now.Day.ToString();
                if (await usbStorage.TryGetItemAsync(Folder_Pfad) == null)
                {
                    await usbStorage.CreateFolderAsync(Folder_Pfad);
                }

                string Dateiname = "\\" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + " "
                                   + DateTime.Now.Hour.ToString() + "_" + DateTime.Now.Minute.ToString() + "_" + DateTime.Now.Second.ToString() + ".mp3";

                string Dateispeicher_Ort = Folder_Pfad + Dateiname;

                StorageFile recordFile = await usbStorage.CreateFileAsync(Dateispeicher_Ort, Windows.Storage.CreationCollisionOption.GenerateUniqueName);

                isRecording = true;
                //await audioCapture.StartRecordToStorageFileAsync(MediaEncodingProfile.CreateMp3(AudioEncodingQuality.Auto), recordFile);

                var audioRecording = await audioCapture.PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Medium), recordFile);

                await audioRecording.StartAsync();

                Task.Delay(10000).Wait();
                Unchecked();
            }
            catch (Exception ex)
            {
                await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                    Result.Text += ex.Message;
                });
            }
        }
Ejemplo n.º 12
0
        private async Task Text2Audio(string text, StorageFile audio)
        {
            if (audio != null && !string.IsNullOrEmpty(text))
            {
                if (synth == null)
                {
                    synth = new SpeechSynthesizer();
                }
                var voice = SpeechSynthesizer.AllVoices.Where(o => o.DisplayName == (string)cbVoice.SelectedItem);
                synth.Voice = voice.First();
                synth.Options.AudioPitch   = sliderPitch.Value;
                synth.Options.AudioVolume  = sliderVolume.Value / 100.0;
                synth.Options.SpeakingRate = sliderSpeed.Value;
                //var options = new SpeechSynthesizerOptions();

                SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync(text);

                trans = new MediaTranscoder()
                {
                    HardwareAccelerationEnabled = true,
                    AlwaysReencode = true,
                    //VideoProcessingAlgorithm = MediaVideoProcessingAlgorithm.MrfCrf444;
                };

                MediaEncodingProfile profile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.Medium);
                if (audio.ContentType.EndsWith("wav", StringComparison.CurrentCultureIgnoreCase))
                {
                    profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Medium);
                }
                else if (audio.ContentType.EndsWith("aac", StringComparison.CurrentCultureIgnoreCase))
                {
                    profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Medium);
                }
                else if (audio.ContentType.EndsWith("m4a", StringComparison.CurrentCultureIgnoreCase))
                {
                    profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Medium);
                }
                else if (audio.FileType.EndsWith("alac", StringComparison.CurrentCultureIgnoreCase))
                {
                    profile = MediaEncodingProfile.CreateAlac(AudioEncodingQuality.Medium);
                }
                else if (audio.ContentType.EndsWith("flac", StringComparison.CurrentCultureIgnoreCase))
                {
                    profile = MediaEncodingProfile.CreateFlac(AudioEncodingQuality.Medium);
                }
                else if (audio.ContentType.EndsWith("mp4", StringComparison.CurrentCultureIgnoreCase))
                {
                    profile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Pal);
                }

                using (IRandomAccessStream fso = await audio.OpenAsync(FileAccessMode.ReadWrite))
                {
                    //var trans_result = await trans.PrepareFileTranscodeAsync(InFile, OutFile, profile_mp3);
                    var trans_result = await trans.PrepareStreamTranscodeAsync(stream, fso, profile);

                    if (trans_result.CanTranscode)
                    {
                        if (canceltsrc != null)
                        {
                            canceltsrc.Dispose();
                            canceltsrc = null;
                        }
                        canceltsrc = new CancellationTokenSource();
                        var progress = new Progress <double>(ps =>
                        {
                            edHearState.Text = $"{AppResources.GetString("ProcessingState")} {ps:N0}%";
                            //edHearState.Text = AppResources.GetString("ProcessingState");
                        });
                        await trans_result.TranscodeAsync().AsTask(canceltsrc.Token, progress);

                        edHearState.Text = AppResources.GetString("ProcessFinished");
                    }
                    else
                    {
                        edHearState.Text = AppResources.GetString("CanNotTrans");
                    }
                }
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        /// 提供音视频转码
        /// </summary>
        /// <param name="SourceFile">源文件</param>
        /// <param name="DestinationFile">目标文件</param>
        /// <param name="MediaTranscodeEncodingProfile">转码编码</param>
        /// <param name="MediaTranscodeQuality">转码质量</param>
        /// <param name="SpeedUp">是否启用硬件加速</param>
        /// <returns></returns>
        public static Task TranscodeFromAudioOrVideoAsync(StorageFile SourceFile, StorageFile DestinationFile, string MediaTranscodeEncodingProfile, string MediaTranscodeQuality, bool SpeedUp)
        {
            return(Task.Factory.StartNew((obj) =>
            {
                if (obj is ValueTuple <StorageFile, StorageFile, string, string, bool> Para)
                {
                    using (ExtendedExecutionController ExtExecution = ExtendedExecutionController.TryCreateExtendedExecution().Result)
                    {
                        IsAnyTransformTaskRunning = true;

                        AVTranscodeCancellation = new CancellationTokenSource();

                        MediaTranscoder Transcoder = new MediaTranscoder
                        {
                            HardwareAccelerationEnabled = true,
                            VideoProcessingAlgorithm = Para.Item5 ? MediaVideoProcessingAlgorithm.Default : MediaVideoProcessingAlgorithm.MrfCrf444
                        };

                        try
                        {
                            MediaEncodingProfile Profile = null;
                            VideoEncodingQuality VideoQuality = default;
                            AudioEncodingQuality AudioQuality = default;

                            switch (Para.Item4)
                            {
                            case "UHD2160p":
                                VideoQuality = VideoEncodingQuality.Uhd2160p;
                                break;

                            case "QVGA":
                                VideoQuality = VideoEncodingQuality.Qvga;
                                break;

                            case "HD1080p":
                                VideoQuality = VideoEncodingQuality.HD1080p;
                                break;

                            case "HD720p":
                                VideoQuality = VideoEncodingQuality.HD720p;
                                break;

                            case "WVGA":
                                VideoQuality = VideoEncodingQuality.Wvga;
                                break;

                            case "VGA":
                                VideoQuality = VideoEncodingQuality.Vga;
                                break;

                            case "High":
                                AudioQuality = AudioEncodingQuality.High;
                                break;

                            case "Medium":
                                AudioQuality = AudioEncodingQuality.Medium;
                                break;

                            case "Low":
                                AudioQuality = AudioEncodingQuality.Low;
                                break;
                            }

                            switch (Para.Item3)
                            {
                            case "MKV":
                                Profile = MediaEncodingProfile.CreateHevc(VideoQuality);
                                break;

                            case "MP4":
                                Profile = MediaEncodingProfile.CreateMp4(VideoQuality);
                                break;

                            case "WMV":
                                Profile = MediaEncodingProfile.CreateWmv(VideoQuality);
                                break;

                            case "AVI":
                                Profile = MediaEncodingProfile.CreateAvi(VideoQuality);
                                break;

                            case "MP3":
                                Profile = MediaEncodingProfile.CreateMp3(AudioQuality);
                                break;

                            case "ALAC":
                                Profile = MediaEncodingProfile.CreateAlac(AudioQuality);
                                break;

                            case "WMA":
                                Profile = MediaEncodingProfile.CreateWma(AudioQuality);
                                break;

                            case "M4A":
                                Profile = MediaEncodingProfile.CreateM4a(AudioQuality);
                                break;
                            }

                            PrepareTranscodeResult Result = Transcoder.PrepareFileTranscodeAsync(Para.Item1, Para.Item2, Profile).AsTask().Result;

                            if (Result.CanTranscode)
                            {
                                SendUpdatableToastWithProgressForTranscode(Para.Item1, Para.Item2);
                                Progress <double> TranscodeProgress = new Progress <double>((CurrentValue) =>
                                {
                                    try
                                    {
                                        NotificationData Data = new NotificationData
                                        {
                                            SequenceNumber = 0
                                        };
                                        Data.Values["ProgressValue"] = (Math.Ceiling(CurrentValue) / 100).ToString();
                                        Data.Values["ProgressValueString"] = Convert.ToInt32(CurrentValue) + "%";

                                        ToastNotificationManager.CreateToastNotifier().Update(Data, "TranscodeNotification");
                                    }
                                    catch (Exception ex)
                                    {
                                        LogTracer.Log(ex, "Toast notification could not be sent");
                                    }
                                });

                                Result.TranscodeAsync().AsTask(AVTranscodeCancellation.Token, TranscodeProgress).Wait();

                                CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                                {
                                    ShowTranscodeCompleteNotification(Para.Item1, Para.Item2);
                                }).AsTask().Wait();
                            }
                            else
                            {
                                LogTracer.Log("Transcode format is not supported");
                                Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                            }
                        }
                        catch (AggregateException)
                        {
                            Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                        }
                        catch (Exception ex)
                        {
                            LogTracer.Log(ex, "Transcode failed");
                            Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                        }
                        finally
                        {
                            AVTranscodeCancellation.Dispose();
                            AVTranscodeCancellation = null;

                            IsAnyTransformTaskRunning = false;
                        }
                    }
                }
            }, (SourceFile, DestinationFile, MediaTranscodeEncodingProfile, MediaTranscodeQuality, SpeedUp), TaskCreationOptions.LongRunning));
        }
Ejemplo n.º 14
0
        private async Task TranscodeMediaAsync()
        {
            MediaVideoProcessingAlgorithm Algorithm = default;

            if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeAlgorithm"] is string TranscodeAlgorithm)
            {
                if (TranscodeAlgorithm == "MrfCrf444")
                {
                    Algorithm = MediaVideoProcessingAlgorithm.MrfCrf444;
                }
                else if (TranscodeAlgorithm == "Default")
                {
                    Algorithm = MediaVideoProcessingAlgorithm.Default;
                }

                MediaTranscoder Transcoder = new MediaTranscoder
                {
                    HardwareAccelerationEnabled = true,
                    VideoProcessingAlgorithm    = Algorithm
                };

                if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeInputFileToken"] is string InputFileToken &&
                    ApplicationData.Current.LocalSettings.Values["MediaTranscodeOutputFileToken"] is string OutputFileToken)
                {
                    try
                    {
                        var FutureItemAccessList = StorageApplicationPermissions.FutureAccessList;

                        InputFile = await FutureItemAccessList.GetFileAsync(InputFileToken);

                        OutputFile = await FutureItemAccessList.GetFileAsync(OutputFileToken);

                        if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeEncodingProfile"] is string EncodingKind &&
                            ApplicationData.Current.LocalSettings.Values["MediaTranscodeQuality"] is string Quality)
                        {
                            MediaEncodingProfile Profile      = null;
                            VideoEncodingQuality VideoQuality = default;
                            AudioEncodingQuality AudioQuality = default;

                            switch (Quality)
                            {
                            case "UHD2160p":
                                VideoQuality = VideoEncodingQuality.Uhd2160p;
                                break;

                            case "QVGA":
                                VideoQuality = VideoEncodingQuality.Qvga;
                                break;

                            case "HD1080p":
                                VideoQuality = VideoEncodingQuality.HD1080p;
                                break;

                            case "HD720p":
                                VideoQuality = VideoEncodingQuality.HD720p;
                                break;

                            case "WVGA":
                                VideoQuality = VideoEncodingQuality.Wvga;
                                break;

                            case "VGA":
                                VideoQuality = VideoEncodingQuality.Vga;
                                break;

                            case "High":
                                AudioQuality = AudioEncodingQuality.High;
                                break;

                            case "Medium":
                                AudioQuality = AudioEncodingQuality.Medium;
                                break;

                            case "Low":
                                AudioQuality = AudioEncodingQuality.Low;
                                break;
                            }

                            switch (EncodingKind)
                            {
                            case "MKV":
                                Profile = MediaEncodingProfile.CreateHevc(VideoQuality);
                                break;

                            case "MP4":
                                Profile = MediaEncodingProfile.CreateMp4(VideoQuality);
                                break;

                            case "WMV":
                                Profile = MediaEncodingProfile.CreateWmv(VideoQuality);
                                break;

                            case "AVI":
                                Profile = MediaEncodingProfile.CreateAvi(VideoQuality);
                                break;

                            case "MP3":
                                Profile = MediaEncodingProfile.CreateMp3(AudioQuality);
                                break;

                            case "ALAC":
                                Profile = MediaEncodingProfile.CreateAlac(AudioQuality);
                                break;

                            case "WMA":
                                Profile = MediaEncodingProfile.CreateWma(AudioQuality);
                                break;

                            case "M4A":
                                Profile = MediaEncodingProfile.CreateM4a(AudioQuality);
                                break;
                            }

                            PrepareTranscodeResult Result = await Transcoder.PrepareFileTranscodeAsync(InputFile, OutputFile, Profile);

                            if (Result.CanTranscode)
                            {
                                SendUpdatableToastWithProgress();
                                Progress <double> TranscodeProgress = new Progress <double>(ProgressHandler);
                                await Result.TranscodeAsync().AsTask(Cancellation.Token, TranscodeProgress);

                                ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Success";
                            }
                            else
                            {
                                ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "转码格式不支持";
                                await OutputFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
                            }
                        }
                        else
                        {
                            ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "SettingError: Miss MediaTranscodeEncodingProfile Or MediaTranscodeQuality";
                            await OutputFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
                        }
                    }
Ejemplo n.º 15
0
        public async Task <StorageFile> ConvertToMP3()
        {
            bool SuccessFlag = true;

            try
            {
                StorageFolder folder = await ApplicationData.Current.TemporaryFolder.CreateFolderAsync("Conversion", CreationCollisionOption.OpenIfExists);

                StorageFile destinationFile = await folder.CreateFileAsync(destination, CreationCollisionOption.GenerateUniqueName);

                if (SuccessFlag)
                {
                    mediatranscoder = new MediaTranscoder();
                    PrepareTranscodeResult transcoderesult = await mediatranscoder.PrepareFileTranscodeAsync(file, destinationFile, isM4A?MediaEncodingProfile.CreateM4a(quality) : MediaEncodingProfile.CreateMp3(quality));

                    if (transcoderesult.CanTranscode)
                    {
                        canceltoken = new CancellationToken();
                        await transcoderesult.TranscodeAsync();

                        SuccessFlag = true;
                    }
                    else
                    {
                        SuccessFlag = false;
                    }
                }

                if (SuccessFlag)
                {
                    return(destinationFile);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ee)
            {
                Debug.WriteLine(ee.ToString());
            }
            return(null);
        }
Ejemplo n.º 16
0
        async private void StartRadioButton_Click(object sender, RoutedEventArgs e)
        {
            if (_InputFile == null)
            {
                await new Windows.UI.Popups.MessageDialog("Please import a video or music file to convert").ShowAsync();
                return;
            }
            VideoEncodingQuality videoQuallity = VideoEncodingQuality.Wvga;

            if (CS.Width == 1920 && CS.Height == 1080)
            {
                videoQuallity = VideoEncodingQuality.HD1080p;
            }
            else if (CS.Width == 1280 && CS.Height == 720)
            {
                videoQuallity = VideoEncodingQuality.HD720p;
            }
            else if (CS.Width == 800 && CS.Height == 480)
            {
                videoQuallity = VideoEncodingQuality.Wvga;
            }
            else if (CS.Width == 720 && CS.Height == 480)
            {
                videoQuallity = VideoEncodingQuality.Ntsc;
            }
            else if (CS.Width == 720 && CS.Height == 576)
            {
                videoQuallity = VideoEncodingQuality.Pal;
            }
            else if (CS.Width == 640 && CS.Height == 480)
            {
                videoQuallity = VideoEncodingQuality.Vga;
            }
            else if (CS.Width == 320 && CS.Height == 240)
            {
                videoQuallity = VideoEncodingQuality.Qvga;
            }
            if (CS.Extension.ToLower().Equals("mp4"))
            {
                _Profile = MediaEncodingProfile.CreateMp4(videoQuallity);
            }
            else if (CS.Extension.ToLower().Equals("avi"))
            {
                _Profile = MediaEncodingProfile.CreateAvi(videoQuallity);
            }
            else if (CS.Extension.ToLower().Equals("wmv"))
            {
                _Profile = MediaEncodingProfile.CreateWmv(videoQuallity);
            }

            else if (CS.Extension.ToLower().Equals("wma"))
            {
                _Profile = MediaEncodingProfile.CreateWma(AudioEncodingQuality.High);
            }
            else if (CS.Extension.ToLower().Equals("wav"))
            {
                _Profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High);
            }
            else if (CS.Extension.ToLower().Equals("mp3"))
            {
                _Profile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High);
            }
            else if (CS.Extension.ToLower().Equals("m4a"))
            {
                _Profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.High);
            }
            try
            {
                if (CS.Extension.ToLower().Equals("mp4") ||
                    CS.Extension.ToLower().Equals("avi") ||
                    CS.Extension.ToLower().Equals("wmv"))
                {
                    _Profile.Video.Width   = CS.Width;
                    _Profile.Video.Height  = CS.Height;
                    _Profile.Video.Bitrate = CS.VideoBitRate;
                }
                _Profile.Audio.Bitrate    = CS.AudioBitRate;
                _Profile.Audio.SampleRate = CS.SampleRate;
            }
            catch (Exception exception)
            {
                vars.Output("StartRadioButton_Click ex: " + exception.Message);
                _Profile = null;
                return;
            }
            _cts = new CancellationTokenSource();

            try
            {
                if (_InputFile != null && _Profile != null)
                {
                    _OutputFileName = System.IO.Path.GetFileNameWithoutExtension(_InputFile.Path);
                    string extension = CS.Extension;
                    _OutputFileName = string.Format("[MC] {0}.{1}", _OutputFileName, extension);
                    _OutputFile     = await KnownFolders.VideosLibrary.CreateFileAsync(_OutputFileName, CreationCollisionOption.GenerateUniqueName);

                    var preparedTranscodeResult = await _Transcoder.PrepareFileTranscodeAsync(_InputFile, _OutputFile, _Profile);

                    _Transcoder.VideoProcessingAlgorithm = MediaVideoProcessingAlgorithm.Default;


                    if (preparedTranscodeResult.CanTranscode)
                    {
                        var progress = new Progress <double>(TranscodeProgress);
                        stopwatch.Reset();
                        stopwatch.Start();
                        MASettings.GPVisibility    = Visibility.Visible;
                        StopRadioButton.Visibility = Visibility.Visible;
                        await preparedTranscodeResult.TranscodeAsync().AsTask(_cts.Token, progress);
                    }
                    else
                    {
                        vars.Output(preparedTranscodeResult.FailureReason);
                        MASettings.GPVisibility = Visibility.Collapsed;
                        await new Windows.UI.Popups.MessageDialog("Failed to start.\r\nError: " + preparedTranscodeResult.FailureReason).ShowAsync();
                        StopRadioButton.Visibility = Visibility.Collapsed;
                    }
                }
            }
            catch (TaskCanceledException)
            {
                MASettings.GPVisibility = Visibility.Collapsed;

                StopRadioButton.Visibility = Visibility.Collapsed;

                vars.Output("Transcode Canceled");
            }
            catch (Exception exception)
            {
                MASettings.GPVisibility = Visibility.Collapsed;

                StopRadioButton.Visibility = Visibility.Collapsed;
                await new Windows.UI.Popups.MessageDialog("Failed to convert.\r\nError: " + exception.Message).ShowAsync();

                vars.Output(exception.Message);
            }
        }
Ejemplo n.º 17
0
        private async Task Covert_music(string audio, string type)
        {
            using (SQLiteConnection db = new SQLiteConnection(App.DB_PATH))
            {
                MediaEncodingProfile profile = new MediaEncodingProfile();
                if (type == ".mp3")
                {
                    var Quality = Load_options(Json.Json_mp3);
                    profile = MediaEncodingProfile.CreateMp3(Quality);
                }
                else if (type == ".alac")
                {
                    var Quality = Load_options(Json.Json_alac);
                    profile = MediaEncodingProfile.CreateAlac(Quality);
                    type    = ".m4a";
                }
                else if (type == ".flac")
                {
                    var Quality = Load_options(Json.Json_flac);
                    profile = MediaEncodingProfile.CreateFlac(Quality);
                }
                else if (type == ".aac")
                {
                    var Quality = Load_options(Json.Json_aac);
                    profile = MediaEncodingProfile.CreateM4a(Quality);
                    type    = ".m4a";
                }
                convert_type = type.Substring(1);
                var songs = db.Query <Song>("Select * from Song");
                foreach (var song in songs)
                {
                    var    format      = db.Find <MusicFormat>(c => c.Id == song.FormatId);
                    var    import_name = song.Path + song.NameSong + "." + format.NameFormat;
                    string new_name    = song.Path + song.NameSong + type;

                    Main_folder = await Windows.Storage.AccessCache.StorageApplicationPermissions
                                  .FutureAccessList.GetFolderAsync("Audio");

                    StorageFile oldfile = await Main_folder.GetFileAsync(import_name);

                    MusicProperties musicProperties = await oldfile.Properties.GetMusicPropertiesAsync();

                    if (oldfile.FileType != ".mp3" && oldfile.FileType != type &&
                        musicProperties.Bitrate > 500000)
                    {
                        StorageFile newfile = await Main_folder.CreateFileAsync(new_name, CreationCollisionOption.ReplaceExisting);

                        if (oldfile != null && newfile != null)
                        {
                            try
                            {
                                current_song = song;
                                all_convert_song++;
                                SongDeleteAfterConvert.Add(current_song);
                                MediaTranscoder        transcoder = new MediaTranscoder();
                                PrepareTranscodeResult prepareOp  = await transcoder.PrepareFileTranscodeAsync(oldfile, newfile, profile);

                                if (prepareOp.CanTranscode)
                                {
                                    var transcodeOp = prepareOp.TranscodeAsync();
                                    transcodeOp.Completed += async(IAsyncActionWithProgress <double> asyncInfo, AsyncStatus status) =>
                                    {
                                        asyncInfo.GetResults();
                                        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                                        {
                                            current_convert_song++;
                                        });
                                    };
                                }
                            }
                            catch (Exception exc)
                            {
                                var dialog = new MessageDialog(exc.ToString());
                                await dialog.ShowAsync();
                            }
                        }
                    }
                }
                do
                {
                    await Task.Delay(TimeSpan.FromSeconds(3));
                }while (all_convert_song != current_convert_song);
                Delete_oldfile();
            }
        }
Ejemplo n.º 18
0
        private async void OnTransCode(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;

            btn.IsEnabled = false;

            // 從專案目錄中取得待轉碼的MP3檔案
            Uri         sourceFileUri = new Uri("ms-appx:///1.mp3");
            StorageFile srcFile       = await StorageFile.GetFileFromApplicationUriAsync(sourceFileUri);

            // 取得“音樂”檔案目錄
            StorageFolder musicFd = KnownFolders.MusicLibrary;
            // 新檔名
            string newFileName = "new_file.m4a";
            // 建立新檔案
            StorageFile disFile = await musicFd.CreateFileAsync(newFileName, CreationCollisionOption.ReplaceExisting);

            // 響應轉碼處理進度
            IProgress <double> progress = new Progress <double>((p) =>
            {
                // 更新進度
                this.pb.Value = p;
            });

            // 案例化MediaTranscoder物件
            MediaTranscoder        transcoder = new MediaTranscoder();
            PrepareTranscodeResult result     = await transcoder.PrepareFileTranscodeAsync(srcFile, disFile, MediaEncodingProfile.CreateM4a(AudioEncodingQuality.High));

            // 開始轉碼
            if (result.CanTranscode)
            {
                await result.TranscodeAsync().AsTask(progress);
            }

            btn.IsEnabled = true;
        }
Ejemplo n.º 19
0
        public async Task WriteToStream(Stream output, HttpContent content, TransportContext context)
        {
            try
            {
                //
                // Create a PCM audio source
                //

                var generator = new AudioSampleGenerator();

                var source = new MediaStreamSource(
                    new AudioStreamDescriptor(
                        generator.EncodingProperties
                        )
                    );
                source.CanSeek = false;
                source.MusicProperties.Title = "CS_D_MediaStreamSource_EncodeAudio";

                source.SampleRequested += (MediaStreamSource sender, MediaStreamSourceSampleRequestedEventArgs args) =>
                {
                    try
                    {
                        Console.WriteLine("SampleRequested Time: {0}", generator.Time);

                        // Generate 5s of data
                        if (generator.Time.TotalSeconds < 5)
                        {
                            args.Request.Sample = generator.GenerateSample();
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine("Sample exception");
                    }
                };

                //
                // Encode PCM to ADTS
                //

                var profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Medium);
                profile.Container.Subtype = "ADTS";

                var output2 = new PseudoSeekableStream(output); // Pretend the stream is seekable so .AsRandomAccessStream() works

                var transcoder = new MediaTranscoder();
                var result     = await transcoder.PrepareMediaStreamSourceTranscodeAsync(
                    source,
                    output2.AsRandomAccessStream(),
                    profile
                    );

                await result.TranscodeAsync();
            }
            catch (Exception e)
            {
                Debug.WriteLine("Transcode exception");
            }

            output.Close();
        }
Ejemplo n.º 20
0
        private async Task <bool> ExportToMusicFormat(StorageFile fileTarget, SpeechSynthesisStream synthStream)
        {
            bool success = false;

            Debug.WriteLine(fileTarget.FileType + " selected");

            // Set encoding profiles
            _profile = null;
            AudioEncodingQuality audioEncodingProfile = AudioEncodingQuality.High;

            if (fileTarget.FileType == ".wma")
            {
                _profile = MediaEncodingProfile.CreateWma(audioEncodingProfile);
            }
            else if (fileTarget.FileType == ".mp3")
            {
                _profile = MediaEncodingProfile.CreateMp3(audioEncodingProfile);
            }
            else if (fileTarget.FileType == ".m4a")
            {
                _profile = MediaEncodingProfile.CreateM4a(audioEncodingProfile);
            }
            else
            {
                Debug.WriteLine("Can't select a media encoding profile");
                return(success);
            }

            // Write temporary Wav to Temp-storage
            ApplicationData appData = ApplicationData.Current;
            StorageFile     source  = await appData.TemporaryFolder.CreateFileAsync("temporary.wav", CreationCollisionOption.ReplaceExisting);

            try
            {
                using (var reader = new DataReader(synthStream))
                {
                    await reader.LoadAsync((uint)synthStream.Size);

                    IBuffer buffer = reader.ReadBuffer((uint)synthStream.Size);
                    await FileIO.WriteBufferAsync(source, buffer);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Couldn't prepare wav for transcoding");
                Debug.WriteLine(ex);
            }


            // Prepare transcoding files
            var preparedTranscoderResult = await _transcoder.PrepareFileTranscodeAsync(source, fileTarget, _profile);

            if (preparedTranscoderResult.CanTranscode)
            {
                // Set task for transcoding
                await preparedTranscoderResult.TranscodeAsync().AsTask(_cts.Token);

                // Set Music-properties
                MusicProperties fileProperties = await fileTarget.Properties.GetMusicPropertiesAsync();

                fileProperties.Title  = fileTarget.DisplayName;
                fileProperties.Artist = "Talkinator";
                await fileProperties.SavePropertiesAsync();

                // Prepare notification
                // Add the file to app MRU and possibly system MRU
                //RecentStorageItemVisibility visibility = SystemMRUCheckBox.IsChecked.Value ? RecentStorageItemVisibility.AppAndSystem : RecentStorageItemVisibility.AppOnly;
                //rootPage.mruToken = StorageApplicationPermissions.MostRecentlyUsedList.Add(file, file.Name, visibility);

                //RecentStorageItemVisibility visibility = RecentStorageItemVisibility.AppOnly;
                //StorageApplicationPermissions.FutureAccessList.Add(fileTarget, fileTarget.DisplayName);



                StorageFolder parentFolder = await fileTarget.GetParentAsync();

                FolderLauncherOptions launcherOptions = new FolderLauncherOptions();
                launcherOptions.ItemsToSelect.Add(fileTarget);
                await Launcher.LaunchFolderAsync(parentFolder, launcherOptions);



                // Report completed
                success = true;
                Debug.WriteLine(fileTarget.FileType + " export completed");
            }
            else
            {
                Debug.WriteLine(preparedTranscoderResult.FailureReason);
            }

            return(success);
        }
Ejemplo n.º 21
0
        private async Task OnSave(CancellationToken cancellationToken)
        {
            FileSavePicker fileSavePicker = new FileSavePicker();

            fileSavePicker.FileTypeChoices.Add("Auto", new List <string>()
            {
                ".mp4"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_HD1080p", new List <string>()
            {
                ".avi_HD1080p"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_HD720p", new List <string>()
            {
                ".avi_HD720p"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Ntsc", new List <string>()
            {
                ".avi_Ntsc"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Pal", new List <string>()
            {
                ".avi_Pal"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Qvga", new List <string>()
            {
                ".avi_Qvga"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Vga", new List <string>()
            {
                ".avi_Vga"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Wvga", new List <string>()
            {
                ".avi_Wvga"
            });
            fileSavePicker.FileTypeChoices.Add("M4a_High", new List <string>()
            {
                ".m4a_High"
            });
            fileSavePicker.FileTypeChoices.Add("M4a_Low", new List <string>()
            {
                ".m4a_Low"
            });
            fileSavePicker.FileTypeChoices.Add("M4a_Medium", new List <string>()
            {
                ".m4a_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Mp3_High", new List <string>()
            {
                ".mp3_High"
            });
            fileSavePicker.FileTypeChoices.Add("Mp3_Low", new List <string>()
            {
                ".mp3_Low"
            });
            fileSavePicker.FileTypeChoices.Add("Mp3_Medium", new List <string>()
            {
                ".mp3_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_HD1080p", new List <string>()
            {
                ".mp4_HD1080p"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_HD720p", new List <string>()
            {
                ".mp4_HD720p"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Ntsc", new List <string>()
            {
                ".mp4_Ntsc"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Pal", new List <string>()
            {
                ".mp4_Pal"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Qvga", new List <string>()
            {
                ".mp4_Qvga"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Vga", new List <string>()
            {
                ".mp4_Vga"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Wvga", new List <string>()
            {
                ".mp4_Wvga"
            });
            fileSavePicker.FileTypeChoices.Add("Wav_High", new List <string>()
            {
                ".wav_High"
            });
            fileSavePicker.FileTypeChoices.Add("Wav_Low", new List <string>()
            {
                ".wav_Low"
            });
            fileSavePicker.FileTypeChoices.Add("Wav_Medium", new List <string>()
            {
                ".wav_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Wma_High", new List <string>()
            {
                ".wma_High"
            });
            fileSavePicker.FileTypeChoices.Add("Wma_Low", new List <string>()
            {
                ".wma_Low"
            });
            fileSavePicker.FileTypeChoices.Add("Wma_Medium", new List <string>()
            {
                ".wma_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_HD1080p", new List <string>()
            {
                ".wmv_HD1080p"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_HD720p", new List <string>()
            {
                ".wmv_HD720p"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Ntsc", new List <string>()
            {
                ".wmv_Ntsc"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Pal", new List <string>()
            {
                ".wmv_Pal"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Qvga", new List <string>()
            {
                ".wmv_Qvga"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Vga", new List <string>()
            {
                ".wmv_Vga"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Wvga", new List <string>()
            {
                ".wmv_Wvga"
            });

            fileSavePicker.SuggestedFileName = FileName ?? "output";

            StorageFile outputFile = await fileSavePicker.PickSaveFileAsync();

            if (outputFile == null)
            {
                throw new Exception();
            }

            ResetStages(solidColorBrush, 100, "100% done.");

            Save.Content = "Cancel";

            StorageFile temporaryFile = await GetFile("Video", "temp (1).mp4", cancellationToken);

            if (temporaryFile == null)
            {
                return;
            }

            MediaEncodingProfile mediaEncodingProfile = null;

            string fileType = outputFile.FileType.Replace(".", "");

            if (fileType.ToLower() == "mp4")
            {
                using (Stream stream = await temporaryFile.OpenStreamForReadAsync())
                {
                    buffer = new byte[stream.Length];
                    CancelTask(cancellationToken);
                    stream.Read(buffer, 0, buffer.Length);
                    ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 45);
                    using (Stream writeStream = await outputFile.OpenStreamForWriteAsync())
                    {
                        CancelTask(cancellationToken);
                        writeStream.Write(buffer, 0, buffer.Length);
                    };
                    ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 90);
                };
                ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 100);
                Save.Content = "Convert/Save";
                return;
            }
            else
            {
                try
                {
                    await outputFile.RenameAsync(outputFile.DisplayName + "." + fileType.Split('_')[0], NameCollisionOption.GenerateUniqueName);
                }
                catch (Exception ex)
                {
                    await MessageBox(ex.Message);
                }
            }

            CancelTask(cancellationToken);

            MediaFileType mediaFileType = default(MediaFileType);

            VideoEncodingQuality videoEncodingQuality = default(VideoEncodingQuality);

            AudioEncodingQuality audioEncodingQuality = default(AudioEncodingQuality);

            Enum.TryParse <MediaFileType>(fileType.Split('_')[0], true, out mediaFileType);

            Enum.TryParse <VideoEncodingQuality>(fileType.Split('_')[1], true, out videoEncodingQuality);

            Enum.TryParse <AudioEncodingQuality>(fileType.Split('_')[1], true, out audioEncodingQuality);

            switch (mediaFileType)
            {
            case MediaFileType.avi:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateAvi(videoEncodingQuality);
                break;
            }

            case MediaFileType.m4a:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateM4a(audioEncodingQuality);
                break;
            }

            case MediaFileType.mp3:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateMp3(audioEncodingQuality);
                break;
            }

            case MediaFileType.mp4:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateMp4(videoEncodingQuality);
                break;
            }

            case MediaFileType.wav:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateWav(audioEncodingQuality);
                break;
            }

            case MediaFileType.wma:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateWma(audioEncodingQuality);
                break;
            }

            case MediaFileType.wmv:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateWmv(videoEncodingQuality);
                break;
            }
            }

            CancelTask(cancellationToken);

            await SetTranscoder(temporaryFile, outputFile, mediaEncodingProfile, cancellationToken);
        }
Ejemplo n.º 22
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileTarget">File to write to</param>
        /// <param name="synthStream">The SpeechSynthesisStream with the actual sound</param>
        /// <param name="voice">The VoiceInformation for setting the correct voice in the artist</param>
        /// <returns></returns>
        private static async Task <bool> SaveAndEncodeFile(StorageFile fileTarget, SpeechSynthesisStream synthStream, VoiceInformation voice)
        {
            bool success = false;

            // Initialise some stuff
            MediaEncodingProfile    _profile;
            MediaTranscoder         _transcoder = new MediaTranscoder();
            CoreDispatcher          _dispatcher = Window.Current.Dispatcher;
            CancellationTokenSource _cts        = new CancellationTokenSource();


            Debug.WriteLine(fileTarget.FileType + " selected");

            // Set encoding profiles
            _profile = null;
            AudioEncodingQuality audioEncodingProfile = AudioEncodingQuality.High;

            if (fileTarget.FileType == ".wma")
            {
                _profile = MediaEncodingProfile.CreateWma(audioEncodingProfile);
            }
            else if (fileTarget.FileType == ".mp3")
            {
                _profile = MediaEncodingProfile.CreateMp3(audioEncodingProfile);
            }
            else if (fileTarget.FileType == ".m4a")
            {
                _profile = MediaEncodingProfile.CreateM4a(audioEncodingProfile);
            }
            else
            {
                Debug.WriteLine("Can't select a media encoding profile");
                return(success);
            }

            // Write temporary Wav to Temp-storage
            ApplicationData appData = ApplicationData.Current;
            StorageFile     source  = await appData.TemporaryFolder.CreateFileAsync("temporary.wav", CreationCollisionOption.ReplaceExisting);

            try
            {
                using (var reader = new DataReader(synthStream))
                {
                    await reader.LoadAsync((uint)synthStream.Size);

                    IBuffer buffer = reader.ReadBuffer((uint)synthStream.Size);
                    await FileIO.WriteBufferAsync(source, buffer);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Couldn't prepare wav for transcoding");
                Debug.WriteLine(ex);
            }


            // Prepare transcoding files
            var preparedTranscoderResult = await _transcoder.PrepareFileTranscodeAsync(source, fileTarget, _profile);

            if (preparedTranscoderResult.CanTranscode)
            {
                // Set task for transcoding
                await preparedTranscoderResult.TranscodeAsync().AsTask(_cts.Token);

                // Set Music-properties
                MusicProperties fileProperties = await fileTarget.Properties.GetMusicPropertiesAsync();

                fileProperties.Title  = fileTarget.DisplayName;
                fileProperties.Artist = ("Talkinator " + ResourceExtensions.GetLocalized("VoicedBy") + " " + voice.DisplayName);
                await fileProperties.SavePropertiesAsync();

                // #TODO: Add the newly created file to the systems MRU?
                // Add the file to app MRU and possibly system MRU
                //RecentStorageItemVisibility visibility = SystemMRUCheckBox.IsChecked.Value ? RecentStorageItemVisibility.AppAndSystem : RecentStorageItemVisibility.AppOnly;
                //rootPage.mruToken = StorageApplicationPermissions.MostRecentlyUsedList.Add(file, file.Name, visibility);

                //RecentStorageItemVisibility visibility = RecentStorageItemVisibility.AppOnly;
                //StorageApplicationPermissions.FutureAccessList.Add(fileTarget, fileTarget.DisplayName);


                // Report completed
                success = true;
                Debug.WriteLine(fileTarget.FileType + " export completed");
            }
            else
            {
                Debug.WriteLine(preparedTranscoderResult.FailureReason);
            }

            return(success);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// 提供音视频转码
        /// </summary>
        /// <param name="SourceFile">源文件</param>
        /// <param name="DestinationFile">目标文件</param>
        /// <param name="MediaTranscodeEncodingProfile">转码编码</param>
        /// <param name="MediaTranscodeQuality">转码质量</param>
        /// <param name="SpeedUp">是否启用硬件加速</param>
        /// <returns></returns>
        public static Task TranscodeFromAudioOrVideoAsync(StorageFile SourceFile, StorageFile DestinationFile, string MediaTranscodeEncodingProfile, string MediaTranscodeQuality, bool SpeedUp)
        {
            return Task.Factory.StartNew((ob) =>
            {
                IsAnyTransformTaskRunning = true;

                AVTranscodeCancellation = new CancellationTokenSource();

                var Para = (ValueTuple<StorageFile, StorageFile, string, string, bool>)ob;

                MediaTranscoder Transcoder = new MediaTranscoder
                {
                    HardwareAccelerationEnabled = true,
                    VideoProcessingAlgorithm = Para.Item5 ? MediaVideoProcessingAlgorithm.Default : MediaVideoProcessingAlgorithm.MrfCrf444
                };

                try
                {
                    MediaEncodingProfile Profile = null;
                    VideoEncodingQuality VideoQuality = default;
                    AudioEncodingQuality AudioQuality = default;

                    switch (Para.Item4)
                    {
                        case "UHD2160p":
                            VideoQuality = VideoEncodingQuality.Uhd2160p;
                            break;
                        case "QVGA":
                            VideoQuality = VideoEncodingQuality.Qvga;
                            break;
                        case "HD1080p":
                            VideoQuality = VideoEncodingQuality.HD1080p;
                            break;
                        case "HD720p":
                            VideoQuality = VideoEncodingQuality.HD720p;
                            break;
                        case "WVGA":
                            VideoQuality = VideoEncodingQuality.Wvga;
                            break;
                        case "VGA":
                            VideoQuality = VideoEncodingQuality.Vga;
                            break;
                        case "High":
                            AudioQuality = AudioEncodingQuality.High;
                            break;
                        case "Medium":
                            AudioQuality = AudioEncodingQuality.Medium;
                            break;
                        case "Low":
                            AudioQuality = AudioEncodingQuality.Low;
                            break;
                    }

                    switch (Para.Item3)
                    {
                        case "MKV":
                            Profile = MediaEncodingProfile.CreateHevc(VideoQuality);
                            break;
                        case "MP4":
                            Profile = MediaEncodingProfile.CreateMp4(VideoQuality);
                            break;
                        case "WMV":
                            Profile = MediaEncodingProfile.CreateWmv(VideoQuality);
                            break;
                        case "AVI":
                            Profile = MediaEncodingProfile.CreateAvi(VideoQuality);
                            break;
                        case "MP3":
                            Profile = MediaEncodingProfile.CreateMp3(AudioQuality);
                            break;
                        case "ALAC":
                            Profile = MediaEncodingProfile.CreateAlac(AudioQuality);
                            break;
                        case "WMA":
                            Profile = MediaEncodingProfile.CreateWma(AudioQuality);
                            break;
                        case "M4A":
                            Profile = MediaEncodingProfile.CreateM4a(AudioQuality);
                            break;
                    }

                    PrepareTranscodeResult Result = Transcoder.PrepareFileTranscodeAsync(Para.Item1, Para.Item2, Profile).AsTask().Result;
                    if (Result.CanTranscode)
                    {
                        SendUpdatableToastWithProgressForTranscode(Para.Item1, Para.Item2);
                        Progress<double> TranscodeProgress = new Progress<double>((CurrentValue) =>
                        {
                            NotificationData Data = new NotificationData();
                            Data.SequenceNumber = 0;
                            Data.Values["ProgressValue"] = (Math.Ceiling(CurrentValue) / 100).ToString();
                            Data.Values["ProgressValueString"] = Convert.ToInt32(CurrentValue) + "%";

                            ToastNotificationManager.CreateToastNotifier().Update(Data, "TranscodeNotification");
                        });

                        Result.TranscodeAsync().AsTask(AVTranscodeCancellation.Token, TranscodeProgress).Wait();

                        ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Success";
                    }
                    else
                    {
                        ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "NotSupport";
                        Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                    }
                }
                catch (AggregateException)
                {
                    ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Cancel";
                    Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                }
                catch (Exception e)
                {
                    ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = e.Message;
                    Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                }
            }, (SourceFile, DestinationFile, MediaTranscodeEncodingProfile, MediaTranscodeQuality, SpeedUp), CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Current).ContinueWith((task, ob) =>
               {
                   AVTranscodeCancellation.Dispose();
                   AVTranscodeCancellation = null;

                   var Para = (ValueTuple<StorageFile, StorageFile>)ob;

                   if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] is string ExcuteStatus)
                   {
                       CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                       {
                           switch (ExcuteStatus)
                           {
                               case "Success":
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Success"), 5000);
                                   ShowTranscodeCompleteNotification(Para.Item1, Para.Item2);
                                   break;
                               case "Cancel":
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Cancel"), 5000);
                                   ShowTranscodeCancelNotification();
                                   break;
                               case "NotSupport":
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_NotSupport"), 5000);
                                   break;
                               default:
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Failure") + ExcuteStatus, 5000);
                                   break;
                           }
                       }).AsTask().Wait();
                   }

                   IsAnyTransformTaskRunning = false;

               }, (SourceFile, DestinationFile), TaskScheduler.Current);
        }
Ejemplo n.º 24
0
        public MainPageViewModel()
        {
            _musicFiles = new ObservableCollection <StorageFile>();
            CurrentFile = new GroorineFileViewModel(null);
            //_player = new Player();
            InitializeAsync();
            DeleteCommand = new DelegateCommand(async(o) =>
            {
                if (!(o is StorageFile))
                {
                    return;
                }
                var sf = o as StorageFile;
                MusicFiles.Remove(sf);
                await sf.DeleteAsync();
            });

            ExportCommand = new DelegateCommand(async(o) =>
            {
                if (!(o is StorageFile))
                {
                    return;
                }
                var sf  = o as StorageFile;
                var fsp = new FileSavePicker();
                fsp.FileTypeChoices.Add("Wave Audio", new List <string> {
                    ".wav"
                });
                fsp.FileTypeChoices.Add("Windows Media Audio", new List <string> {
                    ".wma"
                });
                fsp.FileTypeChoices.Add("MPEG 3 Audio", new List <string> {
                    ".mp3"
                });
                fsp.FileTypeChoices.Add("MPEG 4 Audio", new List <string> {
                    ".m4a"
                });
                fsp.SuggestedFileName = sf.DisplayName;
                fsp.CommitButtonText  = "Bounce";

                StorageFile file = await fsp.PickSaveFileAsync();
                if (file == null)
                {
                    return;
                }

                MediaEncodingProfile mediaEncodingProfile;
                switch (file.FileType.ToString().ToLowerInvariant())
                {
                case ".wma":
                    mediaEncodingProfile = MediaEncodingProfile.CreateWma(AudioEncodingQuality.High);
                    break;

                case ".mp3":
                    mediaEncodingProfile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High);
                    break;

                case ".wav":
                    mediaEncodingProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High);
                    break;

                case ".m4a":
                    mediaEncodingProfile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.High);
                    break;

                default:
                    throw new ArgumentException();
                }

                CreateAudioFileOutputNodeResult result = await _graph.CreateFileOutputNodeAsync(file, mediaEncodingProfile);

                if (result.Status != AudioFileNodeCreationStatus.Success)
                {
                    // FileOutputNode creation failed
                    await new MessageDialog("We couldn't create FileOutputNode, so we failed to bounce.").ShowAsync();
                    return;
                }

                AudioFileOutputNode node = result.FileOutputNode;

                _graph.Stop();

                _frameInputNode.AddOutgoingConnection(node);
                Stop();
                _player.Load(SmfParser.Parse(await sf.OpenStreamForReadAsync()));

                Play();

                _graph.Start();
                var a = new BouncingDialog();

#pragma warning disable CS4014 // この呼び出しを待たないため、現在のメソッドの実行は、呼び出しが完了する前に続行します
                a.ShowAsync();
#pragma warning restore CS4014 // この呼び出しを待たないため、現在のメソッドの実行は、呼び出しが完了する前に続行します



                while (_player.IsPlaying)
                {
                    await Task.Delay(1);
                }
                _graph.Stop();

                await node.FinalizeAsync();

                _graph.Start();

                a.Hide();
                await new MessageDialog("Bouncing has successfully finished!").ShowAsync();
            });
        }