|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Терминатор и размер блока
Пытаюсь написать программку. Использую в ней функции BlockSize, Terminated, а Delphi 7 утверждает что не знаит таких... Как кто думает в чем дело?
|
#2
|
||||
|
||||
скорее всего не подключены нужные модули в Uses
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
||||
|
||||
Вот основной вопрос тогда: какие не подключены?
|
#4
|
||||
|
||||
дык,мы же не телепаты ... показывай код
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#5
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MMSystem, ComCtrls , MPlayer, Menus, Buttons, ExtCtrls, Gauges, WinSock; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure CheckAudio(Sender: TObject); procedure StructFormat; procedure OpenDevice; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; WOutCaps: TWAVEOUTCAPS; wfx: TWAVEFORMATEX; hEvent: THandle; hwo: HWAVEOUT; si: TSYSTEMINFO; wh: array[0..1] of TWAVEHDR; Buf: array[0..1] of PChar; CnlBuf: array[0..1] of PChar; implementation {$R *.dfm} //проверяем наличие аудиоустройства procedure TForm1.CheckAudio(Sender: TObject); begin FillChar(WOutCaps, SizeOf(TWAVEOUTCAPS), #0); if MMSYSERR_NOERROR <> WaveOutGetDevCaps(0, @WOutCaps, SizeOf(TWAVEOUTCAPS)) then begin ShowMessage('Error'); Exit; end; end; //заканчиваем проверять наличие аудиоустройства //заполняем структуру формата procedure TForm1.StructFormat; begin FillChar(wfx, Sizeof(TWAVEFORMATEX), #0); with wfx do begin wFormatTag:= WAVE_FORMAT_PCM; nChannels:= 2; nSamplesPerSec:= 44100; wBitsPerSample:= 16; nBlockAlign:= wBitsPerSample div 8 * nChannels; nAvgBytesPerSec:= nSamplesPerSec * nBlockAlign; cbSize:=0; end; end; //заканчиваем заполнять структуру формата //открываем устройство procedure TForm1.OpenDevice; begin hEvent := CreateEvent(nil, false, false, nil); if WaveOutOpen(@hwo, 0, @wfx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then begin GetSystemInfo(si); buf[0]:= VirtualAlloc(nil, ( BlockSize * 4)+ si.dwPageSize-1) div si.dwPagesize * si.dwPageSize, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); buf[1]:= PChar(LongInt(Buf[1])+ BlockSize); ChlBuf[0]:= PChar(LongInt(Buf[1]) + BlockSize); ChlBuf[1]:= PChar(LongInt(CnlBuf[0]) + BlockSize div 2); for I:= 0 to 1 do begin FillChar(wh[i], sizeof(TWAVEHDR), #0); wh[i].lpData:= buf[i]; wh[i].dwBufferLength:= BlockSize; waveOutPrepareHeader(hwo, @wh[i], sizeof(TWAVEHDR)); end; Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2); I:=0; while not Terminated do begin waveOutWrite(hwo, @wh[i], sizeof(WAVEHDR)); WaitForSingleObject(hEvent, INFINITE); I:=I xor 1; Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2); end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin OpenDevice; end; procedure TForm1.Button2Click(Sender: TObject); begin waveOutReset(hwo); waveOutUnprepareHeader(hwo, @wh[0], sizeof(WAVEHDR)); waveOutUnprepareHeader(hwo, @wh[1], sizeof(WAVEHDR)); CloseHandle(hEvent); end; end. Нашел код. Решил воплотить в жизнь, а не работает. Всё что знал, всё подключил. |
#6
|
||||
|
||||
Код:
procedure TForm1.OpenDevice; var BlockSize:dword; ChlBuf :array of string; i:integer; Terminated :boolean; begin hEvent := CreateEvent(nil, false, false, nil); if WaveOutOpen(@hwo, 0, @wfx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then begin GetSystemInfo(si); buf[0]:= VirtualAlloc(nil, ((BlockSize * 4)+ si.dwPageSize-1) div si.dwPagesize * si.dwPageSize, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); buf[1]:= PChar(LongInt(Buf[1])+ BlockSize); ChlBuf[0]:= PChar(LongInt(Buf[1]) + BlockSize); ChlBuf[1]:= PChar(LongInt(CnlBuf[0]) + BlockSize div 2); for I:= 0 to 1 do begin FillChar(wh[i], sizeof(TWAVEHDR), #0); wh[i].lpData:= buf[i]; wh[i].dwBufferLength:= BlockSize; waveOutPrepareHeader(hwo, @wh[i], sizeof(TWAVEHDR)); end; // Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); // какая-то процедура // Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); // какая-то процедура // Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2); // какая-то процедура I:=0; while not Terminated do begin waveOutWrite(hwo, @wh[i], sizeof(WAVEHDR)); WaitForSingleObject(hEvent, INFINITE); I:=I xor 1; // Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); // какая-то процедура // Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); // какая-то процедура // Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2); // какая-то процедура end; end; end; Процедур: Generator и Mix нет в коде ... поэтому он их и не находит Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Последний раз редактировалось Yurk@, 19.09.2009 в 23:21. |
#7
|
||||
|
||||
Вот программа эта как бы предназначена для вывода звука... Сам звук генерируется функциями генератор и микс(смешаваются 2 канала). Функции не известны поэтому вопрос: куда надо что присвоить чтоб появился звук? Звук нужен банальный писк заданой частотой. В гугле одни и теже примеры и ничегошеньки не понятно.
|