Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Пацаны, помогите пожалуйста создать настоящий генератор случайных чисел!
дело в том, что функция random основана на математике, а потому числа которые она возвращает не хаотичны, много повторов подряд
перевернул форумы и понял, что единственный способ получить настоящее случайное число описан здесь http://habrahabr.ru/post/62237/
за исключением получения их из квантового вакуума http://www.lenta.ru/news/2012/04/16/randomiser/
а именно "запись помех электропитания" звуковой карты в буфер, считывание оттуда значения
грубо говоря мне нужен "более рандомный рандом"
в общем импортировал из MMSystem.pas функции и структуры данных, и перевернул форумы по записи с микофона и вообще записи, но сложновато
прошу помочь по возможности!
код:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[  Code]
const
  WAVE_FORMAT_PCM = 1;

type
  tWAVEFORMATEX = record
    wFormatTag: Word;         { format type }
    nChannels: Word;          { number of channels (i.e. mono, stereo, etc.) }
    nSamplesPerSec: DWORD;  { sample rate }
    nAvgBytesPerSec: DWORD; { for buffer estimation }
    nBlockAlign: Word;      { block size of data }
    wBitsPerSample: Word;   { number of bits per sample of mono data }
    cbSize: Word;           { the count in bytes of the size of }
  end;
  
  wavehdr_tag = record
    lpData: PAnsiChar;          { pointer to locked data buffer }
    dwBufferLength: DWORD;      { length of data buffer }
    dwBytesRecorded: DWORD;     { used for input only }
    dwUser: DWORD;              { for client's use }
    dwFlags: DWORD;             { assorted flags (see defines) }
    dwLoops: DWORD;             { loop control counter }
    lpNext: Integer;           { reserved for driver }
    reserved: DWORD;            { reserved for driver }
  end;

function waveInOpen(lphWaveIn: Integer; uDeviceID: UINT; lpFormatEx: tWAVEFORMATEX; dwCallback, dwInstance, dwFlags: DWORD): UINT; external 'waveInOpen@winmm.dll stdcall';
function waveInPrepareHeader(hWaveIn: Integer; lpWaveInHdr: wavehdr_tag; uSize: UINT): UINT; external 'waveInPrepareHeader@winmm.dll stdcall';
function waveInAddBuffer(hWaveIn: Integer; lpWaveInHdr: wavehdr_tag; uSize: UINT): UINT; external 'waveInAddBuffer@winmm.dll stdcall';
function waveInUnprepareHeader(hWaveIn: Integer; lpWaveInHdr: wavehdr_tag; uSize: UINT): UINT; external 'waveInUnprepareHeader@winmm.dll stdcall';
function waveInClose(hWaveIn: Integer): UINT; external 'waveInClose@winmm.dll stdcall';
function waveInStart(hWaveIn: Integer): UINT; external 'waveInStart@winmm.dll stdcall';
function waveInReset(hWaveIn: Integer): UINT; external 'waveInReset@winmm.dll stdcall';
function waveInStop(hWaveIn: Integer): UINT; external 'waveInStop@winmm.dll stdcall';



procedure InitializeWizard;
var
  Noise : tWAVEFORMATEX;
begin
  Noise.wFormatTag := WAVE_FORMAT_PCM;
  Noise.nChannels := 1;
  Noise.wBitsPerSample := 16;
  Noise.nSamplesPerSec := 11025;//
  Noise.cbSize:=Noise.wBitsPerSample div 8 * Noise.nChannels;
  Noise.nAvgBytesPerSec:=Noise.nSamplesPerSec * Noise.nBlockAlign;
  Noise.cbSize:=0;
end;


PS: извините, что выношу вам мозг своими злостными потребностями
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:04, 30-11-2012 | #1341