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); } }
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; }
/// <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(); } }