Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 «  : 15-03-2011 12:48 »   | 
								
								 | 
							  
							 
							Столкнулся с такой проблемой: в аттаче два файлика. Тот, что ALARM.WAV – его удаётся проиграть при помощи DirectSound8, а тот, что АКБ-авария.wav – ну никак не желает  код класса приложен  спотык происходит вот здесь:  bool CWave::OpenSoundData(const BYTE* pFile_,const DWORD dwdFileLen_)  {  ...  ...  DWORD dwdRes=m_p_spec_body->pDS8->CreateSoundBuffer  (  &m_p_spec_body->BufDesc  ,&pDirSBuf_  ,0  ); 
  //DS_OK!=dwdRes  <<<<<<<<<<<<  
  if(DS_OK==dwdRes)  {  В чём отличие ? Или что я забыл сделать?   
						 | 
					 
					
						
							
								
									 
									
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 15-03-2011 20:11 »   | 
								
								 | 
							  
							 
							Леш, первый файлик - PCM 22 кГц моно 8 бит, второй - ADPCM 8 кГц моно 4 бита. Вопрос в кодеке. Перекодируй второй аналогично первому. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 16-03-2011 04:30 »   | 
								
								 | 
							  
							 
							Ром, перекодировать - это как ? Программно возможно ? По идее пользователь не должен думать об этом - он лишь знает, что можно загружать WAV файлы
  или просто нужно как-то узнать нужный кодек и как-то его подключить, если он есть на машине ? А в винампе оба файла играются 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 16-03-2011 07:00 »   | 
								
								 | 
							  
							 
							Перекодировать - любым редактором звука.
  Укажи, что WAV должны быть PCM. Ведь WAV - это контейнерный формат, а содержимое может быть в любом формате. Даже mpeg1/layer3 или в другом, еще более экзотичном.
  Другой вариант - распознавать формат (пара байт в заголовке) и если он не 0, то запрашивать у системы кодек. На воспроизведение подается уже PCM. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 16-03-2011 07:36 »   | 
								
								 | 
							  
							 
							вот мне подсказали утилитку.  http://sox.sourceforge.net/Переконвертировал, подправив приложенный там пример так cd %~dp0 mkdir converted FOR %%A IN (%*) DO sox %%A -b 8 -e signed-integer "converted/%%~nxA"
  напишу юзерам инструкцию ) Добавлено через 40 секунд:Другой вариант - распознавать формат (пара байт в заголовке) и если он не 0, то запрашивать у системы кодек. На воспроизведение подается уже PCM.
  а как запрашивать кодек у системы ?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 16-03-2011 07:37 от Алексей1153 »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	| 
		
		
	 | 
	
		
		
			
				
					
						| 
							zubr
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 16-03-2011 08:51 »   | 
								
								 | 
							  
							 
							Алексей1153++, как я понимаю, тебе надо просто проиграть звуковой файл. Если это так, то зачем заморачиваться с DirectX. Я бы в данном случае использовал уже готовое решение от Microsoft - интерфейс IWMPPlayer4. Алгоритм: 1. Создать объект IWMPPlayer4 2. Установить его свойство URL = путь к проигрываемому файлу 3. Получить объект IWMPControls, который является свойством Controls объекта IWMPPlayer4 4. Вызвать метод  IWMPControls::play 5. Если надо - вызвать IWMPControls::stop В этом случае ты можешь проигрывать любой доступный в системе медиа-формат, а не только waw и не заморачиваться с кодированием. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 16-03-2011 08:57 »   | 
								
								 | 
							  
							 
							zubr, ух ты, щас попробую    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 16-03-2011 09:57 »   | 
								
								 | 
							  
							 
							поскрёб по тырнетц и МСДН, попробовал, что-то не очень неудачно код получился такой: (код)     IWMPPlayer4* player4=0; 	IWMPControls* Cont=0; 	IWMPPlayer* player=0; 	HRESULT hr;
  	hr = CoCreateInstance( 		 __uuidof(WindowsMediaPlayer) 		,0 		,CLSCTX_INPROC_SERVER 		,__uuidof(IWMPPlayer) 		,(void **)&player 		);
  	if(hr==S_OK) 	{ 		const GUID IID_IWMPPlayer4={0x6C497D62,0x8919,0x413c,0x82,0xDB,0xE9,0x35,0xFB,0x3E,0xC5,0x84};
  		hr=player->QueryInterface(IID_IWMPPlayer4,(void**)&player4);
  		if(hr==S_OK) 		{ 			hr=player4->get_controls(&Cont); 			player->Release();
  			if(hr==S_OK) 			{ 				hr=player4->put_URL(L"C:\\ALARM.WAV");
  				hr=Cont->play();//<< hr==0x000d1105 			}
  		} 	}
  	if(Cont)Cont->Release(); 	if(player4)player4->Release();
  при вызове play() получаю ошибку 0x000d1105 , что из таблички ниже расшифровал как FACILITY_MEDIASERVER ERROR_PARTITION_FAILURE (табличка) // //  Values are 32 bit values laid out as follows: // //   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 //   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 //  +---+-+-+-----------------------+-------------------------------+ //  |Sev|C|R|     Facility          |               Code            | //  +---+-+-+-----------------------+-------------------------------+ // //  where // //      Sev - is the severity code // //          00 - Success //          01 - Informational //          10 - Warning //          11 - Error // //      C - is the Customer code flag // //      R - is a reserved bit // //      Facility - is the facility code // //      Code - is the facility's status code
  что я не так делаю?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							zubr
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 16-03-2011 10:18 »   | 
								
								 | 
							  
							 
							А зачем ты делаешь player->Release(); до окончания работы с объектом? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 16-03-2011 10:20 »   | 
								
								 | 
							  
							 
							zubr, я освобождаю промежуточный интерфейс - он больше не требуется после получения №4. Но даже если не закрывать его сразу - результат такой же, не играет
  Добавлено через 1 минуту и 22 секунды: а ещё - умеет ли IWMPPlayer4 играть не из файла, а из массива в памяти ? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 16-03-2011 10:21 от Алексей1153 »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							zubr
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 16-03-2011 11:15 »   | 
								
								 | 
							  
							 
							Странно, у меня авишку играет, mp3 не хочет 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 16-03-2011 16:26 »   | 
								
								 | 
							  
							 
							Алексей1153++,  HRESULT put_URL(   [in]   BSTR bstrURL );   - такой? BSTR  MyBstr = L"I am not happy BSTR";BSTR  MyBstr = SysAllocString(L"I am a happy BSTR");  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 16-03-2011 16:29 от Ochkarik »
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 17-03-2011 08:42 »   | 
								
								 | 
							  
							 
							Ochkarik, попробовал - результат тот же самый
  так ведь на загрузку URL он не ругается - S_OK там
  Добавлено через 3 минуты и 22 секунды: Кстати, что в батнике означает вот это место
  cd %~dp0
  и вот это
  .../%%~nxA"
  ?
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 17-03-2011 08:45 от Алексей1153 »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 17-03-2011 09:00 »   | 
								
								 | 
							  
							 
							вот тут поищи  http://www.robvanderwoude.com/for.php%A vs. %%A     %A is for use on command lines only. In all examples and syntax lines shown %A should be substituted with %%A when used in batch files. http://www.robvanderwoude.com/ntfor.php#FOR_F%~nxi   -   expands %i to a file name and extension only %~dpi   -   expands %i to a drive letter and path only  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 17-03-2011 09:05 от Ochkarik »
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 17-03-2011 09:11 »   | 
								
								 | 
							  
							 
							всё, вопрос снят, спасибо ) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							zubr
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 17-03-2011 11:05 »   | 
								
								 | 
							  
							 
							Алексей1153++, в дельфях у меня эта схема отлично работает, к mp3 я просто путь неправильный указал. Проверять в VC++ нема часу. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									«  Ответ #17 : 17-03-2011 11:19 »    | 
								
								 | 
							  
							 
							эхъ... ну я пока отдал пользователям с DS8, с инструкцией по конвертации. А то жаждут ) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	 |