예제 #1
0
        private void Playbtn_Click(object sender, RoutedEventArgs e)
        {
            SoundList soundList = (SoundList)MainListbox.SelectedItem;

            if (soundList == null)
            {
                return;
            }

            string filename = soundList.FileName;

            byte[] buffer = soundList.soundData.bytes;

            try
            {
                if (System.IO.Path.GetExtension(filename).ToLower() == ".wav")
                {
                    WaveFileReader waveFileReader = new WaveFileReader(new MemoryStream(buffer));
                    waveOut.Init(waveFileReader);
                    waveOut.Play();
                }
                else if (System.IO.Path.GetExtension(filename).ToLower() == ".ogg")
                {
                    NAudio.Vorbis.VorbisWaveReader vorbisWaveReader = new NAudio.Vorbis.VorbisWaveReader(new MemoryStream(buffer));
                    waveOut.Init(vorbisWaveReader);
                    waveOut.Play();
                }
            }
            catch (Exception)
            {
                System.Media.SystemSounds.Hand.Play();
            }
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    if (directWaveOut != null)
                    {
                        directWaveOut.Stop();
                    }

                    if (GenericFileReader != null)
                    {
                        GenericFileReader.Dispose();
                    }

                    if (VorbisFileReader != null)
                    {
                        VorbisFileReader.Dispose();
                    }

                    if (directWaveOut != null)
                    {
                        directWaveOut.Dispose();
                    }
                    Debug.WriteLine("[DISPOSE] Disposed of player for " + fileName + ".");
                }
            }
            GenericFileReader = null;
            VorbisFileReader  = null;
            directWaveOut     = null;
            //dispose unmanaged resources
            disposed = true;
        }
        private void StopAudio()
        {
            if (_audio != null)
            {
                if (_waveReader != null)
                {
                    _waveReader.Dispose();
                    _waveReader = null;
                }

                if (_mp3Reader != null)
                {
                    _mp3Reader.Dispose();
                    _mp3Reader = null;
                }


                try
                {
                    _audio.PlaybackStopped -= PreviewAudio_PlaybackStopped;
                    _audio.Stop();
                    _audio.Dispose();
                }
                catch (Exception e)
                {
                    Logger.Warn($"Error stopping audio: {e.Message}");
                }


                _audio = null;
                NotifyPropertyChanged(nameof(IsPlayingAudio));
            }
        }
        public NSoundPlayer(Guid SoundDevice, string soundFile, float volume)
        {
            fullFileName = soundFile;
            fileName     = soundFile.Split('\\').Last();
            if (File.Exists(soundFile))
            {
                if (soundFile.EndsWith("ogg"))
                {
                    format = PlayerFormat.Vorbis;
                }

                switch (format)
                {
                case PlayerFormat.Vorbis:
                    VorbisFileReader = new NAudio.Vorbis.VorbisWaveReader(soundFile);
                    directWaveOut    = new DirectSoundOut(SoundDevice, 120);
                    directWaveOut.Init(VorbisFileReader);
                    directWaveOut.Volume = volume;
                    directWaveOut.Play();
                    break;

                default:
                    GenericFileReader = new AudioFileReader(soundFile);
                    directWaveOut     = new DirectSoundOut(SoundDevice, 120);
                    directWaveOut.Init(GenericFileReader);
                    GenericFileReader.Volume = volume;
                    directWaveOut.Play();
                    break;
                }
            }
        }
예제 #5
0
 static async Task <bool> To_MP3(int File_Number, string To_Dir, bool IsFromFileDelete)
 {
     if (!File.Exists(From_Files[File_Number]))
     {
         return(false);
     }
     try
     {
         string To_Audio_File = To_Dir + "\\" + Path.GetFileNameWithoutExtension(From_Files[File_Number]) + ".mp3";
         await Task.Run(() =>
         {
             string Ex = Path.GetExtension(From_Files[File_Number]);
             if (Ex == ".ogg")
             {
                 using (NAudio.Vorbis.VorbisWaveReader reader = new NAudio.Vorbis.VorbisWaveReader(From_Files[File_Number]))
                     using (LameMP3FileWriter wtr = new LameMP3FileWriter(To_Audio_File, reader.WaveFormat, 128))
                         reader.CopyTo(wtr);
             }
             else if (Ex == ".wav")
             {
                 using (WaveFileReader reader = new WaveFileReader(From_Files[File_Number]))
                     using (LameMP3FileWriter wtr = new LameMP3FileWriter(To_Audio_File, reader.WaveFormat, 128))
                         reader.CopyTo(wtr);
             }
             else if (Ex == ".flac")
             {
                 using (NAudio.Flac.FlacReader reader = new NAudio.Flac.FlacReader(From_Files[File_Number]))
                     using (LameMP3FileWriter wtr = new LameMP3FileWriter(To_Audio_File, reader.WaveFormat, 128))
                         reader.CopyTo(wtr);
             }
             else if (Ex == ".aac" || Ex == ".wma" || Ex == ".mp4" || Ex == ".webm")
             {
                 using (MediaFoundationReader reader = new MediaFoundationReader(From_Files[File_Number]))
                     using (LameMP3FileWriter wtr = new LameMP3FileWriter(To_Audio_File, reader.WaveFormat, 128))
                         reader.CopyTo(wtr);
             }
             else
             {
                 Un4seen.Bass.Misc.EncoderLAME mc = new Un4seen.Bass.Misc.EncoderLAME(0);
                 mc.EncoderDirectory = Voice_Set.Special_Path + "/Encode_Mp3";
                 mc.InputFile        = From_Files[File_Number];
                 mc.OutputFile       = To_Audio_File;
                 mc.LAME_Bitrate     = (int)Un4seen.Bass.Misc.EncoderLAME.BITRATE.kbps_160;
                 mc.LAME_Mode        = Un4seen.Bass.Misc.EncoderLAME.LAMEMode.Default;
                 mc.LAME_Quality     = Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q2;
                 Un4seen.Bass.Misc.BaseEncoder.EncodeFile(mc, null, true, false, true);
             }
             if (IsFromFileDelete)
             {
                 File.Delete(From_Files[File_Number]);
             }
         });
     }
     catch
     {
         return(false);
     }
     return(true);
 }
예제 #6
0
        private void MapSoundPlay()
        {
            SoundListItem soundListItems = (SoundListItem)MainListbox.SelectedItem;

            if (soundListItems != null)
            {
                string soundname = soundListItems.FileName;


                SoundData soundData = mapEditor.mapdata.soundDatas.Find((x) => x.path == soundname);

                try
                {
                    if (soundData == null)
                    {
                        byte[] buffer = data.ReadFile(soundname);
                        if (buffer.Length == 0)
                        {
                            return;
                        }

                        if (System.IO.Path.GetExtension(soundname).ToLower() == ".wav")
                        {
                            WaveFileReader waveFileReader = new WaveFileReader(new MemoryStream(buffer));
                            waveOut.Init(waveFileReader);
                            waveOut.Play();
                        }
                        else if (System.IO.Path.GetExtension(soundname).ToLower() == ".ogg")
                        {
                            NAudio.Vorbis.VorbisWaveReader vorbisWaveReader = new NAudio.Vorbis.VorbisWaveReader(new MemoryStream(buffer));
                            waveOut.Init(vorbisWaveReader);
                            waveOut.Play();
                        }
                    }
                    else
                    {
                        if (System.IO.Path.GetExtension(soundname).ToLower() == ".wav")
                        {
                            WaveFileReader waveFileReader = new WaveFileReader(new MemoryStream(soundData.bytes));
                            waveOut.Init(waveFileReader);
                            waveOut.Play();
                        }
                        else if (System.IO.Path.GetExtension(soundname).ToLower() == ".ogg")
                        {
                            NAudio.Vorbis.VorbisWaveReader vorbisWaveReader = new NAudio.Vorbis.VorbisWaveReader(new MemoryStream(soundData.bytes));
                            waveOut.Init(vorbisWaveReader);
                            waveOut.Play();
                        }
                    }
                }
                catch (Exception)
                {
                    System.Media.SystemSounds.Hand.Play();
                }
            }
        }
예제 #7
0
        public void PlayMusic(string fileName)
        {
            var vorbisStream = new NAudio.Vorbis.VorbisWaveReader(fileName);

            try
            {
                mixer.AddMixerInput((IWaveProvider)vorbisStream);
            }
            catch (ArgumentException)
            {
            }
        }
예제 #8
0
        void OnMessageInbound(object sender, Client.MessageInboundEventArgs e)
        {
            ChatBoxWriteLine(e.username + ": " + e.message);

            if (e.message.ToUpper().Contains("CARAMEL"))
            {
                if (!(waveOut is null))
                {
                    waveOut.Dispose();
                }
                waveOut = new WaveOutEvent();
                NAudio.Vorbis.VorbisWaveReader ogg = new NAudio.Vorbis.VorbisWaveReader(new System.IO.MemoryStream(Properties.Resources.CaramelHeaven));
                waveOut.Init(ogg);
                waveOut.Play();
            }
            if (e.message.ToUpper().Contains("MIAU") || e.message.ToUpper().Contains("MEOW"))
            {
                if (!(waveOut is null))
                {
                    waveOut.Dispose();
                }
                waveOut = new WaveOutEvent();
                NAudio.Vorbis.VorbisWaveReader ogg = new NAudio.Vorbis.VorbisWaveReader(new System.IO.MemoryStream(Properties.Resources.Meow));
                waveOut.Init(ogg);
                waveOut.Play();
            }
            if (e.message.ToUpper().Contains("MONOSUGOI"))
            {
                if (!(waveOut is null))
                {
                    waveOut.Dispose();
                }
                waveOut = new WaveOutEvent();
                NAudio.Vorbis.VorbisWaveReader ogg = new NAudio.Vorbis.VorbisWaveReader(new System.IO.MemoryStream(Properties.Resources.Monosugoi_Space_Shuttle_de_Koishi_ga_Monosugoi_uta));
                waveOut.Init(ogg);
                waveOut.Play();
            }
            if (e.message.ToUpper().Contains("STOP"))
            {
                if (!(waveOut is null))
                {
                    waveOut.Dispose();
                }
            }
        }
예제 #9
0
 private void Play(Stream stream)
 {
     mStop = false;
     Task.Factory.StartNew(() =>
     {
         using (var vorbisStream = new NAudio.Vorbis.VorbisWaveReader(stream))
         using (var waveOut = new NAudio.Wave.WaveOutEvent())
         {
             try
             {
                 waveOut.Init(vorbisStream);
                 waveOut.Play();
                 SpinWait.SpinUntil(() => vorbisStream.Position >= vorbisStream.Length || mStop);
                 Thread.Sleep(200);
             }
             catch (NAudio.MmException) { }
         }
     }).ContinueWith((t) => { if (OnPlayFinished != null) OnPlayFinished(); });
 }
예제 #10
0
        private void StarCraftSoundPlay()
        {
            TreeViewItem titem = (TreeViewItem)MainTreeview.SelectedItem;

            if (titem != null)
            {
                if (titem.Items.Count == 0)
                {
                    ComboBoxItem combo    = (ComboBoxItem)SoundLan.SelectedItem;
                    string       lanstr   = (string)combo.Tag;
                    string       filename = (string)titem.Tag;

                    //lanstr = lanstr.ToLower();
                    //filename = filename.ToLower();

                    byte[] buffer = data.ReadFile(lanstr + filename);

                    if (buffer.Length == 0)
                    {
                        buffer = data.ReadFile(filename);
                    }

                    if (buffer.Length == 0)
                    {
                        return;
                    }


                    if (System.IO.Path.GetExtension(filename).ToLower() == ".wav")
                    {
                        WaveFileReader waveFileReader = new WaveFileReader(new MemoryStream(buffer));
                        waveOut.Init(waveFileReader);
                        waveOut.Play();
                    }
                    else if (System.IO.Path.GetExtension(filename).ToLower() == ".ogg")
                    {
                        NAudio.Vorbis.VorbisWaveReader vorbisWaveReader = new NAudio.Vorbis.VorbisWaveReader(new MemoryStream(buffer));
                        waveOut.Init(vorbisWaveReader);
                        waveOut.Play();
                    }
                }
            }
        }
예제 #11
0
        private void PlaySound(string filepath)
        {
            if (File.Exists(filepath))
            {
                Task.Factory.StartNew(() =>
                {
                    if (filepath.EndsWith("ogg"))
                    {
                        NAudio.Vorbis.VorbisWaveReader VorbisFileReader = new NAudio.Vorbis.VorbisWaveReader(filepath);
                        directWaveOut.Init(VorbisFileReader);
                    }
                    else
                    {
                        AudioFileReader audioFileReader = new AudioFileReader(filepath);
                        directWaveOut.Init(audioFileReader);
                    }

                    directWaveOut.Play();
                });
            }
        }
예제 #12
0
        public static byte[] Ogg_to_wav(string fil_n, byte ch, out byte[] mono)
        {
            byte[] mono2 = null;
            Task   a     = Task.Run(() =>
            {
                WaveFormat format = new WaveFormat(48000, 16, 1);
                try
                {
                    using (NAudio.Vorbis.VorbisWaveReader reader = new NAudio.Vorbis.VorbisWaveReader(fil_n))
                    {
                        using (WaveFormatConversionStream stream = new WaveFormatConversionStream(format, reader))
                        {
                            mono2 = new byte[stream.Length];
                            stream.Read(mono2, 0, mono2.Length);
                        }
                    }
                }
                catch (Exception) { }
            });

            byte[] buffer = null;
            try
            {
                WaveFormat format = new WaveFormat(48000, 16, ch);
                using (NAudio.Vorbis.VorbisWaveReader reader = new NAudio.Vorbis.VorbisWaveReader(fil_n))
                {
                    using (WaveFormatConversionStream stream = new WaveFormatConversionStream(format, reader))
                    {
                        buffer = new byte[stream.Length];
                        stream.Read(buffer, 0, buffer.Length);
                    }
                }
            }
            catch (Exception) { }
            a.Wait();
            mono = mono2;
            return(buffer);
        }
예제 #13
0
        private void ButtonClicked(object sender, RoutedEventArgs e)
        {
            SoundButton  button  = sender as SoundButton;
            WaveOutEvent waveOut = new WaveOutEvent();

            try {
                if (button.SoundClip.Contains(".ogg"))
                {
                    FileStream   fileStream   = new FileStream(button.SoundClip, FileMode.Open, FileAccess.Read);
                    MemoryStream memoryStream = new MemoryStream();
                    fileStream.CopyTo(memoryStream);

                    var vorbisStream = new NAudio.Vorbis.VorbisWaveReader(memoryStream);
                    vorbisStream.Position = 0;
                    waveOut.Init(vorbisStream);
                }
                else if (button.SoundClip.Contains(".mp3"))
                {
                    var reader = new Mp3FileReader(button.SoundClip);
                    reader.Position = 0;
                    waveOut.Init(reader);
                }
                else if (button.SoundClip.Contains(".flac"))
                {
                    var reader = new FlacReader(button.SoundClip);
                    reader.Position = 0;
                    waveOut.Init(reader);
                }

                waveOut.PlaybackStopped += new EventHandler <StoppedEventArgs>(AudioPlaybackStopped);
                waveOut.Play();
            }
            catch (Exception ex) {
                Debug.WriteLine(ex);
                waveOut.Dispose();
            }
        }
        internal void PlayPreviewAudio()
        {
            if (_audio == null)
            {
                try
                {
                    if (_audioFileName.EndsWith(".ogg", StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (!string.IsNullOrWhiteSpace(_audioPath))
                        {
                            _audio      = new NAudio.Wave.WaveOut();
                            _waveReader = new NAudio.Vorbis.VorbisWaveReader(_audioPath);
                            _audio.Init(_waveReader);
                        }
                        else if (_audioFile != null)
                        {
                            _audio      = new NAudio.Wave.WaveOut();
                            _waveReader = new NAudio.Vorbis.VorbisWaveReader(_audioFile);
                            _audio.Init(_waveReader);
                        }
                    }
                    else if (_audioFileName.EndsWith(".mp3", StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (!string.IsNullOrWhiteSpace(_audioPath))
                        {
                            _audio     = new NAudio.Wave.WaveOut();
                            _mp3Reader = new NAudio.Wave.Mp3FileReader(_audioPath);
                            _audio.Init(_mp3Reader);
                        }
                        else if (_audioFile != null)
                        {
                            _audio     = new NAudio.Wave.WaveOut();
                            _mp3Reader = new NAudio.Wave.Mp3FileReader(_audioFile);
                            _audio.Init(_mp3Reader);
                        }
                    }
                    else
                    {
                        Logger.Warn($"Unsupported audio file: {_audioFileName}");
                        return;
                    }

                    if (_waveReader != null || _mp3Reader != null)
                    {
                        _audio.PlaybackStopped += PreviewAudio_PlaybackStopped;
                        _audio.Play();
                    }
                    else
                    {
                        Sys.Message(new WMessage($"{ResourceHelper.Get(StringKey.FailedToPlayPreviewAudio)} {_audioFileName}"));
                    }

                    NotifyPropertyChanged(nameof(IsPlayingAudio));
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                    Sys.Message(new WMessage($"{ResourceHelper.Get(StringKey.FailedToPlayPreviewAudio)} {_audioFileName}: {e.Message}"));
                }
            }
            else
            {
                StopAudio();
            }
        }
예제 #15
0
        private void PlaySound(SaveFile.Sound Item)
        {
            foreach (System.Windows.Forms.TreeNode DeviceNode in this.treeView1.Nodes)
            {
                if (DeviceNode.Checked && DeviceNode.Tag != null && ((SaveFile.Device)DeviceNode.Tag).CurrentDevice != null)
                {
                    try
                    {
                        NAudio.Wave.WaveStream Stream;
                        if (Item.SndFormat == SoundFormat.OGG)
                        {
                            Stream = new NAudio.Vorbis.VorbisWaveReader(Item.FilePath);
                        }
                        else if (Item.SndFormat == SoundFormat.WAV)
                        {
                            Stream = new NAudio.Wave.WaveFileReader(Item.FilePath);
                        }
                        else if (Item.SndFormat == SoundFormat.MP3)
                        {
                            Stream = new NAudio.Wave.Mp3FileReader(Item.FilePath);
                        }
                        else if (Item.SndFormat == SoundFormat.AIFF)
                        {
                            Stream = new NAudio.Wave.AiffFileReader(Item.FilePath);
                        }
                        else
                        {
                            throw new System.NotSupportedException();
                        }

                        if (this.UserData.LoopEnabled)
                        {
                            Stream = new LoopStream(Stream);
                        }

                        NAudio.Wave.WasapiOut PlayAudio = new NAudio.Wave.WasapiOut((NAudio.CoreAudioApi.MMDevice)((SaveFile.Device)DeviceNode.Tag).CurrentDevice, NAudio.CoreAudioApi.AudioClientShareMode.Shared, true, 100);
                        this.CurrentlyPlaying.Add(PlayAudio);
                        {
                            PlayAudio.Init(Stream);
                            PlayAudio.Play();
                        }

                        PlayAudio.PlaybackStopped += this.WaveOut_PlaybackStopped;
                    }
                    catch (System.FormatException Ex)
                    {
                        LucasStuff.Message.Show(Ex.Message, "An error occured while playing", LucasStuff.Message.Buttons.OK, LucasStuff.Message.Icon.Error);
                        return;
                    }
                    catch (System.IO.InvalidDataException Ex)
                    {
                        LucasStuff.Message.Show(Ex.Message, "An error occured while playing", LucasStuff.Message.Buttons.OK, LucasStuff.Message.Icon.Error);
                        return;
                    }
                    catch (System.IO.FileNotFoundException Ex)
                    {
                        System.Windows.Forms.DialogResult Result = LucasStuff.Message.Show(Ex.Message + "\n\nShould this file be removed from your audio listing?", "An error occured while playing", LucasStuff.Message.Buttons.YesNo, LucasStuff.Message.Icon.Error);
                        if (Result == System.Windows.Forms.DialogResult.Yes)
                        {
                            //this.DeleteSounds(); // HACK: fix this before PC 1.0 Update #1
                        }
                        return;
                    }
                }
            }
        }
예제 #16
0
        /// <summary>
        /// Plays audio_test_file.ogg based on launch settings for testing audio
        /// </summary>
        /// <param name="channel"> Where audio will play from: Left,Center,or Right channel</param>
        internal void TestAudio(AudioChannel channel)
        {
            string pathToTestFile = Path.Combine(Sys._7HFolder, "Resources", "audio_test_file.ogg");


            if (_audioTest == null)
            {
                // reference: https://markheath.net/post/handling-multi-channel-audio-in-naudio
                // reference: https://stackoverflow.com/questions/22248138/play-sound-on-specific-channel-with-naudio?rq=1

                // input 0 - audio test .ogg
                // input 1 - silenced wave provider to play silent audio
                NAudio.Vorbis.VorbisWaveReader waveReader   = new NAudio.Vorbis.VorbisWaveReader(pathToTestFile);
                MultiplexingWaveProvider       waveProvider = new MultiplexingWaveProvider(new List <IWaveProvider>()
                {
                    waveReader, new SilenceWaveProvider(waveReader.WaveFormat)
                }, 2);

                int leftChannel  = 0;
                int rightChannel = 1;

                if (IsReverseSpeakersChecked)
                {
                    leftChannel  = 1;
                    rightChannel = 0;
                }

                if (channel == AudioChannel.Left)
                {
                    // note that the wave reader has 2 input channels so we must route both input channels of the reader to the output channel
                    waveProvider.ConnectInputToOutput(0, leftChannel);
                    waveProvider.ConnectInputToOutput(1, leftChannel);

                    waveProvider.ConnectInputToOutput(2, rightChannel);
                    waveProvider.ConnectInputToOutput(3, rightChannel);
                }
                else if (channel == AudioChannel.Right)
                {
                    waveProvider.ConnectInputToOutput(0, rightChannel);
                    waveProvider.ConnectInputToOutput(1, rightChannel);

                    waveProvider.ConnectInputToOutput(2, leftChannel);
                    waveProvider.ConnectInputToOutput(3, leftChannel);
                }
                else
                {
                    waveProvider.ConnectInputToOutput(0, leftChannel);
                    waveProvider.ConnectInputToOutput(1, leftChannel);

                    waveProvider.ConnectInputToOutput(0, rightChannel);
                    waveProvider.ConnectInputToOutput(1, rightChannel);
                }

                float outVolume = (float)MusicVolumeValue / (float)100.0;
                if (LastVolumeSliderChanged == VolumeSlider.Sfx)
                {
                    outVolume = (float)SfxVolumeValue / (float)100.0;
                }

                _audioTest = new WaveOut
                {
                    DeviceNumber = GetSelectedSoundDeviceNumber(),
                    Volume       = outVolume
                };

                _audioTest.Init(waveProvider);

                _audioTest.PlaybackStopped += AudioTest_PlaybackStopped;
                _audioTest.Play();

                NotifyPropertyChanged(nameof(IsAudioPlaying));
                NotifyPropertyChanged(nameof(IsAudioNotPlaying));
            }
        }
예제 #17
0
        static async Task <bool> To_WAV(int File_Number, string To_Dir, bool IsFromFileDelete, bool IsUseFFmpeg, bool IsUseBass)
        {
            if (!File.Exists(From_Files[File_Number]))
            {
                return(false);
            }
            if (IsUseFFmpeg)
            {
                if (IsUseBass)
                {
                    string To_Audio_File           = To_Dir + "\\" + Path.GetFileNameWithoutExtension(From_Files[File_Number]) + ".wav";
                    Un4seen.Bass.Misc.EncoderWAV w = new Un4seen.Bass.Misc.EncoderWAV(0);
                    w.InputFile         = From_Files[File_Number];
                    w.OutputFile        = To_Audio_File;
                    w.WAV_BitsPerSample = 24;
                    w.Start(null, IntPtr.Zero, false);
                    w.Stop();
                    if (IsFromFileDelete)
                    {
                        File.Delete(From_Files[File_Number]);
                    }
                }
                else
                {
                    string       Encode_Style = "-y -vn -ac 2 -ar 44100 -acodec pcm_s24le -f wav";
                    StreamWriter stw          = File.CreateText(Voice_Set.Special_Path + "/Encode_Mp3/Audio_Encode" + File_Number + ".bat");
                    stw.WriteLine("chcp 65001");
                    stw.Write("\"" + Voice_Set.Special_Path + "/Encode_Mp3/ffmpeg.exe\" -i \"" + From_Files[File_Number] + "\" " + Encode_Style + " \"" + To_Dir + "\\" +
                              Path.GetFileNameWithoutExtension(From_Files[File_Number]) + ".wav\"");
                    stw.Close();
                    ProcessStartInfo processStartInfo = new ProcessStartInfo
                    {
                        FileName        = Voice_Set.Special_Path + "/Encode_Mp3/Audio_Encode" + File_Number + ".bat",
                        CreateNoWindow  = true,
                        UseShellExecute = false
                    };
                    Process p = Process.Start(processStartInfo);
                    await Task.Run(() =>
                    {
                        p.WaitForExit();
                        if (IsFromFileDelete)
                        {
                            File.Delete(From_Files[File_Number]);
                        }
                        File.Delete(Voice_Set.Special_Path + "/Encode_Mp3/Audio_Encode" + File_Number + ".bat");
                    });
                }
            }
            else if (IsUseBass)
            {
                string To_Audio_File           = To_Dir + "\\" + Path.GetFileNameWithoutExtension(From_Files[File_Number]) + ".wav";
                Un4seen.Bass.Misc.EncoderWAV w = new Un4seen.Bass.Misc.EncoderWAV(0);
                w.InputFile         = From_Files[File_Number];
                w.OutputFile        = To_Audio_File;
                w.WAV_BitsPerSample = 24;
                w.Start(null, IntPtr.Zero, false);
                w.Stop();
                if (IsFromFileDelete)
                {
                    File.Delete(From_Files[File_Number]);
                }
            }
            else
            {
                int    Number        = 0;
                string To_Audio_File = To_Dir + "\\" + Path.GetFileNameWithoutExtension(From_Files[File_Number]) + ".wav";
                await Task.Run(() =>
                {
start:
                    try
                    {
                        string Ex = Path.GetExtension(From_Files[File_Number]);
                        if (Ex == ".ogg")
                        {
                            using (NAudio.Vorbis.VorbisWaveReader reader = new NAudio.Vorbis.VorbisWaveReader(From_Files[File_Number]))
                                using (WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(reader))
                                    WaveFileWriter.CreateWaveFile(To_Audio_File, pcmStream);
                        }
                        else if (Ex == ".mp3")
                        {
                            using (NAudio.Wave.Mp3FileReader reader = new NAudio.Wave.Mp3FileReader(From_Files[File_Number]))
                                using (WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(reader))
                                    WaveFileWriter.CreateWaveFile(To_Audio_File, pcmStream);
                        }
                        else if (Ex == ".flac")
                        {
                            using (NAudio.Flac.FlacReader reader = new NAudio.Flac.FlacReader(From_Files[File_Number]))
                                using (WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(reader))
                                    WaveFileWriter.CreateWaveFile(To_Audio_File, pcmStream);
                        }
                        else if (Ex == ".aac" || Ex == ".wma" || Ex == ".mp4")
                        {
                            using (MediaFoundationReader reader = new MediaFoundationReader(From_Files[File_Number]))
                                WaveFileWriter.CreateWaveFile(To_Audio_File, reader);
                        }
                        else if (Ex == ".wav")
                        {
                            using (WaveFileReader reader = new WaveFileReader(From_Files[File_Number]))
                                using (WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(reader))
                                    WaveFileWriter.CreateWaveFile(To_Audio_File, pcmStream);
                        }
                        if (IsFromFileDelete)
                        {
                            File.Delete(From_Files[File_Number]);
                        }
                    }
                    catch (Exception e)
                    {
                        if (Number < 4)
                        {
                            Number++;
                            //goto文...許してください...
                            goto start;
                        }
                        else
                        {
                            Sub_Code.Error_Log_Write(e.Message);
                        }
                    }
                });
            }
            return(true);
        }
        public bool StartAsync(string audioFilePath)
        {
            string fullPath = "";

            try
            {
                if (string.IsNullOrWhiteSpace(audioFilePath))
                {
                    throw new ArgumentNullException(audioFilePath);
                }
                fullPath = System.IO.Path.GetFullPath(audioFilePath);
                if (System.IO.File.Exists(fullPath) == false)
                {
                    throw new System.IO.FileNotFoundException("Could not find the file", audioFilePath);
                }

                WaveStream newStream = null;

                var ext = System.IO.Path.GetExtension(fullPath).ToUpperInvariant();
                switch (ext)
                {
                case ".OGG":
                    newStream = new NAudio.Vorbis.VorbisWaveReader(fullPath);
                    break;

                case ".WAV":
                    newStream = new WaveFileReader(fullPath);
                    break;

                default:
                    throw new ArgumentException("Extension must be .wav or .ogg");
                }
                if (newStream == null)
                {
                    throw new ArgumentException("Could not open the file", fullPath);
                }
                Stop();
                Stream = newStream;
                if (Output == null)
                {
                    Output = new WaveOut();
                }
                // NOTE: this "true" means "convertTo16Bit", and in some audio devices, it seems to need this convert!!
                if (Output != null)
                {
                    Output.Init(Stream.ToSampleProvider(), true);
                }
                if (Output != null)
                {
                    Output.Play();
                }
                AudioFileFullPath = fullPath;
                return(true);
            }
            catch (Exception ex)
            {
                var msg = ex.Message + Environment.NewLine;
                msg += "the argument audioFilePath: " + audioFilePath + Environment.NewLine;
                msg += "fullPath: " + fullPath + Environment.NewLine;
                if (IsToShowMessageBoxOfExceptions)
                {
                    MessageBox.Show(msg);
                }
                return(false);
            }
        }
예제 #19
0
        private void AddList(SoundData soundData)
        {
            if (soundData == null)
            {
                return;
            }

            bool      isrefresh;
            SoundList soundList;

            {
                SoundList fsoundList = soundLists.Find((x) => x.FileName == soundData.path);
                if (fsoundList != null)
                {
                    soundList = fsoundList;
                    isrefresh = true;
                }
                else
                {
                    soundList = new SoundList();
                    isrefresh = false;
                }
            }



            soundList.FileName  = soundData.path;
            soundList.Size      = soundData.bytes.Length / 1024 + "kb";
            soundList.soundData = soundData;

            WaveFormat waveFormat = null;

            long Samplerate = 0;
            long Bitrate    = 0;

            try
            {
                if (System.IO.Path.GetExtension(soundData.path).ToLower() == ".wav")
                {
                    WaveFileReader waveFileReader = new WaveFileReader(new MemoryStream(soundData.bytes));
                    waveFormat = waveFileReader.WaveFormat;


                    soundList.Len = waveFileReader.TotalTime.ToString();
                }
                else if (System.IO.Path.GetExtension(soundData.path).ToLower() == ".ogg")
                {
                    NAudio.Vorbis.VorbisWaveReader vorbisWaveReader = new NAudio.Vorbis.VorbisWaveReader(new MemoryStream(soundData.bytes));
                    waveFormat    = vorbisWaveReader.WaveFormat;
                    soundList.Len = vorbisWaveReader.TotalTime.ToString();
                }
                Samplerate = waveFormat.SampleRate;
                Bitrate    = Samplerate * waveFormat.BitsPerSample * waveFormat.Channels;
            }
            catch (Exception)
            {
            }



            soundList.Samplerate = Samplerate + "Hz";
            soundList.Bitrate    = Bitrate / 1000 + "kb";



            if (!isrefresh)
            {
                soundLists.Add(soundList);
            }


            MainListbox.ItemsSource = null;
            MainListbox.ItemsSource = soundLists;
        }
예제 #20
-1
        private void SendVoice(string file, DiscordClient client, YouTubeVideo video)
        {
            DiscordVoiceClient vc = client.GetVoiceClient();
            try
            {
                int ms = vc.VoiceConfig.FrameLengthMs;
                int channels = vc.VoiceConfig.Channels;
                int sampleRate = 48000;

                int blockSize = 48 * 2 * channels * ms; //sample rate * 2 * channels * milliseconds
                byte[] buffer = new byte[blockSize];
                var outFormat = new WaveFormat(sampleRate, 16, channels);

                vc.SetSpeaking(true);

                if(video.AudioFormat == AudioFormat.Mp3)
                {
                    using (var mp3Reader = new Mp3FileReader(video.Stream()))
                    {
                        using (var resampler = new MediaFoundationResampler(mp3Reader, outFormat) { ResamplerQuality = 60 })
                        {
                            //resampler.ResamplerQuality = 60;
                            int byteCount;
                            while ((byteCount = resampler.Read(buffer, 0, blockSize)) > 0)
                            {
                                if (vc.Connected)
                                {
                                    vc.SendVoice(buffer);
                                }
                                else
                                    break;
                            }
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine("Voice finished enqueuing");
                            Console.ForegroundColor = ConsoleColor.White;
                            resampler.Dispose();
                            mp3Reader.Close();
                        }
                    }
                }
                else if(video.AudioFormat == AudioFormat.Vorbis)
                {
                    using (var vorbis = new NAudio.Vorbis.VorbisWaveReader(video.Stream()))
                    {
                        using (var resampler = new MediaFoundationResampler(vorbis, outFormat) { ResamplerQuality = 60 })
                        {
                            int byteCount;
                            while ((byteCount = resampler.Read(buffer, 0, blockSize)) > 0)
                            {
                                if (vc.Connected)
                                {
                                    vc.SendVoice(buffer);
                                }
                                else
                                    break;
                            }
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine("Voice finished enqueuing");
                            Console.ForegroundColor = ConsoleColor.White;
                            resampler.Dispose();
                            vorbis.Close();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                try
                {
                    MainEntry.owner.SendMessage("Exception during voice: `" + ex.Message + "`\n\n```" + ex.StackTrace + "\n```");
                }
                catch { }
            }
        }