我最近关于此问题的最新讨论的更新显示在底部
好吧,所以我正在尝试构建一个平台,我的silverlight应用程序将不同的乐器音频合并到一个文件中并输出音乐音频。
我现在要做的是将多个mp3文件合并为一个mp3文件。但是那个最终的mp3文件不应该播放第一个mp3然后播放第二个和...到最后。它应该像mp3频道一样播放它们。用户将放置一个吉他频道,鼓声道等。合并将把它们全部合并为一个mp3文件作为输出。
我发现我可以通过ffmpeg和其他一些实用程序使用某些代码来实现这一点,但我找不到一种方法使其在通道结构中分层。
我发现通过Mp3Wrap合并mp3的更容易实现,我更喜欢使用,但我在谷歌上找不到任何关于它的帮助代码,从我读过的结构我一直试图做的更难找到..
哦顺便问。上次问题,我不是GPL知识的人,所以如果我在我的项目中使用Mp3Wrapper.exe,我能否将它用作商业项目?我可以赚钱吗?还是收集捐款?
编辑: 我还发现了一些名为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),然后拉伸音频以适应。因此,我的音频以半速播放...我已经尝试过了;
但找不到出路..当它处理音频时,它会执行到正确的持续时间,但由于-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
btw:两个输入流是调试过程的相同mp3,所以输入没问题。 感谢。
P.S:如果可以,我不想使用SOX,但如果没有其他选择,请指导我使用完全正常的二进制文件。