Существует несколько существующих ресурсов, которые Вы могли бы проверить:
Если это имеет значение, мои собственные персональные инструкции, которые я склонен использовать, следующие:
Несколько других точек:
Библиотека Audiere делает это чрезвычайно простым. Вот почти полная программа на C # для генерации DTMF-тона для кнопки «1»:
AudioDevice device = new AudioDevice();
OutputStream tone1a = device.CreateTone(697); // part A of DTMF for "1" button
OutputStream tone1b = device.CreateTone(1209); // part B
tone1a.Volume = 0.25f;
tone1b.Volume = 0.25f;
tone1a.Play();
tone1b.Play();
Thread.Sleep(2000);
// when tone1a stops, you can easily tell that the tone was indeed DTMF
tone1a.Stop();
Чтобы использовать Audiere в C #, самый простой способ начать работу - использовать привязку C # Харальда Филкера (которая он утверждает, что работает с Mono и VS; я могу подтвердить, что он работает как в полной версии VS2005, так и с использованием отдельных версий Express 2008 для C # и VC ++). Вам нужно будет загрузить Win32 Audiere DLL, библиотеку и заголовок (все они находятся в одном zip-архиве), и вам нужно будет создать привязку C # из исходного кода, используя как VC ++, так и C #.
Одним из приятных преимуществ использования Audiere является то, что вызовы не блокируются. Ты не Перед запуском tone1b
необходимо дождаться, пока tone1a
прекратит воспроизведение, что явно необходимо для воспроизведения сложных тембров. Я не знаю каких-либо жестких верхних ограничений на количество одновременных выходных потоков, которые вы можете использовать, поэтому, вероятно, это то, что поддерживает ваше оборудование / ОС. Кстати, Audiere также может воспроизводить определенные аудиофайлы (MP3, WAV, AIFF, MOD, S3M, XM, IT отдельно; Ogg Vorbis, Flac, Speex с внешними библиотеками), а не только чисто сгенерированные тоны.
Один из возможных вариантов. Обратной стороной является то, что при запуске или остановке отдельного тона слышен слегка слышимый «щелчок»; это не заметно, если вы добавите один тон к уже играющему тону. Самый простой обходной путь, который я нашел для этого, - это медленно увеличивать или уменьшать громкость тона, когда вы включаете или выключаете тон, соответственно. Возможно, вам придется поиграть со скоростью нарастания, чтобы добиться «правильного» звучания.
Обратите внимание, что Audiere имеет лицензию LGPL, и привязка не имеет привязанной лицензии. Вам придется проконсультироваться со своим юридическим отделом или попытаться связаться с Харальдом, если вы хотите использовать его привязку в коммерческом продукте; или вы можете просто сделать свою собственную привязку и избежать хлопот.
Используя Visual C ++ Express 2008, откройте привязки / csharp / libaudieresharpglue / vc8.0 / libaudieresharpglue.sln.
VC ++ автоматически преобразует решение в решение VS9.
В другой папке у вас должен быть пакет Audiere от Sourceforge. В свойствах проекта VC ++ перейдите в Свойства конфигурации> C / C ++> Общие и убедитесь, что у вас есть путь / to / audiere-1.9.4-win32 / include
в «Дополнительные подключаемые каталоги». Затем в том же окне перейдите в Linker> General и убедитесь, что у вас есть /path/to/audiere-1.9.4-win32/lib
в «дополнительных каталогах библиотеки». Затем вы сможете собрать проект (желательно в режиме Release) и этот вывод libaudieresharpglue.dll
в папке vc8.0 / Release
.
Затем откройте Visual C # Express 2008. Откройте привязки \ csharp \ test \ vc8.0 \ AudiereCSharpTest.sln
и позвольте ему преобразовать решение. Проект должен быть собран нормально, но при его запуске вы получите сообщение об ошибке. Все в порядке; в папку csharp / test / vc8.0 / bin / Release
вам необходимо добавить libaudieresharpglue.dll из решения VC ++ и audiere.dll из пакета из Sourceforge.
Теперь вам следует иметь возможность создавать и запускать AudiereCSharpTest. Обратите внимание, что по умолчанию #define stream_test
не закомментирован в верхней части AudiereTest.cs, и он будет ссылаться на файл, которого нет на вашем жестком диске. Вы можете просто закомментировать #define
и раскомментировать noise_test
или square_test
.
Это должно покрыть его; если я пропустил какие-то детали,
Да, это возможно.
Вот ссылка на руководство по этому вопросу. но, конечно, здесь также используется Console.Beep
В документации MSDN не указано, является ли Console.Beep асинхронным или нет. Если это так, вы, вероятно, можете быстро выполнить столько вызовов, сколько вам нужно, и никто не будет мудрее. Конечно, вы захотите использовать версию, которая требует частоты и продолжительности.
Я смотрел NAudio с целью создания программы, имитирующей обратную связь при воспроизведении минусовки. В блоге есть сообщение о генерации синусоидальных волн на определенных частотах ,
По сути, вам нужно реализовать собственный программный синтезатор или найти стороннюю библиотеку. См .: http://en.wikipedia.org/wiki/Demo_ (computer_programming) #Music