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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод звука, на звуковую карту 
:(
    Опции темы
Streng
Дата 1.5.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите пожалуйста как вывести звук на звуковую карту. Я прочитал заголовок wav файла, поставил указатель на данные. Подскажите функцию, чтобы вывести это на звуковую карту...
Вот программа:
Код

#include<windows.h>
#include<iostream.h>
#include<string.h>
#include<stdio.h>

void main(){
  struct waveformat{
    char Riff[4];
    long dlinna;
    char wave_id[4];
    char fmt[4];
    long chunkSize;
   short coding;
    short channel;
    long frequncy;
    long bs;
    short bsempl;
    short bitsempl;
    char temp[14];
    char sdata[4];
    long dl;
    long adr;
   } wv;
FILE *f;
f=fopen("c:\\1.wav","r");
if (f==0) {cout<<"Не открывается файл";return;}
fread(&wv,sizeof(waveformat),1,f);
char *buff=new char;
cout<<"RIFF:";
for(int i=0;i<4;i++){
cout<<wv.Riff[i];
}
cout<<"\n Длинна файла:";
cout<<wv.dlinna;

cout<<"\nWAVE:";
for(int j=0;j<4;j++){
  cout<<wv.wave_id[j];
}
cout<<"\nFMT:";
for(int k=0;k<3;k++){
cout<<wv.fmt[k];}
cout<<"\nFormat Chuck Size:"<<wv.chunkSize;
cout<<"\nСпособ кодирования звука:"<<wv.coding;
cout<<"\nЧисло каналов:"<<wv.channel;
cout<<"\nЧастота семплирования:"<<wv.frequncy;
cout<<"\nСреднее число байт в секунду:"<<wv.bs;
cout<<"\nКол-во байт для 1 семпла:"<<wv.bsempl;
cout<<"\nКол-во бит для 1 семпла:"<<wv.bitsempl;
cout<<"\ndata:";
for(int z=0;z<4;z++){
cout<<wv.sdata[z];}
cout<<"\n"<<wv.dl;
data=&wv.adr;
cout<<data;
}
 
PM MAIL   Вверх
VectorMan
Дата 2.5.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


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

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



если просто проиграть файл то

Код

PlaySound("c:\\1.wav", NULL, SND_SYNC | SND_NODEFAULT);


если нужно что-то более гибкое то смотри в msdn функции waveOut* 
PM   Вверх
Streng
Дата 2.5.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо... Решил использовать функции waveOut*** Там есть функция waveOutGetDevCaps(N устройства, структура TWAVEOUTCAPS,размер структуры)ж
Однако при объявлении переменной TWAVEOUTCAPS woc; выдается ошибка неопределен TWAVEOUTCAPS... В какой библиотеке лежит эта структура?
 
PM MAIL   Вверх
VectorMan
Дата 3.5.2006, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


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

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



mmsystem.h

кстати ещё можно использовать готовые библиотеки для воспроизведения звука типа BASS 
PM   Вверх
Streng
Дата 4.5.2006, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я написал програмку которая должна проигрывать wav файл... Только она почему то не работает... Подскажите пожалуйста где я ошибся?
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 HMMIO hMmio = mmioOpen("c:\\1.wav", NULL, MMIO_READ | MMIO_ALLOCBUF);
 if (hMmio==0) {
 MessageBoxA(NULL,"Не удается открыть файл ","Ошибка! ",0);
 return;
 }
MMCKINFO mmCkInfoRiff;
mmCkInfoRiff.fccType = mmioFOURCC('W', 'A', 'V', 'E');
MMRESULT mmRes = mmioDescend(hMmio,&mmCkInfoRiff,NULL,MMIO_FINDRIFF);
if (mmRes!=MMSYSERR_NOERROR) {
MessageBoxA(NULL,"Не удается прочитать файл ","Ошибка! ",0);return;}
MMCKINFO mmCkInfo;
mmCkInfo.ckid = mmioFOURCC('f', 'm', 't', ' ');
mmRes = mmioDescend(hMmio, &mmCkInfo, &mmCkInfoRiff, MMIO_FINDCHUNK);
if (mmRes!=MMSYSERR_NOERROR) {
MessageBoxA(NULL,"Не удается прочитать файл ","Ошибка! ",0);return;}
WAVEFORMATEX WaveFormat;
mmioRead(hMmio, (char*)&WaveFormat, sizeof(WaveFormat) );
mmRes = mmioAscend(hMmio, &mmCkInfo, 0);
mmCkInfo.ckid = mmioFOURCC('d', 'a', 't', 'a');
mmRes = mmioDescend(hMmio, &mmCkInfo, &mmCkInfoRiff, MMIO_FINDCHUNK);
if (mmRes!=MMSYSERR_NOERROR) {
MessageBoxA(NULL,"Не удается прочитать файл ","Ошибка! ",0);return;}
LPVOID pBuf = VirtualAlloc(NULL, mmCkInfo.cksize, MEM_COMMIT, PAGE_READWRITE );
if (!pBuf) mmioRead(hMmio, (HPSTR)pBuf, mmCkInfo.cksize);
HWAVEOUT hWaveOut;
mmRes=waveOutOpen(&hWaveOut, WAVE_MAPPER, &WaveFormat, 0, 0L, CALLBACK_WINDOW);
if (mmRes!=MMSYSERR_NOERROR) MessageBoxA(NULL,"Не удается прочитать файл ","Ошибка! ",0);
WAVEHDR WaveHdr;
ULONG BufferSize = WaveFormat.nBlockAlign*WaveFormat.nSamplesPerSec*10;
WaveHdr.lpData =(char *)pBuf;
WaveHdr.dwBufferLength = sizeof(pBuf);
 waveOutPrepareHeader(hWaveOut, &WaveHdr, sizeof(WAVEHDR));
 waveOutWrite(hWaveOut, &WaveHdr, sizeof(WAVEHDR));


}
  
PM MAIL   Вверх
VectorMan
Дата 5.5.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


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

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



вот эта строчка мне совсем не нравится

Код
WaveHdr.dwBufferLength = sizeof(pBuf);


если ты выделяешь mmCkInfo.cksize байт под буфер то столько и нужно указывать в WaveHdr.dwBufferLength

Код
WaveHdr.dwBufferLength = mmCkInfo.cksize;
 
PM   Вверх
Streng
Дата 5.5.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Изменил... Все равно не воспроизводит файл... =(
А вот эта строчка правильна?
Код

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

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

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


 




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


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

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