| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Работа со звуком в Visual C++ |
| Автор: ud_sasha 24.7.2004, 20:06 |
| Когда-то в Borland C++5 была (да и сейчас есть) функция sound(), которая выводила звук определенной частоты на встроенный динамик. Хотелось бы узнать как такое реализовать на Visual C++ 6.0, только звук выводить на звуковую карту. Итак, требуется, к примеру, заставить издавать звуковую карту звук частотой 900 Гц 1 секунду. Спасибо. |
| Автор: mr.DUDA 25.7.2004, 11:27 | ||
| Есть такая функция, Beep называется. Но, к сожалению, в Win98/Me она не поддерживает аргументы dwFreq и dwDuration (вместо этого система издаёт "стандартный" звук). Но можно сделать то же самое, используя PlaySound с параметрами SND_ASYNC | SND_LOOP | SND_MEMORY. Для остановки звука можно вызвать PlaySound с NULL в аргументе pszSound. Чтобы сформировать звук требуемой частоты прямо в памяти, достаточно выполнить ряд не слишком сложных действий, а именно: - сформировать WAV-header - заполнить дорожку сэмплами по периоду синусоиды - длину дорожки подбирать в зависимости от требуемой частоты Так как звук будет повторяться (SND_LOOP), то одного периода синусоиды будет достаточно. Вот пример, в котором реализована уже готовая функция SuperBeep, возвращающая управление после того, как звук отзвучит заданное количество миллисекунд (dwMilliSeconds). Кстати, можно и не ожидать завершения звучания -- для этого нужно запустить SuperBeep в отдельном потоке. Исходный текст ф-ции SuperBeep с примером использования:
|
| Автор: ud_sasha 25.7.2004, 14:38 | ||||
| Спасибо, то что надо!!! только
следует читать как:
иначе за пределы буфера начинаем писать. |
| Автор: Rutti 26.7.2004, 01:57 |
| А как проще средствами VC++ воспроизвести MP3-файл? |
| Автор: gepard 26.7.2004, 04:49 | ||
| Это надо тебе DirectX или OpenAL разбирать А вообще, вот как просто можно воспроизвести звук *.wav: Взято с одного из форумов:
Плюс вот это: USES mmsystem; sndPlaySound('C:\TEST.WAV',SND_ASYNC); // PLAY sndPlaySound('C:\TETS.WAV',SND_ASYNC+SND_LOOP); // Loop Mode (зацикливание) sndPlaySound(Nil,SND_ASYNC); //STOP Думаю разберёшься. |
| Автор: chipset 26.7.2004, 04:52 |
| Человеку видимо необходим формат *.MP3.. Наверное надо копать в сторону DirectMusic. |
| Автор: Rutti 26.7.2004, 23:26 | ||
chipset
Так капни же! |
| Автор: gepard 27.7.2004, 05:52 |
| Ты знаешь, какя лопата нужна? Столько времени нужно. Лучше учите OpenAL. хотя лопата и время от этого не уменьшились |
| Автор: chipset 27.7.2004, 07:29 |
| Это вечный вопрос.. Хотя ДиректИкс имхо перспективнее.. |
| Автор: gepard 27.7.2004, 09:19 |
| Его же вроде микрософт вообще не будет больше делать |
| Автор: maxim1000 27.7.2004, 17:24 | ||
ShellExecute... (описание можно найти в MSDN) |
| Автор: chipset 28.7.2004, 00:02 |
| [quote]Его же вроде микрософт вообще не будет больше делать [quote] ДА? Я слышал что наоборот Ogl загибается Ох, флеймим товарищи... |
| Автор: DeadProger 8.1.2005, 21:50 |
| Где можно найти понятное объяснение основ DirectMusic? |
| Автор: chipset 8.1.2005, 21:54 |
| DeadProger MSDN. Модератор: Пожалуйста, один топик - один вопрос. |
| Автор: qqqq1961 10.1.2015, 18:51 | ||||||||||
Кроме предложенного ud_sasha:
Предлагаю исправить еще один выход за пределы буфера:
И нужно деструктор в конце, особенно если нужно повторно функцию вызывать:
|