Большой Воронежский Форум
Страница 5 из 6
< 12345 6 >
» Программирование>Музыка в С++
Hopkroft 13:23 31.08.2011

Сообщение от Спартак21:
..и вопрос возникает сразу, но это по философии С++: развежно можно lib файл в код вставлять??? Заголовок - да!

Подключаешь к проекту lib. Когда происходит сборка проекта Линковщик сам выдернет нужный код из lib файла.

Инструкция:

Сообщение от :
With the help of my colleage, I have solved the the problem when compiling with the PlaySound function. Here is the solution:
1. Include the following header files in this order:
#include "windows.h"
#include "mmsystem.h"
2. follow the following steps to add winmm.lib to the linker (assuming Visual Studio 2010):
a. Right click the project name in the Solution Explorer and select "Property".
b. On the left pane of the Property window, select "Linker" and then "Input"
c. On the right pane, type winmm.lib in the "Additional Dependencies" row.
d. Click "Apply" and then "OK".
You are now ready to compile and play .wav files.

Инструкция была взята из ссылки которую я тебе раньше выкладывал(которая на MSND).

Если не разберёшься я тебе скину проект с уже прикрученным lib ом. Но лучше разберись с этим вариантом. Т.к. такие фишки будут тебе в дальнейшем полезны.
Hopkroft 13:28 31.08.2011

Сообщение от Спартак21:
Не, книжку саму просматривал, но видимо не так усердно, как вы того желали!)
Парни, дальше хуже будет
Но всё равно огромное вам всем спасибо

Так у тебя разрядность винды какая 64 или 32?
aerin 13:35 31.08.2011
Если собирать MS VC, то можно просто прямо в коде написать
#pragma comment( lib, "winmm.lib" )
Спартак21 13:47 31.08.2011
32 бит. Все хорошо, но в билере борланд делаю.
Spectator 13:55 31.08.2011

Сообщение от Спартак21:
Не срабатывает вот что:
PlaySound( "адрес файла", NULL, SND_FILENAME);
...Ну, а книжку уже приходится штудировать, ибо дальше - хуже!
Спектатор, Хопкрофт, почему меня в друзья не добавляете???
Вы мне реально очень сильно помогаете, и я в долгу пред Вами не останусь!
Даю слово!!!

Как не срабатывает? Что возвращает функция?
В друзья я никого не добавляю, просто потому что не понимаю - нахрен это нужно.
И что подразумевается под "адресом файла"? Ты часом не пытаешься по интернетовской ссылке файл проиграть?
Spectator 14:02 31.08.2011
И еще раз прошу - приведи полностью именно ту строку что у тебя в программе, может ты со слешами перемудрил, может еще что. Или ты там какой секретный файл проигрывать пытаешься?))))
Спартак21 16:58 31.08.2011
адрес файла:
D:\hhh.wav
Hopkroft 17:06 31.08.2011

Сообщение от Спартак21:
адрес файла:
D:\hhh.wav

Вообщем, в архиве проект под MS VC. Откомпилированный файл называется, StandardPlay.exe. Также там будет файлик wav.

Запускать из командной строки ( кнопки сам прикрутишь, не маленький
):
StandardPlay.exe windows.wav

Сам проект включает WinMM.lib. версия должна подойти. У меня на MS VS 2008, собрался без проблем.

P.S. где будет выбор устройства поставь то что используется у тебя в системе. А то может не проиграть.
Изображения
Spectator 17:14 31.08.2011

Сообщение от Спартак21:
адрес файла:
D:\hhh.wav

Так писал? Обрати вниманиие на количество слешей.
PlaySound( "D:\\hhh.wav", NULL, SND_FILENAME);
Спартак21 20:09 31.08.2011

Сообщение от Spectator:
Как не срабатывает? Что возвращает функция?
В друзья я никого не добавляю, просто потому что не понимаю - нахрен это нужно.
И что подразумевается под "адресом файла"? Ты часом не пытаешься по интернетовской ссылке файл проиграть?

Ты меня за дебила в жёсткой форме принимаешь
Hopkroft 20:25 31.08.2011
Спартак21, как успехи лучше напиши? проигрался файл?
Спартак21 20:30 31.08.2011
Пока нет!
Пока ещё завал АЧХ на нижних частотах!!

Фильтр Баттэрворта - жесткая штука

...пардон за ВИРЭшный слэнг, но если представить, что весь мир = большая задница, то я нахожусь, что ещё чуть-чуть и будет прямая кишка))))))))))))))
Spectator 20:51 31.08.2011

Сообщение от Спартак21:
Ты меня за дебила в жёсткой форме принимаешь

нет) но и не называй путь ссылкой.
и все же - что возвращает функция? Я же неспроста спрашиваю.
и еще - сразу попробуй указать флаги либо SND_SYNC либо SND_ASYNC (по очереди, понятно, они несовместимы, я помню с ними были грабли)
я бы попробовал, но на работе звуковухи нет, а здесь, дома - позавчерашняя практически винда, еще не успел весь хлам поставить.
Спартак21 22:19 31.08.2011

Сообщение от Spectator:
нет) но и не называй путь ссылкой.
и все же - что возвращает функция? Я же неспроста спрашиваю.
и еще - сразу попробуй указать флаги либо SND_SYNC либо SND_ASYNC (по очереди, понятно, они несовместимы, я помню с ними были грабли)
я бы попробовал, но на работе звуковухи нет, а здесь, дома - позавчерашняя практически винда, еще не успел весь хлам поставить.

голую функцию вставлял: PlaySound( и т.д.)
Как мне путь тогда задавать??? Так же, как и в MSDN, т.е. TEXT(D:\\...)???
Spectator 22:49 31.08.2011

Сообщение от Спартак21:
голую функцию вставлял: PlaySound( и т.д.)
Как мне путь тогда задавать??? Так же, как и в MSDN, т.е. TEXT(D:\\...)???

если напишешь PlaySoundA, то можно и без макроса TEXT (иначе зависит от настроек - какие функции по умолчанию используются, widechar или нет, я предпочитаю всегда писать явно), двойной слеш обязателен в любом случае.
Спартак21 14:27 01.09.2011
спешу опечалить, но музыка не запускается(
aerin 14:36 01.09.2011
Спартак21, ну, исправь чего-нибудь в программе, чтоб запускалась.

ЗЫ. Какого ответа ты ждешь? Телепаты из отпуска не выходили.
Spectator 14:52 01.09.2011

Сообщение от Спартак21:
спешу опечалить, но музыка не запускается(

Скопируй файл C:\WINDOWS\Media\ding.wav в папку с exe файлом
напиши PlaySound("ding.wav", NULL, SND_FILENAME | SND_ASYNC);
Откомпилируй программу. Запусти exe файл из проводника, а не из под среды, посмотри что получилось.
Спартак21 15:10 01.09.2011
...Он брал бритву и ею правил себя(Наутилус)
Спартак21 15:17 01.09.2011

Сообщение от Spectator:
Скопируй файл C:\WINDOWS\Media\ding.wav в папку с exe файлом
напиши PlaySound("ding.wav", NULL, SND_FILENAME | SND_ASYNC);
Откомпилируй программу. Запусти exe файл из проводника, а не из под среды, посмотри что получилось.

Потянула машинка! Супер! Браво!!!
...только у меня вопрос, Spectator: почему этот грёбаный компилятор не захотел файл по адресу проигрывать???
Spectator 18:02 01.09.2011

Сообщение от Спартак21:
Потянула машинка! Супер! Браво!!!
...только у меня вопрос, Spectator: почему этот грёбаный компилятор не захотел файл по адресу проигрывать???

Потому что я в самом начале просил - дай мне конкретную строку из твоих исходников. Я же не знаю что ты пишешь.
Спартак21 18:29 01.09.2011
Вопрос в силе: почему при написании адреса типа D:\\ttt\exc.wav файл не проигрывался, а адрес файла u.wav и рядом с программой проигрывается???
Spectator 18:40 01.09.2011

Сообщение от Спартак21:
Вопрос в силе: почему при написании адреса типа D:\\ttt\exc.wav файл не проигрывался, а адрес файла u.wav и рядом с программой проигрывается???

Потому что надо писать D:\\ttt\\exc.wav, найди 10 различий)))
Hopkroft 18:45 01.09.2011

Сообщение от Спартак21:
Вопрос в силе: почему при написании адреса типа D:\\ttt\exc.wav файл не проигрывался, а адрес файла u.wav и рядом с программой проигрывается???

Прочитай про управляющие символы которые используются в строке. И тут же поймёшь причину
Спартак21 18:59 01.09.2011

Сообщение от Hopkroft:
Прочитай про управляющие символы которые используются в строке. И тут же поймёшь причину

Так-с! Уже интереснее
...управляющие символы в С++ или winAPI???
Spectator 19:06 01.09.2011

Сообщение от Спартак21:
Так-с! Уже интереснее

...управляющие символы в С++ или winAPI???

WinAPI в данном случае не виноват. Виноват компилятор C++, который съел в строке первую букву имени файла обратным слэшем который ты по незнанию написал один. Для того чтобы вставить в строку \ надо писать \\.
Спартак21 21:27 01.09.2011
...вот ещё один вопрос!
Читаю Гордеева про звук и обращаю внимание на хэндл устройства воспроизведения, получаемый вызовом waveOutOpen.
Вопрос: есть ли запасный вариант получения хэндла? если есть, то какой?
Spectator 21:55 01.09.2011

Сообщение от Спартак21:
...вот ещё один вопрос!
Читаю Гордеева про звук и обращаю внимание на хэндл устройства воспроизведения, получаемый вызовом waveOutOpen.
Вопрос: есть ли запасный вариант получения хэндла? если есть, то какой?

Для работы со звуком есть масса ШТАТНЫХ способов WinAPI/DirectSound. Между собой несоместимых. Это раз.

HANDLE - это внутренняя переменная КОНКРЕТНОЙ библиотеки.

ты можешь получить HANDLE с помощью CreateFile (по иронии, ей же файлы и открывают, а не только создают), но с этим хэндлом ничего большего чем записать/считать/обнулить содержимое файла ты сделать не сможешь. И передать его в функцию проигрывания - не сможешь тоже.

Это два.

Начинать разговор нужно с того - ЧТО тебе НУЖНО СДЕЛАТЬ - это три.
Spectator 21:59 01.09.2011
и да - пытаться понять WinAPI через книгу Гордеева про звук, не понимая сущность WinAPI и вообще внутреннее устройство винды - это заведомо путь в болото.
Спартак21 22:15 01.09.2011
ок!
Мне необходимо изменять громкость при проигрывании файла, т.е. PlaySound(...) & waveOutSetVolume(...).
Как изменить громкость?
Страница 5 из 6
< 12345 6 >
Вверх