var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Вы можете использовать любой стандартный API кодеков MP3 для декодирования потока, работы с ним и его повторного сохранения. Например, для этой части вы можете использовать libLAME .
Что касается микширования, вы можете сделать это самостоятельно (например, наивно, добавить два семпла и разделить их на два, что может показаться не очень хорошим) , или найдите для него подходящую библиотеку.
Возможно, вас заинтересует связанный вопрос о переполнении стека в лучшей аудиобиблиотеке c Linux
Он не поддерживает MP3 по патентным причинам, но libsndfile - очень хорошая библиотека с открытым исходным кодом (LGPL) для загрузки и сохранения аудио в различных других аудио форматы, включая WAV.
Что касается части наложения, это просто, как только вы загрузили сэмплы в память ... вы просто суммируете каждый сэмпл в файле A с соответствующим сэмплом в файле B (и, возможно, масштабируете полученный немного уменьшите значение выборки путем умножения на константу, если вы беспокоитесь об отсечении).
Вы можете попробовать взглянуть на это http://terminatorx.org/ Я смотрел на него, чтобы сделать что-то подобное.
Библиотека libsox от sox (а не http: // libsox.sourceforge.net/, который представляет собой нечто совершенно иное), похоже, имеет простой API, который можно использовать. вызвать проблемы при обработке аудио. Например, если эффект смешать левый и правый каналы в один монофонический канал должен был использовать линия
*obuf++ = (*ibuf++ + *ibuf++)/2;
может искажаться, поскольку промежуточная добавка может переполняться 32 биты. Строка
*obuf++ = *ibuf++/2 + *ibuf++/2;
решит проблему переполнения. (за счет наименьшего значащий бит).