2013-05-27 2 views
1

Я хочу начать программирование синтезатора. Я считал, что мне нужно будет использовать звуковую карту, поэтому я начал заниматься Google. Через некоторое время было обнаружено множество опций:
  - API WaveOut - я слышал, что этот устарел, поэтому я отказался от этого.
  - WASAPI - Считается немного слишком низким для того, что я хотел.
  - DirectSound, XAudio, XAudio2 - Кажется разумным, но я хочу иметь как можно меньше латентности.
  - Asio - Казалось, что я хочу!
Лучший способ начать аудиопрограммирование?

Я нашел пару учебников и исходный код, чтобы начать работу с аудиопрограммами. К сожалению, only one I got to work использует API waveOpen, который я не хочу использовать.

Затем я нашел this tutorial, который казался идеальным для моих нужд. Этот учебник, как ни странно, единственный полезный (ну, не тот, который можно использовать, так как я не могу заставить его работать) ресурс, который я могу найти при использовании ASIO. Дело в том, что я не могу заставить его работать. Когда я бегу демо я получаю «Application остановил working' ошибок, а затем выход консоли:

Необработанное исключение: System.BadImageFormatException: Не удалось загрузить файл или сборку» BlueWave.Interop.Asio, версия = 1.0.0.0, Culture = neutral, PublicKeyToken = null или одна из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом. Имя файла: 'BlueWave.Interop.Asio, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' в BlueWave.Interop.Asio.Test.TestConsole.Main (String [] args)

WRN: Связывание сборки ведение журнала отключено. Чтобы включить ведение журнала сбоев сборки, установите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) на 1. Примечание. Существует некоторое ограничение производительности, связанное с протоколированием сбоев привязки сборки. Чтобы отключить эту функцию, удалите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Когда я пытаюсь скомпилировать, я получил целую кучу Рози ошибки: the errors I get, duh

Это после того, как я вручную помещен msvcr90.dll и msvcd90.dll в C: \ Windows \ System32 (Я не мог заставить их установить другой способ). Ой да, и, конечно же, я все-таки установил ASIO4ALL.

Итак, это не вопрос, но я просто прошу совета. Я думаю, что это не должно быть ТЫ ЧТО ТЫ ХОЧУ РАБОТАТЬ АЗИО, но в то же время ссылка на другой ресурс для изучения API ASIO была бы отличной, как и любые другие советы. (Может быть, проще просто пойти и попытаться заставить Xaudio2 работать? Я не знаю ...)

Спасибо заранее, и извините, если вы думаете, что мой вопрос длинный или скучный!

EDIT: Спасибо за реакцию. Я столкнулся с ASIOHost API by TropicalProgrammer. Не знаю, хорошо ли это, но выглядит многообещающим. Я изучаю это в настоящее время. Могут быть лучшие варианты, но я должен признать, что в свое время я решил настроить ASIO.

+0

Возможно, мне стоит отправить Steinberg письмо и спросить, есть ли у них какие-либо ресурсы для API. Я не мог найти их в своей базе знаний или на своих форумах. – Ruben

+0

Ой, я уже видел это, но я снова забыл, глупый. Steinberg имеет руководство по API, которое входит в загрузку SDK, но также доступно [онлайн] (http://www.scribd.com/doc/14562218/9-ASIO-SDK-21). Я на самом деле не использовал его, поскольку он касается только API (и это не моя проблема). – Ruben

ответ

2

Предлагаю взглянуть на Juce, который представляет собой двухконтурную аудиорамку для записи как аудиопланов, так и хост-приложений. Используя это, было создано несколько коммерческих приложений.

Поскольку ваша цель - построить синтезатор, путь наименьшего сопротивления состоит в том, чтобы построить его как плагин VST. JUCE предоставляет хост-приложение, которое занимается управлением аудио-интерфейсами ОС, хорошей документацией и многочисленными примерами. Все, что вам нужно сделать, это реализовать рендер-обратный вызов для вашего синтезатора.

Что касается ASIO, то с ним связано большое количество про-аудио-приложений, в основном из-за традиционных недостатков обычных аудио API в последовательных версиях Windows, особенно в случае задержки или высокого количества каналов. В Windows ASIO использует специальные драйверы для аудиооборудования и обходит аудио стек операционной системы хоста. Я подозреваю, что Juce позаботится об этом для вас.

+2

'+ 1' Не стоит прилагать усилий для создания своего синтезатора как отдельного приложения. Сделайте его VST/AU/(независимо от того, что использует Linux), чтобы люди могли использовать ваш синтезатор в музыкальном программном обеспечении по своему выбору. Кроме того, вы бесплатно получите MIDI, автоматизацию, запись и эффекты. – japreiss

+0

@japreiss Похоже, что это VST полностью на Linux (по крайней мере на x86), используя версию плагинов Windows. В Linux существует множество других подключаемых API-интерфейсов, но никто не выпускает для них коммерческие плагины. – marko

+0

с использованием WINE для зависимости MSVCRT? – japreiss

0

Не очень полезный ответ, но я решил пойти с XAUDIO2. Я бы не сказал, что он прост в использовании, но, по крайней мере, доступны учебные пособия (я использую this one, но у Microsoft также есть серия).

+0

Не сработал, пошел вместо waveOut. – Ruben

+0

Первый эксперимент (наконец) разработан. Файлы источников и проектов можно найти на http://www.mediafire.com/?m5kxe6h3b3lh7d9 – Ruben

+0

Производительность очень плохой на старых компьютерах. Я даю WASAPI пойти ... – Ruben

Смежные вопросы