Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> waveInAddBuffer ошибка NOMEM, как ее победить? 
V
    Опции темы
finomen
Дата 23.9.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.2.2008

Репутация: нет
Всего: нет



кто знает, подскажите, что неправльно в моем коде. цикл выполняется только 500 раз=(
программа позволяет выбрать устройство входа и выхода и должна просто транслировать звук....
собсно программа
Код

#include <iostream.h>
#include <windows.h>
#include <MMSYSTEM.H>
#include <MMREG.H>
#include <MSACM.H>

#pragma comment(lib, "winmm.lib")
void CALLBACK dmsg(HWAVE Handle,UINT Msg, DWORD Instance, DWORD Param1, DWORD Param2)
{
    switch(Msg)
    {
    case MM_WOM_OPEN: cout<<"Out dev opened"<<endl;
        break;
    case MM_WIM_OPEN: cout<<"In dev opened"<<endl;
        break;
    case MM_WOM_CLOSE: cout<<"Out dev closed"<<endl;
        break;
    case MM_WIM_CLOSE: cout<<"In dev closed"<<endl;
        break;
    default: cout<<"Dev event"<<endl;
        break;
    };

}
void main()
{
    char buf[1000];
    WAVEFORMATEX wfex;
    WAVEINCAPS wic;
    WAVEOUTCAPS woc;
    WAVEHDR whdr;
    MMTIME mmt;


    HWAVEIN hwi;
    HWAVEOUT hwo;


    wfex.wFormatTag=WAVE_FORMAT_PCM;
    wfex.nChannels=1;
    wfex.nSamplesPerSec=100;
    wfex.nAvgBytesPerSec=200;
    wfex.nBlockAlign=2;
    wfex.wBitsPerSample=16;
    wfex.cbSize=0;
    
    whdr.dwBufferLength=1000;
    whdr.lpData=buf;
    whdr.dwUser=0; //èãðîðèðóåòñÿ
    whdr.dwFlags=0;
    whdr.dwLoops=0;

    mmt.wType=TIME_MS;
    
    int t;
    cout<<"Num in devs: "<<(t=waveInGetNumDevs ())<<endl;
    for(int i=0;i<t;i++)
    {
        waveInGetDevCaps (i,&wic,sizeof(wic));
        cout<<i<<" - "<<wic.szPname<<endl;

    }
    cout<<"Num out devs: "<<(t=waveOutGetNumDevs ())<<endl;
    for(i=0;i<t;i++)
    {
        waveOutGetDevCaps (i,&woc,sizeof(woc));
        cout<<i<<" - "<<woc.szPname<<endl;

    }
    cout<<"Select In dev : ";
    cin>>t;

    t=0;
    if(waveInOpen (&hwi,t,&wfex,(DWORD)dmsg,NULL,CALLBACK_FUNCTION)!=0) cerr<<"Error opening dev"<<endl;

    cout<<"Select Out dev : ";
    cin>>t;
    if(waveOutOpen (&hwo,t,&wfex,(DWORD)dmsg,NULL,CALLBACK_FUNCTION)!=0) cerr<<"Error opening dev"<<endl;

    int f=0;    
    while(1)
    {
    if((t=waveInPrepareHeader(hwi,&whdr, sizeof(whdr)))!=0) 
    {
        cerr<<"Error in header prepearing "<<t<<endl;
        break;
    }
    if((t=waveInAddBuffer (hwi, &whdr, sizeof(whdr)))!=0)
    {
        cerr<<"Error adding input buffer "<<t<<endl;
        switch(t)
        {
        case MMSYSERR_NODRIVER: cerr<<"No driver"<<endl;
            break;
        case MMSYSERR_BADDEVICEID: cerr<<"No device"<<endl;
            break;
        case MMSYSERR_ALLOCATED: cerr<<"Oppend"<<endl;
            break;
        case MMSYSERR_NOMEM: cerr<<"No mem "<<whdr.dwBytesRecorded<<endl;
            break;
        }
        break;
        break;
    }
    waveInStart(hwi);
    while(!whdr.dwFlags==WHDR_DONE) {;}
        whdr.dwFlags=0;
    if((t=waveInUnprepareHeader(hwi,&whdr, sizeof(whdr)))!=0) 
    {
        cerr<<"Error in header unprepearing "<<t<<endl;
        break;
    }
    
    cout<<"Filtered "<<f<<endl;
    f++;
    if((t=waveOutPrepareHeader(hwo,&whdr, sizeof(whdr)))!=0)
    {    
        cerr<<"Error out header prepearing "<<t<<endl;
    }
    if((t=waveOutWrite (hwo, &whdr, sizeof(whdr)))!=0)
    {
        cerr<<"Error adding output buffer"<<endl;
        switch(t)
        {
        case MMSYSERR_NODRIVER: cerr<<"No driver"<<endl;
            break;
        case MMSYSERR_BADDEVICEID: cerr<<"No device"<<endl;
            break;
        case MMSYSERR_ALLOCATED: cerr<<"Oppend"<<endl;
            break;
        case MMSYSERR_NOMEM: cerr<<"No mem "<<whdr.dwBytesRecorded<<endl;
            break;
    }
    while(!whdr.dwFlags==WHDR_DONE) {;}
        whdr.dwFlags=0;
    if((t=waveOutUnprepareHeader(hwo,&whdr, sizeof(whdr)))!=0)
    {
        cerr<<"Error out header unprepearing "<<t<<endl;
        break;
    }
    }    
    
    waveInClose(hwi);
    waveOutClose(hwo);
    
}


это первая моя программа со звуком, так что сильно не бить

Это сообщение отредактировал(а) finomen - 23.9.2008, 14:54
PM MAIL   Вверх
SVN74
Дата 29.9.2008, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: нет
Всего: 18



поищи литературу О. Гордеева "Программирование Звука в Windows"

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.