[Share Code] Một số xử lí cơ bản với File MP3

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

[Share Code] Một số xử lí cơ bản với File MP3

Bài gửi  lekhasy on 11/3/2015, 23:50

Đối với audio, C# có hộ trợ cho chúng ta 1 namespace là System.Media;
nhưng các class trong namespace này còn rất hạn chế và chỉ gỗ trợ cho file wav.
vì vậy, mình đã tìm hiểu một số thao tác cơ bản với file mp3 như play một file mp3, nối 2 file mp3 lại với nhau.
để làm được việc này, mình đã sử dụng một pack là NAudio.
các bạn có thể dễ dàng tìm thấy pack này trên visual studio bằng cách gõ tên nó vào mục tìm kiếm package.
đây là một dự án mã nguồn mở, được một nhóm người làm nên. hoàn toàn miễn phí.
suy nghĩ của mình là cái gì họ đã làm dùm mình rồi thì nếu không rảnh, hãy sử dụng cái có sẵn để tiết kiệm thời gian. để dành thời gian đó để làm việc khác, những việc mới mẻ và có tính sáng tạo cao hơn, những việc bạn đang quan tâm.
Code dưới chỉ là code demo cho file mp3, có thể vẫn còn lỗi và trong pack đó còn rất rất nhiều thứ nữa, mình chỉ gợi ý cho các bạn 1 hướng thôi, còn lại là việc của các bạn.
riêng vấn đề playfile của trình này có chất lượng khá kém, nếu không thích, các bạn có thể dùng wmp và ẩn wmp trên form đi để play thay cho code phía dưới.

Nối 2 file mp3:
Code:

public static void Combine( Stream output, params string[] inputFiles)
        {
            foreach (string file in inputFiles)
            {
                Mp3FileReader reader = new Mp3FileReader(file);
                if ((output.Position == 0) && (reader.Id3v2Tag != null))
                {
                    output.Write(reader.Id3v2Tag.RawData, 0, reader.Id3v2Tag.RawData.Length);
                }
                Mp3Frame frame;
                while ((frame = reader.ReadNextFrame()) != null)
                {
                    output.Write(frame.RawData, 0, frame.RawData.Length);
                }
            }
        }

Class player
Code:

public class Soundplayer
    {
        private NAudio.Wave.BlockAlignReductionStream stream = null;
        private NAudio.Wave.DirectSoundOut output = new NAudio.Wave.DirectSoundOut();

        private void Disposewave()
        {
            if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing)
            {
                output.Stop();
            }

            output.Dispose();
            output = null;

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

        public void PlayFile(string Path)
        {
            NAudio.Wave.WaveStream pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.Mp3FileReader(Path));
            stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
            output.Init(stream);
            output.Play();
        }

        public void PauseAndPlay()
        {
            if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing)
            {
                output.Pause();
            }
            else output.Play();
        }
    }

lekhasy

Tổng số bài gửi : 3
Join date : 05/03/2015

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết