Форум: "Media";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизКак муз.файла независимо воспроизвести на 2х звуковых Найти похожие ветки
← →
AlexeyMir (2006-02-08 10:20) [0]Мне не нужен профессиональный звук. У меня две звуковых карты, как одновременно проигрывать разные муз.файлы на разных звуковых. Может есть какая-то простенькая библиотека? Помогите.
Еще вопрос: в каком формате лучше хранить муз.файлы чтобы воспроизводить на разных звуковых, здесь "палка о двух концах" если хранить в .wav то нагрузка на винт(одновременно читается много информации); если в mp3, то нагрузка на процессор(одновременно раскодируется много информации)
← →
Evgeny V © (2006-02-08 14:35) [1]
> "палка о двух концах"
Выбрать один из концов.
Если использовать для воспроизведения функции waveOutXXX, то в waveOutOpen, там есть параметр uDeviceID, с помощью которого можно выбрать номер открываемой звуковой карты, например 0,1....
← →
AlexeyMir (2006-02-08 15:12) [2]Может есть пример воспроизведения с помощью функций функций waveOutXXX, киньте пожалуйста
← →
Evgeny V © (2006-02-09 08:51) [3]Так как нет исходника под рукой написал быстренько и упрощенно. Извини проверки все на корректность возврата функций не делал. Сделай сам. Так же не писал как загружать в буфер wav файл - кстати в примере считаю, что файл в PCM формате.
procedure myWaveOut - открываем первое устройство, считаем что в буфере уже есть данные, готовим буфер, посылаем на проигрывание и все.
procedure myproc - callback процедура, которая вызовется по окончании проигрывания буфера.
Кстати получить число устройств вывода можно через waveOutGetNumDevs
procedure Stop;// Закрываем устройство по окончанию проигрывания всех
//буферов или когда устойство уже не нужно.
uses mmsystem;
var
vbuf: array [0..8000] of char;// буфер куда из wav файла
//записываются звуковые данные, таких буферов может быть
//несколько, размер на твое усмотрение, можешь сделать динамическим.
pwx:TWAVEFORMATEX;
hdr:TWAVEHDR;
msound:HWAVEOUT;
r:MMRESULT;
procedure myproc( hwo:HWAVEOUT;uMsg:UINT;dwInstance,dwParam1,dwParam2:DWORD);stdcall;
procedure myWaveOut
begin
pwx.wFormatTag:=WAVE_FORMAT_PCM;
pwx.nChannels:=1;
pwx.nSamplesPerSec:=8000;
pwx.nAvgBytesPerSec:=8000;
pwx.nBlockAlign:=1;
pwx.wBitsPerSample:=8;
pwx.cbSize:=0;
r:=waveOutOpen(@msound,0,@pwx,Cardinal(@myproc),0,CALLBACK_FUNCTION);
if r <> MMSYSERR_NOERROR then
exit;
hdr.lpData:=@vbuf[0];
hdr.dwBufferLength:=8000;
hdr.dwFlags:=0;
hdr.dwLoops:=0;
hdr.lpNext:=nil;// почитай про WAVEHDR, пригодится
waveOutPrepareheader(msound,@hdr,sizeof(TWAVEHDR)); //Подготовили буфер
waveOutWrite(msound,@hdr,sizeof(TWAVEHDR));// отправили на
//проигрывание
end;
procedure myproc( hwo:HWAVEOUT;uMsg:UINT;dwInstance,dwParam1,dwParam2:DWORD);stdcall;
begin
if uMsg = WOM_DONE then
begin
waveOutUnPrepareheader(msound,LPWAVEOUTHDR(dwParam1),sizeof(TWAVEHDR));
end;
end;
// Закрываем устройство, когда оно нам больше не нужно
procedure Stop;
begin
waveOutReset(msound);
waveOutClose(msound);
end;
Так как все схематично - тебе прийдется самому почитать и разобраться со всеми функциями и структурами.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c