Exemplo n.º 1
0
		public static async Task TranscodeInternal(CancellationToken ct, IWaveStreamProvider stream, Stream targetStream)
		{
			using (var mp3Writer = new NAudio.Lame.LameMP3FileWriter(targetStream, stream.WaveFormat, NAudio.Lame.LAMEPreset.VBR_90))
			{
				await stream.Stream.CopyToAsync(mp3Writer, 81920, ct);
			}
		}
Exemplo n.º 2
0
 static void ConvertToMP3(string sourceFilename, string targetFilename)
 {
     using (var reader = new NAudio.Wave.AudioFileReader(sourceFilename))
         using (var writer = new NAudio.Lame.LameMP3FileWriter(targetFilename, reader.WaveFormat, NAudio.Lame.LAMEPreset.STANDARD))
         {
             reader.CopyTo(writer);
         }
 }
Exemplo n.º 3
0
 public static void Main()
 {
     SetConsoleCtrlHandler(new ConsoleEventDelegate(ConsoleEventCallback), true);
     waveIn                   = new NAudio.Wave.WasapiLoopbackCapture();
     waveFileWriter           = new NAudio.Lame.LameMP3FileWriter(@fileName, waveIn.WaveFormat, NAudio.Lame.LAMEPreset.STANDARD);
     waveIn.DataAvailable    += waveIn_DataAvailable;
     waveIn.RecordingStopped += waveIn_RecordingStopped;
     waveIn.StartRecording();
 }
 public byte[] ConvertToMp3(string file, int bitrate = 128)
 {
     using (var retMs = new MemoryStream())
         using (var rdr = new WMAFileReader(file))
             using (var wtr = new NAudio.Lame.LameMP3FileWriter(retMs, rdr.WaveFormat, bitrate))
             {
                 rdr.CopyTo(wtr);
                 return(retMs.ToArray());
             }
 }
Exemplo n.º 5
0
 /// <summary>
 /// Converts mp4 file's audio to mp3. It will throw an exception if Media Foundation codec not installed.
 /// </summary>
 /// <param name="inputFile"></param>
 /// <param name="outputFile"></param>
 public static void ConvertMp4ToMp3(string inputFile, string outputFile)
 {
     using (var reader = new NAudio.Wave.MediaFoundationReader(inputFile))
     {
         using (var writer = new NAudio.Lame.LameMP3FileWriter(outputFile, reader.WaveFormat, NAudio.Lame.LAMEPreset.V2))
         {
             reader.CopyTo(writer);
         }
     }
 }
        private static void WmaToMp3(XConvertJob param)
        {
            var targetFilename = param.SourceFileName.GenerateOutPutPath(XFileType.Mp3);

            if (param.SourceData != null)
            {
                File.WriteAllBytes(param.SourceFileName, param.SourceData);
            }
            using (var reader = new NAudio.Wave.AudioFileReader(param.SourceFileName))
                using (var writer = new NAudio.Lame.LameMP3FileWriter(targetFilename, reader.WaveFormat, NAudio.Lame.LAMEPreset.STANDARD))
                {
                    reader.CopyTo(writer);
                }
            param.ResulFileName = targetFilename;
        }
Exemplo n.º 7
0
        public ActionResult Partners_addComment(string itemID, string text, HttpPostedFileBase audioBlob)
        {
            var mng = new CommentManager();

            string audio = string.Empty;

            if (audioBlob != null)
            {
                var folderPath = System.Web.HttpContext.Current.Server.MapPath(@"/uploads/comm_voice");
                if (!Directory.Exists(folderPath))
                {
                    Directory.CreateDirectory(folderPath);
                }

                audio = Path.Combine(folderPath, Guid.NewGuid() + ".mp3");

                //http://stackoverflow.com/questions/20088743/mvc4-app-unable-to-load-dll-libmp3lame-32-dll
                CheckAddBinPath();

                using (var writer = new NAudio.Lame.LameMP3FileWriter(audio, new NAudio.Wave.WaveFormat(44100, 16, 2), NAudio.Lame.LAMEPreset.STANDARD))
                {
                    audioBlob.InputStream.CopyTo(writer);
                }
            }

            var item = mng.AddComment("customer", itemID, text, audio);

            var res = true;

            return(Json(new
            {
                result = res,
                item = new
                {
                    item.id,
                    created = item.created.GetValueOrDefault().ToString("dd.MM.yyyy HH:mm"),
                    item.username,
                    item.text,
                    audio = PathMap(item.audio)
                }
            }, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 8
0
        /// <summary>
        /// 노래 다운로드 (사운드만 추출해서 다운)
        /// </summary>
        /// <param name="videoId">비디오 고유 아이디</param>
        /// <param name="videoName">비디오 제목</param>
        public async void Download(string videoId, string videoName)
        {
            try
            {
                var youtube        = new YoutubeClient();
                var streamManifest = await youtube.Videos.Streams.GetManifestAsync(videoId);

                var   streamInfo = streamManifest.GetAudioOnly().WithHighestBitrate();
                Regex pattern    = new Regex(@"[\/:*?<>|]");
                videoName = pattern.Replace(videoName, string.Empty);
                string path = AppDomain.CurrentDomain.BaseDirectory + @"playlist\";


                if (streamInfo != null)
                {
                    await youtube.Videos.Streams.DownloadAsync(streamInfo, path + videoName + ".webm");

                    await Task.Run(() =>
                    {
                        using (var reader = new NAudio.Wave.AudioFileReader(path + videoName + ".webm"))
                        {
                            using (var writer = new NAudio.Lame.LameMP3FileWriter(path + videoName + ".prepareMp3", reader.WaveFormat, NAudio.Lame.LAMEPreset.STANDARD))
                            {
                                reader.CopyTo(writer);
                            }
                        }

                        // 변환 도중에 사용자가 음악 재생을 클릭했을때 IOException이 나는것을 방지하기 위해
                        // 확장명을 일부러 다르게 써서 mp3 파일로 변환이 끝나면 확장명을 바꿔준다.
                        File.Move(path + videoName + ".prepareMp3", path + videoName + ".mp3");
                        File.Delete(path + videoName + ".webm");
                        File.Delete(path + videoName + ".prepareMp3");
                    });
                }
            }

            catch
            {
                alert();
            }
        }
Exemplo n.º 9
0
        private static byte[] SlowAudio(byte[] mp3, float newTempo = 0.95f, float newPitch = 1.2f, float newRate = .8f)
        {
            const int BUFFER_SIZE = 1024 * 16;
            byte[] buffer = new byte[BUFFER_SIZE];
            var format = new WaveFormat();

            try
            {
                using (var output = new MemoryStream())
                {

                    File.Delete("temp.wav");
                    File.Delete("temp2.wav");

                    using (var mp3Stream = new MemoryStream(mp3))
                    using (Mp3FileReader reader = new Mp3FileReader(mp3Stream))
                    {
                        WaveFileWriter.CreateWaveFile("temp.wav", reader);
                    }

                    using (WaveFileReader reader = new WaveFileReader("temp.wav"))
                    {
                        int numChannels = reader.WaveFormat.Channels;

                        if (numChannels > 2)
                            throw new Exception("SoundTouch supports only mono or stereo.");

                        int sampleRate = reader.WaveFormat.SampleRate;

                        int bitPerSample = reader.WaveFormat.BitsPerSample;

                        SoundStretcher stretcher = new SoundStretcher(sampleRate, numChannels);
                        var writer = new NAudio.Lame.LameMP3FileWriter(output, new WaveFormat(sampleRate, 16, numChannels), 128);

                        stretcher.Tempo = newTempo;
                        stretcher.Pitch = newPitch;
                        stretcher.Rate = newRate;

                        short[] buffer2 = null;

                        if (bitPerSample != 16 && bitPerSample != 8)
                        {
                            throw new Exception("Not implemented yet.");
                        }

                        if (bitPerSample == 8)
                        {
                            buffer2 = new short[BUFFER_SIZE];
                        }

                        bool finished = false;

                        while (true)
                        {
                            int bytesRead = 0;
                            if (!finished)
                            {
                                bytesRead = reader.Read(buffer, 0, BUFFER_SIZE);

                                if (bytesRead == 0)
                                {
                                    finished = true;
                                    stretcher.Flush();
                                }
                                else
                                {
                                    if (bitPerSample == 16)
                                    {
                                        stretcher.PutSamplesFromBuffer(buffer, 0, bytesRead);
                                    }
                                    else if (bitPerSample == 8)
                                    {
                                        for (int i = 0; i < BUFFER_SIZE; i++)
                                            buffer2[i] = (short)((buffer[i] - 128) * 256);
                                        stretcher.PutSamples(buffer2);
                                    }
                                }
                            }
                            bytesRead = stretcher.ReceiveSamplesToBuffer(buffer, 0, BUFFER_SIZE);
                            writer.Write(buffer, 0, bytesRead);

                            if (finished && bytesRead == 0)
                                break;
                        }
                        reader.Close();
                        writer.Close();
                    }

                    return output.ToArray();
                }
            }
            finally
            {
                File.Delete("temp.wav");
                File.Delete("temp2.wav");
            }

            /////////////////////////////
        }
Exemplo n.º 10
0
        private static void Concatenate(string outputFile, IEnumerable<byte[]> mp3s)
        {
            int i = 0;
            byte[] buffer = new byte[1024];
            NAudio.Lame.LameMP3FileWriter mp3FileWriter = null;
            var format = new WaveFormat();
            byte[][] silence = new byte[][] { new byte[1], new byte[1], new byte[1] };

            try
            {

                mp3FileWriter = new NAudio.Lame.LameMP3FileWriter(outputFile, format, 128);
                silence = new byte[][] {
                    new byte[(format.AverageBytesPerSecond * 1)],
                    new byte[(format.AverageBytesPerSecond * 2)],
                    new byte[(format.AverageBytesPerSecond * 3)],
                };
                mp3FileWriter.Write(silence[1], 0, silence[1].Length);

                foreach (byte[] mp3 in mp3s)
                {
                    i++;

                    File.Delete("temp.wav");
                    File.Delete("temp2.wav");

                    using (var mp3Stream = new MemoryStream(mp3))
                    using (Mp3FileReader reader = new Mp3FileReader(mp3Stream))
                    {
                        WaveFileWriter.CreateWaveFile("temp.wav", reader);
                    }

                    using (WaveFileReader reader = new WaveFileReader("temp.wav"))
                    {
                        if (!reader.WaveFormat.Equals(format))
                        {
                            using (var conversionStream = new WaveFormatConversionStream(format, reader))
                            {
                                WaveFileWriter.CreateWaveFile("temp2.wav", conversionStream);
                            }
                            using (WaveFileReader reader2 = new WaveFileReader("temp2.wav"))
                            {
                                int read;
                                while ((read = reader2.Read(buffer, 0, buffer.Length)) > 0)
                                {
                                    mp3FileWriter.Write(buffer, 0, read);
                                }
                            }
                        }
                        else
                        {
                            int read;
                            while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                mp3FileWriter.Write(buffer, 0, read);
                            }
                        }
                    }
                    mp3FileWriter.Write(silence[1], 0, silence[1].Length);
                }
                mp3FileWriter.Flush();
            }
            finally
            {
                File.Delete("temp.wav");
                File.Delete("temp2.wav");
                if (mp3FileWriter != null)
                {
                    mp3FileWriter.Dispose();
                }
            }
        }
Exemplo n.º 11
0
        private void HandleHotkey()
        {
            if (!recording)
            {
                sourceStream = new NAudio.Wave.WasapiLoopbackCapture();
                sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);
                path = folderLocation.Text + "\\";
                filename = GetFileName(false);
                if (recordToMp3.Checked)
                {
                    filetype = ".mp3";
                    mp3Writer = new NAudio.Lame.LameMP3FileWriter(filename + filetype, sourceStream.WaveFormat, 128);
                }
                else
                {
                    filetype = ".wav";
                    waveWriter = new NAudio.Wave.WaveFileWriter(filename + filetype, sourceStream.WaveFormat);
                }

                sourceStream.StartRecording();
                recording = true;
                timer.Start();

                notifyIcon.BalloonTipText = "Started recording.";
                if (showNotifications.Checked)
                    notifyIcon.ShowBalloonTip(1000);

            }
            else
            {
                StopRecording();
            }
        }
        private async Task ConvertFiles(Func <BackgroundTaskControl, Task> callBack, BackgroundTaskControl bgtc)
        {
            await Task.Delay(250); // give time for rendering changes

            WaveStream inputStream = null;

            for (int i = 0; i < filePaths.Count(); i++)
            {
                try
                {
                    if (filePaths[i].EndsWith(".ogg"))
                    {
                        inputStream = new VorbisWaveReader(filePaths[i]);
                    }
                    else if (filePaths[i].EndsWith(".flac"))
                    {
                        inputStream = new FlacReader(filePaths[i]);
                    }
                    else
                    {
                        inputStream = new AudioFileReader(filePaths[i]);
                    }

                    string selectedFileType = "";
                    Dispatcher.Invoke(() =>
                    {
                        selectedFileType     = OutputFileTypeComboBox.SelectedItem as string;
                        WaitingLabel.Content = $"Now converting {safeFileNames[i]} to {selectedFileType.Substring(selectedFileType.IndexOf("(")+1,4)}";
                        if (bgtc != null)
                        {
                            bgtc.BackgroundTaskLabel.Content = WaitingLabel.Content;
                        }
                    });
                    if (selectedFileType.EndsWith("(.mp3)"))
                    {
                        string monoStereoSelection = "";
                        Dispatcher.Invoke(() =>
                        {
                            monoStereoSelection = MSConvertComboBox.SelectedItem as string;
                        });
                        if (inputStream.WaveFormat.BitsPerSample == 16)
                        {
                            IWaveProvider provider = MonoStereoConvert16(inputStream, monoStereoSelection == "Mono");
                            using (FileStream fileStream = File.Create($"{outputPath}/{safeFileNames[i]}.mp3"))
                                using (NAudio.Lame.LameMP3FileWriter writer = new NAudio.Lame.LameMP3FileWriter(fileStream, provider.WaveFormat, 320000))
                                {
                                    byte[] buffer    = new byte[4096];
                                    int    bytesRead = 0;
                                    do
                                    {
                                        bytesRead = provider.Read(buffer, 0, buffer.Length);
                                        writer.Write(buffer, 0, bytesRead);
                                    } while (bytesRead > 0);
                                }
                        }
                        else if (inputStream.WaveFormat.BitsPerSample == 32)
                        {
                            ISampleProvider provider = MonoStereoConvert32(inputStream as ISampleProvider, monoStereoSelection == "Mono");
                            using (FileStream fileStream = File.Create($"{outputPath}/{safeFileNames[i]}.mp3"))
                                using (NAudio.Lame.LameMP3FileWriter writer = new NAudio.Lame.LameMP3FileWriter(fileStream, provider.WaveFormat, 320000))
                                {
                                    byte[] buffer    = new byte[4096];
                                    int    bytesRead = 0;
                                    do
                                    {
                                        var providerAsWave = provider.ToWaveProvider(); // need to write with bytes not floats
                                        bytesRead = providerAsWave.Read(buffer, 0, buffer.Length);
                                        writer.Write(buffer, 0, bytesRead);
                                    } while (bytesRead > 0);
                                }
                        }


                        TagLib.File outputTags = TagLib.File.Create($"{outputPath}//{safeFileNames[i]}.mp3");
                        TagLib.File inputTags  = TagLib.File.Create(filePaths[i]);
                        outputTags.Tag.Album        = inputTags.Tag.Album;
                        outputTags.Tag.AlbumArtists = inputTags.Tag.AlbumArtists;
                        outputTags.Tag.Genres       = inputTags.Tag.Genres;
                        outputTags.Tag.Performers   = inputTags.Tag.Performers;
                        outputTags.Tag.Year         = inputTags.Tag.Year;
                        outputTags.Tag.Pictures     = inputTags.Tag.Pictures;
                        outputTags.Tag.Title        = inputTags.Tag.Title;
                        outputTags.Tag.Track        = inputTags.Tag.Track;
                        outputTags.Save();
                        inputTags.Dispose();
                        outputTags.Dispose();
                    }
                    //else if (selectedFileType.EndsWith("(.wma)"))
                    //{
                    //    FileStream fileStream = File.Create($"c:/temp/conversiontest/{safeFileName}.wma");
                    //    fileStream.Close();
                    //    using (MediaFoundationEncoder writer = new MediaFoundationEncoder(new NAudio.MediaFoundation.MediaType(inputStream.WaveFormat)))
                    //    {
                    //        writer.Encode($"c:/temp/conversiontest/{safeFileName}.wma", inputStream);
                    //    }
                    //}
                    else if (selectedFileType.EndsWith("(.wav)"))
                    {
                        string monoStereoSelection = "";
                        Dispatcher.Invoke(() =>
                        {
                            monoStereoSelection = MSConvertComboBox.SelectedItem as string;
                        });
                        if (inputStream.WaveFormat.BitsPerSample == 16)
                        {
                            IWaveProvider provider = MonoStereoConvert16(inputStream, monoStereoSelection == "Mono");
                            using (FileStream fileStream = File.Create($"{outputPath}/{safeFileNames[i]}.wav"))
                                using (WaveFileWriter writer = new WaveFileWriter(fileStream, provider.WaveFormat))
                                {
                                    byte[] buffer    = new byte[4096];
                                    int    bytesRead = 0;
                                    do
                                    {
                                        bytesRead = provider.Read(buffer, 0, buffer.Length);
                                        writer.Write(buffer, 0, bytesRead);
                                    } while (bytesRead > 0);
                                }
                        }
                        else if (inputStream.WaveFormat.BitsPerSample == 32)
                        {
                            ISampleProvider provider = MonoStereoConvert32(inputStream as ISampleProvider, monoStereoSelection == "Mono");
                            using (FileStream fileStream = File.Create($"{outputPath}/{safeFileNames[i]}.wav"))
                                using (WaveFileWriter writer = new WaveFileWriter(fileStream, provider.WaveFormat))
                                {
                                    byte[] buffer    = new byte[4096];
                                    int    bytesRead = 0;
                                    do
                                    {
                                        var providerAsWave = provider.ToWaveProvider(); // need to write with bytes not floats
                                        bytesRead = providerAsWave.Read(buffer, 0, buffer.Length);
                                        writer.Write(buffer, 0, bytesRead);
                                    } while (bytesRead > 0);
                                }
                        }
                        TagLib.File outputTags = TagLib.File.Create($"{outputPath}/{safeFileNames[i]}.wav");
                        TagLib.File inputTags  = TagLib.File.Create(filePaths[i]);
                        outputTags.Tag.Album        = inputTags.Tag.Album;
                        outputTags.Tag.AlbumArtists = inputTags.Tag.AlbumArtists;
                        outputTags.Tag.Genres       = inputTags.Tag.Genres;
                        outputTags.Tag.Performers   = inputTags.Tag.Performers;
                        outputTags.Tag.Year         = inputTags.Tag.Year;
                        outputTags.Tag.Pictures     = inputTags.Tag.Pictures;
                        outputTags.Tag.Title        = inputTags.Tag.Title;
                        outputTags.Tag.Track        = inputTags.Tag.Track;
                        outputTags.Save();
                        inputTags.Dispose();
                        outputTags.Dispose();
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show("Error converting " + filePaths[i] + ", message: " + e.Message);
                    //just move onto the next song
                }
                finally
                {
                    (inputStream as WaveStream)?.Close();
                }
            }
            await callBack(bgtc);

            MessageBox.Show("File(s) successfully converted!");
        }
Exemplo n.º 13
0
        private async Task ConvertFiles(Func <BackgroundTaskControl, Task> callBack, BackgroundTaskControl bgtc)
        {
            await Task.Delay(250); // give time for rendering changes

            WaveStream inputStream = null;

            for (int i = 0; i < selectedSongs.Count(); i++)
            {
                try
                {
                    if (selectedSongs[i].FilePath.EndsWith(".ogg"))
                    {
                        inputStream = new VorbisWaveReader(selectedSongs[i].FilePath);
                    }
                    else if (selectedSongs[i].FilePath.EndsWith(".flac"))
                    {
                        inputStream = new FlacReader(selectedSongs[i].FilePath);
                    }
                    else
                    {
                        inputStream = new AudioFileReader(selectedSongs[i].FilePath);
                    }

                    string selectedFileType = "";
                    Dispatcher.Invoke(() =>
                    {
                        selectedFileType                 = OutputFileTypeComboBox.SelectedItem as string;
                        WaitingLabel.Content             = $"Now converting {selectedSongs[i].Name} to {selectedFileType.Substring(selectedFileType.IndexOf("(") + 1, 4)}";
                        bgtc.BackgroundTaskLabel.Content = WaitingLabel.Content;
                    });
                    if (selectedFileType.EndsWith("(.mp3)"))
                    {
                        using (FileStream fileStream = File.Create($"{outputPath}/{selectedSongs[i].Name}.mp3"))
                            using (NAudio.Lame.LameMP3FileWriter writer = new NAudio.Lame.LameMP3FileWriter(fileStream, inputStream.WaveFormat, 320000))
                            {
                                byte[] buffer    = new byte[4096];
                                int    bytesRead = 0;
                                do
                                {
                                    bytesRead = inputStream.Read(buffer, 0, buffer.Length);
                                    writer.Write(buffer, 0, bytesRead);
                                } while (bytesRead > 0);
                            }

                        TagLib.File outputTags = TagLib.File.Create($"{outputPath}/{selectedSongs[i].Name}.mp3");
                        TagLib.File inputTags  = TagLib.File.Create(selectedSongs[i].FilePath);
                        outputTags.Tag.Album        = inputTags.Tag.Album;
                        outputTags.Tag.AlbumArtists = inputTags.Tag.AlbumArtists;
                        outputTags.Tag.Genres       = inputTags.Tag.Genres;
                        outputTags.Tag.Performers   = inputTags.Tag.Performers;
                        outputTags.Tag.Year         = inputTags.Tag.Year;
                        outputTags.Tag.Pictures     = inputTags.Tag.Pictures;
                        outputTags.Tag.Title        = inputTags.Tag.Title;
                        outputTags.Tag.Track        = inputTags.Tag.Track;
                        outputTags.Save();
                        inputTags.Dispose();
                        outputTags.Dispose();
                    }
                    else if (selectedFileType.EndsWith("(.wav)"))
                    {
                        using (FileStream fileStream = File.Create($"{outputPath}/{selectedSongs[i].Name}.wav"))
                            using (WaveFileWriter writer = new WaveFileWriter(fileStream, inputStream.WaveFormat))
                            {
                                byte[] buffer    = new byte[4096];
                                int    bytesRead = 0;
                                do
                                {
                                    bytesRead = inputStream.Read(buffer, 0, buffer.Length);
                                    writer.Write(buffer, 0, bytesRead);
                                } while (bytesRead > 0);
                            }

                        TagLib.File outputTags = TagLib.File.Create($"{outputPath}/{selectedSongs[i].Name}.wav");
                        TagLib.File inputTags  = TagLib.File.Create(selectedSongs[i].FilePath);
                        outputTags.Tag.Album        = inputTags.Tag.Album;
                        outputTags.Tag.AlbumArtists = inputTags.Tag.AlbumArtists;
                        outputTags.Tag.Genres       = inputTags.Tag.Genres;
                        outputTags.Tag.Performers   = inputTags.Tag.Performers;
                        outputTags.Tag.Year         = inputTags.Tag.Year;
                        outputTags.Tag.Pictures     = inputTags.Tag.Pictures;
                        outputTags.Tag.Title        = inputTags.Tag.Title;
                        outputTags.Tag.Track        = inputTags.Tag.Track;
                        outputTags.Save();
                        inputTags.Dispose();
                        outputTags.Dispose();
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show("Error converting " + selectedSongs[i].FilePath + ", message: " + e.Message);
                    await callBack(bgtc);

                    inputStream?.Close();
                    return;
                }
                finally
                {
                    inputStream?.Close();
                }
            }
            await callBack(bgtc);

            MessageBox.Show("File(s) successfully converted!");
        }