| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Звук под Windows |
| Автор: krasgames 27.3.2011, 08:53 |
| Люди, есть ноутбук, не знаю, есть ли на нем спикер (Samsung R60). Нужно хоть как-то выжать из ноутбука гармонический сигнал) Ну хотя-бы через спикер, но есть ли он у меня... Про beep помню, но не получалось с ним, может что не то набирал, а на ноутбуке у меня ни один код не работал!!=( Дайте что-нибудь плз, чтобы точно работало. |
| Автор: semibug 27.3.2011, 09:06 |
| Чтобы точно работало можно подключить USB спикер, который встанет звуковой картой. Воспроизвести звук на нем способом масса. Например с помощью плеера. |
| Автор: krasgames 27.3.2011, 09:24 | ||
Ну, например, cpp файл такой:
остальное, как обычно сразу после создания нового проекта. Может я что-то не включил? Хотятут явно что-то надо для winapi. Добавлено @ 09:26 Через звуковую карту или USB это можно, только если USB интерфейс замутить самому, я хз, что такое USB спикер, но тогда опять нужен код |
| Автор: Albor 27.3.2011, 10:01 | ||
Попробуй так. Если динамик есть то д.б. звук 1000Гц в течении 2 сек |
| Автор: krasgames 27.3.2011, 10:12 |
| Попробовал, спасибо. Динамика нет=( А как со звуковой картой можно вообще работать? |
| Автор: borisbn 27.3.2011, 10:41 | ||
? |
| Автор: krasgames 27.3.2011, 11:21 |
| Не, хочу именно сгенерировать сигнал, хоть с сопроцессора, хоть со звуковой карты. Сначала на высоком уровне. |
| Автор: borisbn 27.3.2011, 12:52 |
| krasgames, не получается сгенерить сигнал или воспроизвести его ? Если второе см. http://msdn.microsoft.com/en-us/library/ms713464(v=vs.85).aspx |
| Автор: semibug 27.3.2011, 13:13 | ||
| Генерировать можно с помощью функции sin (один период, остальные копией). Или даже табличкой, например такой
Добавлено через 8 минут и 39 секунд Во, такой может спикер подойдет: ![]() |
| Автор: borisbn 27.3.2011, 13:30 | ||
а дальше http://msdn.microsoft.com/en-us/library/ms713464(v=vs.85).aspx |
| Автор: semibug 27.3.2011, 13:32 |
| Если принципиально именно звуковой картой нагенерить, можно попробовать MIDI. Правда не уверен, возможно в наше время чаще делают софтовые реализации MIDI (внутри драйвера), т.е. чисто "аппаратной" генерации на упомянутом ноуте может и не выйти. Добавлено через 1 минуту и 52 секунды Чето даже призадумался, а точно ли синус, может все таки косинус.. Эх геометрия.. |
| Автор: bsa 27.3.2011, 21:17 |
| а может проще попробовать посмотреть в диспетчере устройств? |
| Автор: krasgames 11.4.2011, 04:08 | ||
borisbn, я пока только описание нашел там, а надо какие-то библиотеки скачать? Если просто вставить в .cpp код, расположенный ниже, то уже выдает ошибку:(
|
| Автор: krasgames 11.4.2011, 08:38 |
| Компилятор Visio C++ 2008, про ошибку пишет что-то вроде undefined symbols или missing ; точно не помню, сейчас у меня ноут не с собой:( Если все так сложно, по приходу домой напишу |
| Автор: borisbn 11.4.2011, 08:43 | ||||
в начале пропустил знак # замени на
замени на
|
| Автор: leniviy 12.4.2011, 15:25 |
| Что-то у вас ни про MMSystem, ни про DirectX. Я тут кое-что раскопал |
| Автор: krasgames 14.4.2011, 17:58 | ||
Ну теперь ошибок нет. Звук не выдает. |
| Автор: borisbn 14.4.2011, 20:24 |
| krasgames, это всего лишь генерация данных, которые, если озвучить (подать на звуковую), даст тон. Теперь нужно этот буфер (buffer) озвучить. как ? http://msdn.microsoft.com/en-us/library/ms713464(v=vs.85).aspx. и не раз... |
| Автор: krasgames 16.4.2011, 04:22 |
| Не понимаю пока. В buffer записывается массив? И как его проиграть с помощью playsound? Там же надо уже файл открыть. |
| Автор: borisbn 16.4.2011, 09:05 |
| PlaySound проигрывает файл, а я давал ссылку на функции проигрывания буфера. Вот предпоследняя ссылка оттуда msdn.microsoft.com/en-us/library/ms708482(v=vs.85).aspx |
| Автор: krasgames 17.4.2011, 05:08 |
| Если этот код просто добавить после буфера, то выдает ошибки. Я пока не понимаю, что там делается |
| Автор: borisbn 17.4.2011, 10:11 | ||||||||||||
какие именно - религия не позволяет озвучить ? там валом комментариев
|
| Автор: krasgames 17.4.2011, 11:33 | ||
Пишет, что переменные не определены. cpp такой:
Может что-то не включил? |
| Автор: borisbn 17.4.2011, 11:53 |
предлагаешь взять твой код, создать проект, добавить в него твой код, и посмотреть, на что именно ругается компилятор... на какой строке... какие именно переменные "не определены" ? за пивом сходить ? первое, что видно, так это то, что ты определил функцию WriteWaveData внутри функции main. Этого нельзя делать в Си++. Ты знаешь, мне кажется с твоими знаниями Си++ тебе ещё рановато использовать winAPI. Не обижайся, я не пнуть тебя или посмеяться хочу, а помочь. Посмотри лучше другие языки (C#, Delphi, Python). Если же хочешь именно Си++, то начни с учебника, с учебных задач, а не с такой (не сказать, что сложной, но и вовсе не простой для новичка) задачи. |
| Автор: krasgames 17.4.2011, 13:56 | ||
| Заново. Мои действия: 1. буффер создал и включил его в функцию main, в итоге ошибок не выдало, это делал сугубо по инструкциям в посте:
2. Вставил код с ссылки после функции main "для воспроизведения буфера". Ничего не менял, это код с сайта! Сейчас по прежнему выдает ошибку, но пишет: "hwndApp undeclared", начиная с 36 строчки и кончая 121. И еще невозможно преобразовать кое-что на строке 57. Просто я не сталкивался с такого рода задачами:( Вообще мы по специальности С++ изучали, но с уклоном в нужную сторону. Можно бы и в книге поискать, но у меня специальность вообще не в эту сторону, нельзя время терять, в своей области читать много:( Вот и спрашиваю у профессионалов, лень подсказать что ли? |
| Автор: leniviy 17.4.2011, 15:35 |
| hwndApp - глобальная переменная типа HWND. В ней содержится описатель главного окна программы. В примере опущена. Если создашь в студии с помощью мастера новый проект типа win32 application, то скорее всего в главном cpp файле будет объявлена эта переменная (возможно она будет называться не hwndApp, но тип у неё будет HWND ) |
| Автор: krasgames 17.4.2011, 16:23 |
| Так это будет не консольное приложение? |
| Автор: bsa 17.4.2011, 23:05 | ||
C++ он и в африке С++. Уклонов у него нет. На сколько я помню, основная твоя задача, проверить, имеется ли звуковуха или спикер в ноутбуке. Не думаю, что писать программу на С++ для этого является самым оптимальным путем. Проще проверить физическое наличие выходов и в диспетчере устройств наличие соответствующего девайса. Если там нет звуковухи, то пытаться воспроизвести звук глупо. Для начала, можно вообще попробовать кликнуть на wav файл. Если винда ругнется, что нет устройства для воспроизведения, то можно откладывать ноут в сторону. Если начнет играть, но звука не будет, то следует попробовать подергать регуляторы громкости. Если не поможет, то с большой долей вероятности звуковуха (частично) сгорела, и ноут опять можно откладывать. |
| Автор: krasgames 20.4.2011, 11:25 | ||||||
Нет. Моя цель - сгенерировать чистую синусоиду на выходе. Делаю частотомер, хочу замутить компьютерный генератор сигналов. Поэтому решение задачи невозможно данным путем. Про спикер хотел для личного развития. В дальнейшем виднеются цели, связанные с созданием произвольных сигналов, поэтому хочу все-таки придерживаться языка программирования. Добавлено @ 11:37
|
| Автор: krasgames 20.4.2011, 11:43 | ||
ООО. Рабочий код
Вроде одна строчка говорит, что это синусоида, но так ли это? А частоты не совпадают. Наверное, в функции дело. 440 и 880 - звучат не через октаву. http://www.gitaristam.ru/school/frequency.htm |
| Автор: krasgames 22.4.2011, 13:24 |
| Что делать то? Жду приказа, господин! |