Как я могу наложить два аудиофайла в C #? - PullRequest
2 голосов
/ 19 мая 2009

Мне нужно смешать два аудио файла. Аудио 1 будет статическим файлом и используется для «тегирования» аудио 2. Для ясности, я говорю об аудио-теге, а не о теге ID3.

Есть две основные проблемы, с которыми я не могу обернуться.

1) Как я могу повторить Аудио 1 при смешивании с Аудио 2, чтобы результат был такой же длины, как Аудио 2?

2) Аудио 2 будет MP3, и я не хочу перекодировать его и, возможно, снизить его качество.

Будем весьма благодарны за любые библиотеки или идеи о том, как это можно сделать в C #.

Ответы [ 3 ]

4 голосов
/ 19 мая 2009

Вы можете использовать NAudio , чтобы сделать это. Используйте класс WaveFileReader, чтобы создать WaveStream, который может читать из каждого из ваших файлов (MP3 нужно сначала конвертировать в PCM - см. Использование Mp3FileReader в демонстрационном коде NAudio). Затем я бы сделал производный WaveStream, который зацикливается (то есть в методе Read, когда вы доберетесь до конца исходных данных, вернитесь к началу).

Затем смешайте их вместе, используя WaveMixerStream32. (сначала их нужно будет преобразовать в 32-разрядные - для этого используйте WaveChannel32). Этот класс также позволит вам установить уровни громкости каждого файла. Наконец, преобразуйте обратно в 16 бит, используя Wave32To16Stream, а затем используйте WaveFileWriter для создания вашего окончательного файла. Затем используйте LAME для конвертации в MP3.

2 голосов
/ 19 мая 2009

Вам нужно будет декодировать mp3 в волновой формат, выполнить микширование, а затем закодировать его обратно в формат mp3.

Кто-то должен будет указать вам некоторые mp3-библиотеки. Я могу помочь вам с фактическим сведением.

Это круто, как это работает на самом деле. Звуковой файл - это просто набор амплитудных выборок, записанных с определенным интервалом. Это, например, может быть звук:

0, 12, 128, 14, -1, -13, -128, -64, -32

Хорошо, это действительно короткий звук, но держись за меня. Скажем, я хочу смешать вышеуказанный звук с этим звуком:

10, -12, -100, -150, -75, -25, -12, -0

Это классная часть, мы просто сложим вместе два массива:

10, 0, 28, -136, -76 ...

0 + 10 = 10 12 + -12 = 0 128 + -100 = 28 ...

Единственное, что вам действительно нужно остерегаться - это тот факт, что есть пределы амплитуд, которые вы можете сохранить в волновом файле. Большинство этих дней 16-битные, но вы все равно можете создавать 8-битные волновые файлы. Если ваши амплитуды превысят пределы волнового файла, вам придется пойти как можно выше или ниже и ограничить его.

Во всяком случае, это суть. Более тонкие моменты нужно будет проработать.

0 голосов
/ 31 мая 2009

Я бы предложил BASS Library. Это делает "микширование", а также позволяет воспроизводить многие форматы, а также DSP, такие как EQ / Fade / Compressor. http://un4seen.com/bass.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...