我有一个不同单词/短语的库,为了在目前建立句子,我将这些短语的组合添加到播放列表中以制作句子。不幸的是,如果用户正在运行CPU密集型应用程序(我的大多数用户都是),那么句子中间可能会有几秒钟的延迟(在短语之间)。
为了解决这个问题,我想到了一种方法,它会将正确的MP3文件组合合并到一个合适的短语中,将其保存在%temp%目录中,然后播放这个应该克服的1个MP3文件我遇到的问题是差距。
在C#中执行此操作的最简单方法是什么?是否有捷径可寻?文件相当小,每个文件长3-4秒,句子可以包含3-20个短语。
答案 0 :(得分:6)
以下是使用NAudio连接MP3文件的方法:
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);
}
}
}
请参阅here了解详情
答案 1 :(得分:0)
由于MP3是压缩音频源,我想你不能将它们连接成一个文件而不先将每个文件解码为它将播放的波形。这可能非常密集。也许你可以在播放短语时使用关键部分作弊,这样在短语完成之前CPU不会被盗。这不一定与其他线程一起使用,但如果您的短语很短,则可能会有效。
答案 2 :(得分:0)
MP3文件由“框架”组成,每个框架代表一段简短的片段(我认为大约25毫秒)。
所以是的,你可以只是连接它们而没有问题。
答案 3 :(得分:-1)
简单的选项是shell命令行:
copy /b *.mp3 c:\new.mp3
最好是连接流。这已在这里得到解答: What would be the fastest way to concatenate three files in C#?