Можно ли генерировать сложные тоны в C #?

Существует несколько существующих ресурсов, которые Вы могли бы проверить:

  1. Правильно Упаковывают Ваши Классы Java
  2. архитектура Spring 2.5
  3. Учебное руководство по Java - Именование Пакета
  4. Соглашения о присвоении имен SUN

Если это имеет значение, мои собственные персональные инструкции, которые я склонен использовать, следующие:

  1. Запускаются с обратного домена, например, "com.mycompany".
  2. название продукта Использования, например, "myproduct". В некоторых случаях я склонен иметь общие пакеты, которые не принадлежат конкретному продукту. Они закончились бы категоризированные согласно функциональности этих общих классов, например, "io", "util", "ui", и т.д.
  3. После этого это становится большей свободной формой. Обычно я группируюсь согласно проекту, области функциональности, развертывания, и т.д. Например, у меня мог бы быть "project1", "project2", "ui", "клиент", и т.д.

Несколько других точек:

  1. Это довольно распространено в проектах, я продолжил работать для имен пакета, чтобы вытекать из проектной документации. Обычно продукты уже разделены на области функциональности или цели.
  2. не подчеркивают слишком много о продвижении общей функциональности в более высокие пакеты сразу же. Ожидайте там, чтобы быть потребностью через проекты, продукты, и т.д., и затем осуществить рефакторинг.
  3. зависимости межпакета Часов. Они не все плохи, но это может показать плотное соединение между тем, что могло бы быть отдельными единицами. Существуют инструменты, которые могут помочь Вам отслеживать это.

8
задан Tom Wright 29 October 2009 в 01:37
поделиться

6 ответов

Библиотека 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, и привязка не имеет привязанной лицензии. Вам придется проконсультироваться со своим юридическим отделом или попытаться связаться с Харальдом, если вы хотите использовать его привязку в коммерческом продукте; или вы можете просто сделать свою собственную привязку и избежать хлопот.


@Tom: Поскольку к библиотеке Харальда не прилагается особая лицензия, я не уверен, какие последствия могут возникнуть при ее размещении; однако я считаю, что могу хотя бы подробно рассказать вам, как именно устроен мой проект libaudieresharpglue. вам придется проконсультироваться с вашим юридическим отделом или попытаться связаться с Харальдом, если вы хотите использовать его привязку в коммерческом продукте; или вы можете просто сделать свою собственную привязку и избежать хлопот.


@Tom: Поскольку к библиотеке Харальда не прилагается особая лицензия, я не уверен, какие последствия могут возникнуть при ее размещении; однако я считаю, что могу хотя бы подробно рассказать вам, как именно устроен мой проект libaudieresharpglue. вам придется проконсультироваться с вашим юридическим отделом или попытаться связаться с Харальдом, если вы хотите использовать его привязку в коммерческом продукте; или вы можете просто сделать свою собственную привязку и избежать хлопот.


@Tom: Так как к библиотеке Харальда не прилагается особая лицензия, я не уверен, какие последствия может иметь ее размещение; однако я считаю, что могу хотя бы подробно рассказать вам, как именно устроен мой проект libaudieresharpglue.

Используя 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 .

Это должно покрыть его; если я пропустил какие-то детали,

19
ответ дан 3 November 2019 в 14:37
поделиться

Вы всегда можете попробовать DirectSound ...

4
ответ дан 3 November 2019 в 14:37
поделиться

Да, это возможно.

Вот ссылка на руководство по этому вопросу. но, конечно, здесь также используется Console.Beep

0
ответ дан 3 November 2019 в 14:37
поделиться

В документации MSDN не указано, является ли Console.Beep асинхронным или нет. Если это так, вы, вероятно, можете быстро выполнить столько вызовов, сколько вам нужно, и никто не будет мудрее. Конечно, вы захотите использовать версию, которая требует частоты и продолжительности.

0
ответ дан 3 November 2019 в 14:37
поделиться

Я смотрел NAudio с целью создания программы, имитирующей обратную связь при воспроизведении минусовки. В блоге есть сообщение о генерации синусоидальных волн на определенных частотах ,

3
ответ дан 3 November 2019 в 14:37
поделиться

По сути, вам нужно реализовать собственный программный синтезатор или найти стороннюю библиотеку. См .: http://en.wikipedia.org/wiki/Demo_ (computer_programming) #Music

0
ответ дан 3 November 2019 в 14:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: