Воспроизведение нескольких WAV файлов под WinCE.
От: Аноним  
Дата: 21.12.03 17:55
Оценка:
Есть проблема: нужно воспроизвести два wav файла одновременно.PlaySound не подходит.
Следовательно нужно через waveOutOpen.
Ниже выдерка из кода.Не могу понять в чем ошибка.Компилится без ошибок,
а звука нет.Кто может выручите.Может у кого есть пример кода?

вызов такой:
WaveFile player(TEXT("player.wav"));
player.Play(false);


А вот сами функции и выдержки кода:
#include <windows.h>
#include <stdio.h>

    char *lpfile;
    int file_size;
    WAVEFORMATEX wfex;
    HWAVEOUT hwo;
    WAVEHDR whdr;


WaveFile::WaveFile(LPCTSTR szFileName)
{

TCHAR PathName[MAX_PATH];                                 
TCHAR FullName[MAX_PATH];
ULONG    HighByt;                              

GetModuleFileName(NULL, PathName,MAX_PATH );               
PathName[lstrlen(PathName) - 8] = TEXT('\0');               

wsprintf(FullName, TEXT("%s%s"), PathName, szFileName);     

hFile  = CreateFile(FullName, GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,   
                                 NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
    file_size=GetFileSize (hFile, NULL) ; 

    lpfile = new char [file_size];
    // 'Copy' the file to memory
ReadFile(hFile,&lpfile , sizeof(lpfile), &HighByt, NULL);
CloseHandle(hFile);
  
ZeroMemory(&wfex,sizeof(WAVEFORMATEX));
   
    // Fill WAVEFORMATEX with the data from the file
  
     wfex.wFormatTag         =WAVE_FORMAT_PCM;
     wfex.nChannels            =1;
     wfex.nSamplesPerSec  =44100;
     wfex.nBlockAlign        =wfex.wBitsPerSample/8*wfex.nChannels;
     wfex.nAvgBytesPerSec =wfex.nSamplesPerSec*wfex.nBlockAlign;
     wfex.wBitsPerSample     =16;

    return;
}


WAVEHDR* WaveFile::Play(bool loop)
{
    WAVEHDR *whdr = new WAVEHDR;
    ZeroMemory((void*)whdr, sizeof(WAVEHDR));

    whdr->lpData = lpfile+HEADER_SIZE;
    whdr->dwBufferLength = file_size-HEADER_SIZE;
    whdr->dwUser = true;
    whdr->dwFlags = 0;

    // Find a waveOut device and open it
    for(UINT devid = 0; devid < waveOutGetNumDevs(); devid++)
    {
        if(devid == waveOutGetNumDevs())
            // Error, no free devices found
            return NULL;
        waveOutOpen(&hwo, WAVE_MAPPER, &wfex,NULL, NULL, CALLBACK_NULL);
            // Usable device found, stop searching
            break;
    
    }
    waveOutSetVolume(hwo, 0xFFFFFFFF);
    waveOutPrepareHeader(hwo, whdr, sizeof(WAVEHDR));
    waveOutWrite(hwo, whdr, sizeof(WAVEHDR));
    do {}
    while (!(whdr->dwFlags & WHDR_DONE)); // inefficient busy wait!
    waveOutUnprepareHeader(hwo, whdr, sizeof(whdr));

   //Close the WAVE device.
    waveOutClose(hwo);
    
    

    return whdr;
}
Re: Воспроизведение нескольких WAV файлов под WinCE.
От: Alexander Shargin Россия RSDN.ru
Дата: 22.12.03 11:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Есть проблема: нужно воспроизвести два wav файла одновременно.PlaySound не подходит.

А>Следовательно нужно через waveOutOpen.
А>Ниже выдерка из кода.Не могу понять в чем ошибка.Компилится без ошибок,
А>а звука нет.Кто может выручите.Может у кого есть пример кода?

Пример использования waveOutXXX можно посмотреть здесь:
http://www.pocketpcdn.com/articles/pocketpcaudio.html
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[2]: Воспроизведение нескольких WAV файлов под WinCE.
От: svatok  
Дата: 22.12.03 15:29
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Здравствуйте, Аноним, Вы писали:


А>> Есть проблема: нужно воспроизвести два wav файла одновременно.PlaySound не подходит.

А>>Следовательно нужно через waveOutOpen.
А>>Ниже выдерка из кода.Не могу понять в чем ошибка.Компилится без ошибок,
А>>а звука нет.Кто может выручите.Может у кого есть пример кода?

AS>Пример использования waveOutXXX можно посмотреть здесь:

AS>http://www.pocketpcdn.com/articles/pocketpcaudio.html

спасибо, щас гляну...
Re[3]: Воспроизведение нескольких WAV файлов под WinCE.
От: svatok  
Дата: 22.12.03 15:36
Оценка:
Здравствуйте, svatok, Вы писали:

S>Здравствуйте, Alexander Shargin, Вы писали:


AS>>Здравствуйте, Аноним, Вы писали:


А>>> Есть проблема: нужно воспроизвести два wav файла одновременно.PlaySound не подходит.

А>>>Следовательно нужно через waveOutOpen.
А>>>Ниже выдерка из кода.Не могу понять в чем ошибка.Компилится без ошибок,
А>>>а звука нет.Кто может выручите.Может у кого есть пример кода?

AS>>Пример использования waveOutXXX можно посмотреть здесь:

AS>>http://www.pocketpcdn.com/articles/pocketpcaudio.html

S>спасибо, щас гляну...

Там реализовано открытие файла через fopen,
а WinCE не поддерживает стандартный ввод \ вывод С++.
Нужно только через CreateFile или как-то из ресурса,только не знаю как...
Re[4]: Воспроизведение нескольких WAV файлов под WinCE.
От: Alexander Shargin Россия RSDN.ru
Дата: 23.12.03 07:53
Оценка:
Здравствуйте, svatok, Вы писали:

S>>спасибо, щас гляну...

S>Там реализовано открытие файла через fopen,
S>а WinCE не поддерживает стандартный ввод \ вывод С++.

Неправда ваша. WinCE поддерживает стандартный ввод в стиле C. Что касается статьи, она написана специально для Pocket PC (а это CE-based device), и я могу подтвердить, что приведённый в ней код работает.

В то же время при желании нетрудно переписать и на CreateFile, и на ресурсы — содержательная-то часть от этого не меняется. Если непонятно, как это сделать, задавай конкретные вопросы отдельным топиком.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[5]: Воспроизведение нескольких WAV файлов под WinCE.
От: svatok  
Дата: 23.12.03 15:58
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Здравствуйте, svatok, Вы писали:


S>>>спасибо, щас гляну...

S>>Там реализовано открытие файла через fopen,
S>>а WinCE не поддерживает стандартный ввод \ вывод С++.

AS>Неправда ваша. WinCE поддерживает стандартный ввод в стиле C. Что касается статьи, она написана специально для Pocket PC (а это CE-based device), и я могу подтвердить, что приведённый в ней код работает.


AS>В то же время при желании нетрудно переписать и на CreateFile, и на ресурсы — содержательная-то часть от этого не меняется. Если непонятно, как это сделать, задавай конкретные вопросы отдельным топиком.

Дабы не быть пустословным , процитирую из книги "Programing Microsoft Windows CE Second Edition"Douglas Boling
Copyright © 2001 by Douglas McConnaughey Boling .
Standard File I/O
Windows CE supports most of the same file I/O functions found in Windows XP and Windows Me. The same Win32 API calls, such as CreateFile, ReadFile, WriteFile, and CloseFile, are all supported. A Windows CE programmer must be aware of a few differences, however. First of all, the standard C file I/O functions, such as fopen, fread, and fprintf, aren't supported under Windows CE. Likewise, the old Win16 standards, _lread, _lwrite, and _llseek, aren't supported. This isn't really a huge problem because all of these functions can easily be implemented by wrapping the Windows CE file functions with a small amount of code. Windows CE does support basic console library functions such as printf for console applications if the console is supported on that configuration.
Да и сам когда писал код сохранения в файл fopen не работало,хотя компилилось без ошибок.Получилось только через
CreateFile .
Re[5]: Воспроизведение нескольких WAV файлов под WinCE.
От: svatok  
Дата: 23.12.03 16:13
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Здравствуйте, svatok, Вы писали:


S>>>спасибо, щас гляну...

S>>Там реализовано открытие файла через fopen,
S>>а WinCE не поддерживает стандартный ввод \ вывод С++.

AS>Неправда ваша. WinCE поддерживает стандартный ввод в стиле C. Что касается статьи, она написана специально для Pocket PC (а это CE-based device), и я могу подтвердить, что приведённый в ней код работает.


AS>В то же время при желании нетрудно переписать и на CreateFile, и на ресурсы — содержательная-то часть от этого не меняется. Если непонятно, как это сделать, задавай конкретные вопросы отдельным топиком.

Может у вас есть какой нибудь исходник или фрагмент кода.Конкретнее меня интересует загрузка wav — файла или
лучше ресурса в буфер для последующего заполнения WAVEHDR.Но без использования PlaySound, тк нужно
воспроизвести два звука одновременно.Был бы очень благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.