Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> C / C++ -> Visual C++ для начинающих


18. Проигрывание Wave-файлов под MFC


1. Введение

В этой главе мы создадим программу, проигрывающую WAVE-файлы. Для начала создадим проект mysound в диалоговом режиме с использованием MFC. В начало файла mysoundDlg.cpp надо написать #include <mmsystem.h>, но это не всё, а теперь самое главное( если это не сделать, то будет ошибка при линковании ) :

    1. Выберите Project -> Settings... --> C/C++ --> Code Generation и поставте Multithreaded DLL
    2. Выберите Project -> Settings... --> Link --> General и поставте в поле Object/Library modules библиотеку winmm.lib( это очень важно, проверте !!! )

2. Проигрывание Wave-файла в виде ресурса

Первым делом надо создать ресурс, для этого в файле mysound.rc2 надо вписать строчку IDSOUND_CORRECT sound res\correct.wav, где IDSOUND_CORRECT - индефикатор ресурса, sound - тип ресурса( название можно менять ), res\correct.wav - файл ресурса. После этого в файле Resource.h надо зарегистрировать ресурс: #define IDSOUND_CORRECT 130. Число 130 не должно совпадать с другими числами.

Как только ресурс зарегистрирован можно написать в файле mysoundDlg.cpp функции проигрывания этого ресурса :

 static void PlayResource(LPCTSTR lpszSound) { 	
HRSRC hRes; // resource handle to wave file 	
HGLOBAL hData; 	BOOL bOk = FALSE; 	if 
((hRes = ::FindResource(AfxGetResourceHandle(),
 lpszSound, 	  _T("sound"))) != NULL && 	  
 (hData = ::LoadResource
 (AfxGetResourceHandle(), hRes)) != NULL) 	{ 
// found the resource, play it 		bOk = 
sndPlaySound((LPCTSTR)::LockResource(hData), 			
SND_MEMORY|SND_SYNC|SND_NODEFAULT); 		
FreeResource(hData); 	} 	if (!bOk) 	{ 	
 AfxMessageBox("ERROR !!! Can not play the sound. 
 \nNot find sound board !!!");	 	} }  
inline static void PlayResource(UINT nIDS) 	{ 
PlayResource(MAKEINTRESOURCE(nIDS)); }
В фунции ::FindResource(AfxGetResourceHandle(), lpszSound, _T("sound")) третий параметр - тип ресурса, который был описан выше.

Теперь можно проиграть ресурс : PlayResource( IDSOUND_CORRECT );

3. Проигрывание Wave-файла с диска

Для проигрывания WAVE-файла с диска можно использовать функцию :

    BOOL sndPlaySound(    	 LPCTSTR  lpszSoundName;     	
 UINT  fuOptions;    );	  Параметры функции:  
 lpszSoundName  Имя файла. Если этот параметр  NULL,
то проигрывание файла останавливается.   fuOptions
Специальные опции для проигрывания музыки. 
Они могут быть следующими:  
Значение	                    Описание  
SND_SYNC	Музыка играется синхронно, и функция 
не возвращает указатель 		пока не будет конца файла.
SND_ASYNC	Музыка играется асинхронно, и функция
возвращает указатель 		сразу после начала 
проигрывания файла. Чтобы остановить проигрывание, 
надо вызвать функцию SndPlaySound с параметром 
lpszSoundName  		установленным в NULL. 
SND_NODEFAULT	Если файл не найден, то функция 
возвращает указатель 		сразу и не 
проигрывает стандартный звуковой эффект Windows. 
SND_MEMORY	Этот параметр нужен для проигрывания  
Wave-файла в виде ресурса( из памяти ). 
SND_LOOP	Этот параметр нужен для проигрывания 
 Wave-файла в циклическом режиме. 		Также 
 при этом вы должны использовать влаг SND_ASYNC. 		
 Чтобы остановить проигрывание, надо вызвать 
 функцию SndPlaySound 		с параметром
lpszSoundName установленным в NULL. 
SND_NOSTOP	Если музыка уже проигрывается,
 то функция возврвщает FALSE.  
 Возвращаемое значение:  Если музыка проигрывается 
 правильно, то функция возврвщает TRUE, иначе FALSE. 
  Пример использования:  	B
  OOL bOk = sndPlaySound( "test.wav", SND_SYNC); 	  	
  if (!bOk) 	{ 	    AfxMessageBox
  ("Error ! Can not play the sound. !!!");	 	} 

4. Пример проекта

    Отсюда можно взять рабочую программу под MFC, в которой проигрываются Wave-файлы.



 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100