Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2010, 14:25   #1
Garic_
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 27
Печаль WPARAM wParam, LPARAM lParam откуда берётся?

Добрый день, кто может объяснить?
WPARAM wParam, LPARAM lParam откуда берётся?
Я кроме этого не знаю.
MSG msg = {0};// структура сообщения
msg.wParam;
msg.lParam;

Вот код:
Код:
bool __fastcall TForm1::OpenWaveIn(HWND hWnd,int nChan,int Freq,int nBits)
{
MMRESULT res;
WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
WaveFormat.nChannels = 1;
WaveFormat.nSamplesPerSec = 44100;
WaveFormat.nAvgBytesPerSec = ( WaveFormat.nChannels * WaveFormat.nSamplesPerSec * 16 ) / 8;
WaveFormat.nBlockAlign = ( WaveFormat.nChannels * 16) / 8;
WaveFormat.wBitsPerSample = 16;
WaveFormat.cbSize = 0;

 if(waveInOpen(&WaveIn,WAVE_MAPPER,&WaveFormat,(DWORD)hWnd,NULL,CALLBACK_WINDOW))
    {
     ShowMessage("Error waveInOpen!");
    return;
    }
  // Заполняем заголовок блока
  ULONG bufferSize = WaveFormat.nBlockAlign * WaveFormat.nSamplesPerSec * 10; 
  WaveHdr.lpData         = (char*)malloc(bufferSize);
  WaveHdr.dwBufferLength = bufferSize; 
  WaveHdr.dwFlags        = 0L;
  WaveHdr.dwLoops        = 0L;
  WaveHdr.dwUser         = 0L;

  // Подготавливаем блок для записи
  if(waveInPrepareHeader(WaveIn, &WaveHdr, sizeof(WAVEHDR)))
  {
    ShowMessage("Error waveInPrepareHeader!");
    return;
  }

  // Передаем блок устройству записи
  if(waveInAddBuffer(WaveIn, &WaveHdr, sizeof(WAVEHDR)))
  {
    waveInUnprepareHeader(WaveIn, &WaveHdr, sizeof(WAVEHDR));
    ShowMessage("Error waveAddBuffer!");
    return;
  }

  // Запускаем запись
  if(waveInStart(WaveIn))
    {
    ShowMessage("Error waveInStart!");
    return;
    }
return true;//Добавил
}

//И как сюда должно приходить?
bool __fastcall TForm1::OnWimData(WPARAM wParam, LPARAM lParam){
...
}
Пожалуйста ответьте!

Последний раз редактировалось Garic_; 02.06.2010 в 15:14.
Garic_ вне форума Ответить с цитированием
Старый 02.06.2010, 18:51   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Система получает сообщение и передаёт в обработчик.
Carbon вне форума Ответить с цитированием
Старый 02.06.2010, 22:50   #3
Garic_
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 27
По умолчанию

иииииииииииииииииииии

Последний раз редактировалось Garic_; 02.06.2010 в 22:55. Причина: скопировало дважды
Garic_ вне форума Ответить с цитированием
Старый 02.06.2010, 22:50   #4
Garic_
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 27
По умолчанию

Сделал так:
Код:
void __fastcall TForm1::MyDoMessage(TMessage &msg){
switch(msg.Msg)
{
case MM_WIM_OPEN:
//Ïðîñòî ìîæíî âûâåñòè â StatusBar òåêñò
break;
 case MM_WIM_DATA:
//if (!DataWaveIn(MyhWnd,(HWAVEIN)msg.WParam,(LPWAVEHDR)msg.LParam))
  if (!OnWimData(MyhWnd,(HWAVEIN)msg.WParam,(LPWAVEHDR)msg.LParam))
{
ShowMessage("Err Access SoundDriver");
CloseWaveIn(MyhWnd);
}
break;
case MM_WIM_CLOSE:
//Ïðîñòî ìîæíî âûâåñòè â StatusBar òåêñò
break;
case WM_DESTROY:
CloseWaveIn(MyhWnd);
Label1->Caption="Sound Close";
default:
msg.Result = DefWindowProc(MyhWnd, msg.Msg, msg.WParam, msg.LParam);
}
}
Потом сюда:
Код:
  bool __fastcall TForm1::OnWimData(HWND hWnd, HWAVEIN hwav, LPWAVEHDR pHdr){
 // Удаляем из очереди записи
      waveInUnprepareHeader((HWAVEIN)hwav,
       (LPWAVEHDR)pHdr, sizeof(WAVEHDR));

      // Сохраняем записанный блок в файле
   //   FileSave(); здесь незнаю как прописать правильно

      // останавливаем и закрываем устройство ввода
      waveInReset((HWAVEIN)hwav);
      waveInClose((HWAVEIN)hwav);
      WaveIn = 0;
      return 0;
 }
и возвращаясь, выдаёт ShowMessage("Err Access SoundDriver");
Сделал такую проверку, этот код работает:
Код:
  bool __fastcall TForm1::OnWimData(HWND hWnd, HWAVEIN hwav, LPWAVEHDR pHdr)
{
PLEVELWAVEIN pInfo;
int n = 0;
int LevelLeft = 0, LevelRight = 0;
int i, l;
while (n < WaveHdr.dwBufferLength)
{      //---для 16 бит----------------------------------------------------
  if (WaveFormat.wBitsPerSample == 16){
     n++;
     i = (int) (signed char) pHdr->lpData[n];
   }
     n++;
   if (i < 0)
     i = -i;
     l = (i*100) / 128;
    if (LevelLeft < l) LevelLeft = l;
}
   if (waveInAddBuffer(WaveIn, pHdr, sizeof(WAVEHDR)))return false;
 SendMessage(Form1->Handle,WM_USER+1, 0, LevelLeft);
      return (TRUE);
}
А меня интересует не звуковая мигалка, а запись звука в файл, пожал. помогите!

Последний раз редактировалось Garic_; 03.06.2010 в 11:51.
Garic_ вне форума Ответить с цитированием
Старый 09.06.2010, 22:42   #5
Garic_
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 27
По умолчанию

Спасибо тихому форуму! Это было мощно.
Кто нуждается в похожем ответе, можно скачать по инету
Автор Гордеев О.В. Название Программирование звука в Windows
wParam - Описатель устройства записи.
lParam - адрес структуры WAVEHDR для записанных данных.
Garic_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отрицательно значение у wParam? TwiX Общие вопросы Delphi 6 09.08.2009 01:40
откуда ошибка 183? vl1639 Общие вопросы Delphi 4 17.01.2009 01:11
Поясните откуда ошибка? Hegel Помощь студентам 8 12.01.2009 07:39
lb_GetSelItems. Проблемы с lParam Izhic Win Api 2 20.10.2008 18:16
Как получить координаты мыши из lParam в Дельфи? zhefran Win Api 3 30.04.2008 11:51