Заполнение и воспроизведение аудио буфера в C # (.NET 4.0) - PullRequest
2 голосов
/ 25 апреля 2011

Где я могу найти что-то подходящее (библиотека) для .NET 4.0 (C #), способное на следующие функции: + Чтение сэмплов mp3 / wav с прямым доступом к сэмплебуферу загруженных сэмплов? (например, я хочу загрузить образец mp3 и программно добавить реверберацию, хорус и другие реализованные мной пользовательские эффекты) + Воспроизведение напрямую аудио буферов (массивов с плавающей точкой) + Сохранение аудио буферов на диск в формате mp3 или wav

Некоторое время назад я нашел ASIO для .NET, и это работает только с .NET 3.5, есть что-то для .NET 4.0? Большое спасибо за вашу помощь.

1 Ответ

3 голосов
/ 25 апреля 2011

ASIO для .NET не поможет вам взломать mp3 или wav файлы.Самый современный API в Windows для этого - Microsoft Media Foundation .Это все COM API, так что вы либо собираетесь (возможно, болезненно) взаимодействовать с COM из .NET, либо (проще) написать оболочку C ++ / CLI.Если вы пользуетесь оболочкой C ++ / CLI, вам необходимо знать о проблемах производительности (особенно о том, насколько критически важна задержка для звукового программирования).

Я скептически отношусь к тому, что вы получите необходимую задержку звука при программировании на .NET.Хороший аудиодрайвер (например, ASIO) снизит задержку до <3 мс.Поэтому, если вы нацелены на «живое аудио», вам нужно будет генерировать звуковые буферы быстрее, чем это (если вы не справляетесь с более длительными задержками).Иными словами, «временные интервалы», с которыми работают API-интерфейсы Windows, имеют интервалы в 100 наносекунд:). </p>

Скорее всего, вам не нужно взламывать файлы самостоятельно.Это становится утомительным, так как это не только mp3 и wav.Вы также должны знать, как форматируется WAV (чтобы учесть разные скорости передачи данных, количество каналов и т. Д.).Используя Media Foundation, он автоматически загрузит декодер записи для вас, вы просто дадите ему путь к файлу. Ознакомьтесь с этим руководством , в котором показано открытие существующего файла WAV и запись нового файла WAV.Я только недавно пошел по этому пути для драм-секвенсора, который я создаю, и это совсем не больно (если вы знакомы с программированием COM).

Центральный компонент в MF, который делает это возможным - это MFSourceReader .

Если вы хотите воспроизвести аудио после его изменения, вы можете посмотреть пример «RenderExclusiveEventDriven» в Windows SDK (я полагаю, в разделе «audio»).Это то, что я сделал и для барабанного секвенсора.Задержка не будет проблемой, и вы просто имеете дело с байтовыми массивами, поэтому манипулирование необработанными данными становится очень простым.Хотя в этот момент вы, вероятно, можете придерживаться маршрута ASIO .NET и просто использовать его для воспроизведения необработанных данных, которые вы получаете из MFSourceReader.

Я не думаю, что в Media Foundation еще есть .NET-оболочки (хотя, если кто-то уже проделал эту работу, не стесняйтесь размещать здесь, как было бы здорово узнать).

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