Как объединить / объединить файлы MP3 с C #? - PullRequest
3 голосов
/ 21 июля 2009

У меня есть библиотека различных слов / фраз, и в настоящее время для построения предложений я добавляю комбинацию этих фраз в список воспроизведения, чтобы составить предложение. К сожалению, если пользователь работает с приложениями, интенсивно использующими процессор (а это большинство моих пользователей), в середине предложения может быть задержка в несколько секунд (между фразами).

Для борьбы с этим я думал о подходе, который объединит правильную комбинацию файлов MP3 на лету в соответствующую фразу, сохранит ее в каталоге% temp%, а затем воспроизведет этот 1 файл MP3, который должен преодолеть проблема с пробелами.

Какой самый простой способ сделать это в C #? Есть простой способ сделать это? Файлы довольно маленькие, по 3-4 секунды каждый, и предложение может состоять из 3-20 фраз.

Ответы [ 4 ]

6 голосов
/ 08 ноября 2010

вот как вы можете объединить файлы MP3, используя NAudio :

public static void Combine(string[] inputFiles, Stream output)
{
    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);
        }
    }
}

см. здесь для получения дополнительной информации

0 голосов
/ 21 июля 2009

MP3-файлы состоят из «кадров», каждый из которых представляет собой короткий фрагмент (я думаю, около 25 мс) звука.

Так что да, вы можете просто объединить их без проблем.

0 голосов
/ 21 июля 2009

По простому варианту это оболочка для командной строки:

copy /b *.mp3 c:\new.mp3

Лучше было бы объединить потоки. Здесь ответили: Какой самый быстрый способ объединить три файла в C #?

0 голосов
/ 21 июля 2009

Поскольку MP3 - это сжатый источник звука, я полагаю, что вы не можете просто объединить их в один файл без предварительного декодирования каждого из них в виде волны, которую он будет воспроизводить. Это может быть довольно интенсивно. Возможно, вы могли бы обмануть, используя критический раздел при воспроизведении вашей фразы, чтобы процессор не был украден у вас, пока фраза не будет завершена. Это не обязательно хорошо играть с другими темами, но может работать, если ваши фразы короткие.

...