Мое последнее обновление с последним обсуждением этой проблемы отображается внизу
Хорошо, поэтому я пытаюсь создать платформу, где мое приложение silverlight собирается объединять разные инструментальные аудиозаписи в один файл и выводить музыкальный звук.
То, что я сейчас пытаюсь сделать, - это объединить несколько mp3-файлов в один mp3-файл. Но этот последний mp3-файл не должен воспроизводить первый mp3, а затем второй и ... до конца. он должен воспроизводить их все как mp3-каналы. Пользователь собирается поместить гитарный канал, драм-канал и т. Д., А слияние объединит их все в один mp3-файл в качестве вывода.
Я обнаружил, что могу сделать это с некоторым кодом через ffmpeg и некоторыми другими утилитами, но я не смог найти способ сделать его наслоенным в структуре канала.
Я нашел более простую реализацию объединения mp3 через Mp3Wrap , которую я бы предпочел использовать, но я не смог найти никакого вспомогательного кода об этом в Google, и из того, что я прочитал структуру, которую я пытался сделать, найти сложнее ..
О, кстати .. В прошлый раз вопрос, я не знаком с GPL, так что, если я использую Mp3Wrapper.exe в своем проекте, могу ли я использовать его в качестве коммерческого проекта? Могу ли я получить деньги? или собирать пожертвования?
Edit:
Я также нашел что-то под названием NAudio Я не совсем уверен, что это может сделать работу, но, по крайней мере, это кажется знакомым, так как написано на c #. Но я не могу использовать его в своем проекте Silverlight, потому что это не сборка Silverlight, и я не уверен, что он будет работать.
Кроме того, я тратил впустую свои часы на поиск в глубоком гугле и на документацию 3 вариантов, не мог найти ничего полезного, ну, я не очень понимаю эти вещи, но я готов совершить взлом, не совсем уверен если это любое использование или выполнимо, но я также в порядке с объединением mp3-файлов в качестве аудиоканалов (что я видел, что я могу выбирать аудиоканалы в ffmpeg, но не совсем уверен, как это сделать). И добавьте несколько мультимедийных элементов в мой проект и воспроизводите их одновременно, надеясь, что они будут синхронизированы, а размер mp3-файла будет низким.
Любое предложение, как я могу достичь своей цели с помощью взлома или с хорошим решением.
Еще одно обновление:
Я решил использовать потоки для объединения моих mp3-файлов, так как я могу напрямую воспроизводить их через .net, и после некоторых попыток он кажется быстрее. Я использую следующий код, но я все еще не смог найти способ объединить файлы в «канальную» или «многоуровневую» систему, и я немного не понимаю, что такое потоки, биты, буферы и все, что связано с IO. Надеюсь, что это обновление поможет вам понять.
string path = AppDomain.CurrentDomain.BaseDirectory;
using (var fs = File.OpenWrite(Path.Combine(path, "cOut.mp3")))
{
var buffer = File.ReadAllBytes(Path.Combine(path, "c1.mp3"));
fs.Write(buffer, 0, buffer.Length);
buffer = File.ReadAllBytes(Path.Combine(path, "c3.mp3"));
fs.Write(buffer, 0, buffer.Length);
fs.Flush();
}
Я также немного передумал встраивать mp3-файлы в аудиоканалы. Другой кажется чрезвычайно сложным. Я полностью открыт для предложений по манипуляциям с аудиоканалами, вы можете написать любое решение, которое можете придумать, я открыт для всего.
Заранее спасибо ..
Наконец-то я смог управлять звуковыми потоками wmv, но размер был огромен! так что я сменил фокус на исходную точку слияния mp3, и я смог добиться того, чего хочу, через ffmpeg! Этот простой код объединяет несколько файлов mp3! Но сейчас у меня проблема со скоростью звука. Я предполагаю, что ffmpeg получает продолжительность, рассчитанную как оба mp3-файла (a1.mp3 + a2.mp3), а затем растягивает аудио до нужного размера. Таким образом, мой звук воспроизводится с половинной скоростью ... Я пробовал;
- -shortest (Завершить кодирование, когда заканчивается самый короткий входной поток)
- -async 1 (Синхронизировать звук с метками времени, используемыми с -copyts)
- -копий (получить метки времени из входного потока)
- -скорость 2 (манипулировать скоростью)
, но не смог найти выход. Когда он обрабатывает аудио, он исполняет его до нужной длительности, но в результате из-за потока -newaudio выдает синхронизированный звук двойной длительности.Я могу слушать музыку так, как хочу, когда я ускоряю ее в 2 раза в медиаплеере.
вот код;
ffmpeg -i a1.mp3 -i a2.mp3 -map 0:0 -map 1:0 -acodec wmav2 -ar 44100 -ab 128k -y aout.wav -acodec wmav2 -ar 44100 -ab 128k -newaudio
Кстати: два входных потока одинаковы для процесса отладки, поэтому нет проблем с вводом.
Спасибо.
P.S .: Я не хочу использовать SOX, если могу, но если нет другого выбора, пожалуйста, направьте меня к полностью работающему двоичному файлу.