Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trim an Audio File(.wav,.mp3) [closed]

Tags:

c#

I am implementing a software related to trimming a audio file using users specified markers for example if a audio file plays for 1 minute and user wants to trim that file from 20 second to 40 second and save it has a new file. Code samples will be appreciated.

Thanks in advance.

like image 611
wahab mehboob Avatar asked Jun 24 '11 09:06

wahab mehboob


2 Answers

Thanks all for your reply but i got the solution from Mark Heath NAudio. Here's the sample Hope it helps :)

public static class WavFileUtils
{
    public static void TrimWavFile(string inPath, string outPath, TimeSpan cutFromStart, TimeSpan cutFromEnd)
    {
        using (WaveFileReader reader = new WaveFileReader(inPath))
        {
            using (WaveFileWriter writer = new WaveFileWriter(outPath, reader.WaveFormat))
            {
                int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000;

                int startPos = (int)cutFromStart.TotalMilliseconds * bytesPerMillisecond;
                startPos = startPos - startPos % reader.WaveFormat.BlockAlign;

                int endBytes = (int)cutFromEnd.TotalMilliseconds * bytesPerMillisecond;
                endBytes = endBytes - endBytes % reader.WaveFormat.BlockAlign;
                int endPos = (int)reader.Length - endBytes; 

                TrimWavFile(reader, writer, startPos, endPos);
            }
        }
    }

    private static void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos)
    {
        reader.Position = startPos;
        byte[] buffer = new byte[1024];
        while (reader.Position < endPos)
        {
            int bytesRequired = (int)(endPos - reader.Position);
            if (bytesRequired > 0)
            {
                int bytesToRead = Math.Min(bytesRequired, buffer.Length);
                int bytesRead = reader.Read(buffer, 0, bytesToRead);
                if (bytesRead > 0)
                {
                    writer.WriteData(buffer, 0, bytesRead);
                }
            }
        }
    }
}
like image 97
wahab mehboob Avatar answered Oct 27 '22 21:10

wahab mehboob


ffmpeg -ss 00:00:30.0 -t 00:00:10.0 -i input.mp3 -acodec copy output.mp3

This can be achieved using Ffmpeg . So download ffmpeg for windows and Start FFmpeg as a Process .

PS : -ss Pun Offset -t Length ,on the Example will trim the Audio File from 30 Sec to 40 Sec (10 Seconds Length)

like image 25
Rosmarine Popcorn Avatar answered Oct 27 '22 19:10

Rosmarine Popcorn