NAudio разделить mp3 файл

Я очень новичок в аудио или mp3 материалах, искал способ иметь возможность разделить mp3-файл на C#, asp.net. После того, как я погуглил в течение трех дней без особой помощи, я надеюсь, что кто-то здесь может указать мне верное направление.

Могу ли я использовать NAudio для этого? Есть ли пример кода для этого? Заранее спасибо.

5 ответов

Решение

Мое окончательное решение для разделения mp3 файлов в C# - использовать NAudio. Вот пример сценария для этого, надеюсь, он поможет кому-то в сообществе:

string strMP3Folder = "<YOUR FOLDER PATH>";
string strMP3SourceFilename = "<YOUR SOURCE MP3 FILENAMe>";
string strMP3OutputFilename = "<YOUR OUTPUT MP3 FILENAME>";

using (Mp3FileReader reader = new Mp3FileReader(strMP3Folder + strMP3SourceFilename))
{
    int count = 1;
    Mp3Frame mp3Frame = reader.ReadNextFrame();
    System.IO.FileStream _fs = new System.IO.FileStream(strMP3Folder + strMP3OutputFilename, System.IO.FileMode.Create, System.IO.FileAccess.Write);

    while (mp3Frame != null)
    {
        if (count > 500) //retrieve a sample of 500 frames
            return;

        _fs.Write(mp3Frame.RawData, 0, mp3Frame.RawData.Length);
        count = count + 1;
        mp3Frame = reader.ReadNextFrame();
     }

     _fs.Close();
}

Спасибо предложению Марка Хита для этого.

Требуемое пространство имен - NAudio.Wave.

Файл MP3 состоит из последовательности кадров MP3 (плюс часто теги ID3 в начале и в конце). Самый чистый способ разделить MP3-файл - это скопировать определенное количество кадров в новый файл (и при желании взять с собой теги ID3, если это важно).

NAudio-х MP3FileReader класс имеет ReadNextFrame метод. Это возвращает MP3Frame класс, который содержит необработанные данные в виде байтового массива в RawData имущество. Он также включает в себя SampleCount свойство, которое вы можете использовать для точного измерения длительности каждого кадра MP3.

Предыдущие ответы помогли мне начать. NAudio - это путь.

Для моего PodcastTool мне нужно было разделять подкасты с 2-минутными интервалами, чтобы ускорить поиск в определенном месте.

Вот код для разделения mp3 каждые N секунд:

    var mp3Path = @"C:\Users\ronnie\Desktop\mp3\dotnetrocks_0717_alan_dahl_imagethink.mp3";
    int splitLength = 120; // seconds

    var mp3Dir = Path.GetDirectoryName(mp3Path);
    var mp3File = Path.GetFileName(mp3Path);
    var splitDir = Path.Combine(mp3Dir,Path.GetFileNameWithoutExtension(mp3Path));
    Directory.CreateDirectory(splitDir);

    int splitI = 0;
    int secsOffset = 0;

    using (var reader = new Mp3FileReader(mp3Path))
    {   
        FileStream writer = null;       
        Action createWriter = new Action(() => {
            writer = File.Create(Path.Combine(splitDir,Path.ChangeExtension(mp3File,(++splitI).ToString("D4") + ".mp3")));
        });

        Mp3Frame frame;
        while ((frame = reader.ReadNextFrame()) != null)
        {           
            if (writer == null) createWriter();

            if ((int)reader.CurrentTime.TotalSeconds - secsOffset >= splitLength)
            {   
                // time for a new file
                writer.Dispose();
                createWriter();
                secsOffset = (int)reader.CurrentTime.TotalSeconds;              
            }

            writer.Write(frame.RawData, 0, frame.RawData.Length);
        }

        if(writer != null) writer.Dispose();
    }

Это было бы полезно Alvas Audio (коммерческая) и ffmpeg

Если вы хотите разделить подкасты, скопируйте дорожки на аудиоустройство (в моем случае плавающие заголовки) и включите небольшой аудиозаголовок, созданный с помощью службы Text To Speech от Google, чтобы идентифицировать дорожки. (например, «История мира в сотне объектов. Эпизод 15. Трек 1 из 4») вы можете проверить небольшой bash-скрипт https://github.com/pulijon/cpodcast/blob/main/cutpodcast.bash

Готов добавить аудиозаголовок на испанском языке. Для других языков вы должны изменить опцию -l и строку заголовка

      gtts-cli "Corte $((10#$ntrack)) de $((10#$numtracks)). $5 " -l es --output pre_$track
Другие вопросы по тегам