Модератор: Модераторы
uses 
MMSystem; 
type 
TVolumeLevel = 0..127; 
procedure MakeSound(Frequency{Hz}, Duration{mSec}: Integer; Volume: TVolumeLevel); 
{writes tone to memory and plays it} 
var 
WaveFormatEx: TWaveFormatEx; 
MS: TMemoryStream; 
i, TempInt, DataCount, RiffCount: integer; 
SoundValue: byte; 
w: double; // omega ( 2 * pi * frequency) 
const 
Mono: Word = $0001; 
SampleRate: Integer = 11025; // 8000, 11025, 22050, or 44100 
RiffId: string = 'RIFF'; 
WaveId: string = 'WAVE'; 
FmtId: string = 'fmt '; 
DataId: string = 'data'; 
begin 
if Frequency > (0.6 * SampleRate) then 
begin 
   ShowMessage(Format('Sample rate of %d is too Low to play a tone of %dHz', [SampleRate, Frequency])); 
Exit; 
end; 
with WaveFormatEx do 
begin 
   wFormatTag := WAVE_FORMAT_PCM; 
   nChannels := Mono; 
   nSamplesPerSec := SampleRate; 
   wBitsPerSample := $0008; 
   nBlockAlign := (nChannels * wBitsPerSample) div 8; 
   nAvgBytesPerSec := nSamplesPerSec * nBlockAlign; 
   cbSize := 0; 
end; 
MS := TMemoryStream.Create; 
with MS do 
begin 
   {Calculate length of sound data and of file data} 
   DataCount := (Duration * SampleRate) div 1000; // sound data 
   RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) + 
     SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; // file data 
   {write out the wave header} 
   Write(RiffId[1], 4); // 'RIFF' 
   Write(RiffCount, SizeOf(DWORD)); // file data size 
   Write(WaveId[1], Length(WaveId)); // 'WAVE' 
   Write(FmtId[1], Length(FmtId)); // 'fmt ' 
   TempInt := SizeOf(TWaveFormatEx); 
   Write(TempInt, SizeOf(DWORD)); // TWaveFormat data size 
   Write(WaveFormatEx, SizeOf(TWaveFormatEx)); // WaveFormatEx record 
   Write(DataId[1], Length(DataId)); // 'data' 
   Write(DataCount, SizeOf(DWORD)); // sound data size 
   {calculate and write out the tone signal} // now the data values 
   w := 2 * Pi * Frequency; // omega 
   for i := 0 to DataCount - 1 do 
   begin 
     SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate)); // wt = w * i / SampleRate 
     Write(SoundValue, SizeOf(Byte)); 
   end; 
   {now play the sound} 
   sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC); 
   MS.Free; 
end; 
end;  
// How to call the function: 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
MakeSound(1200, 1000, 60); 
end;Джентельмен писал(а):есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???
pupsik писал(а):https://github.com/fredvs/uos
Снег Север писал(а):http://wiki.lazarus.freepascal.org/ACS
ACS is an freeware crossplatform set of components designed to perform different sound-processing tasks. It supports reading the audio data from CD, different fileformats at example wav,mp3,wma,ogg,mac and others, output to soundcard and files are sure also possible.
Снег Север писал(а):В СТ уже установлена.
используйте стандартный (в вики есть) способ.20 килобайтной мидишки
kotompazb писал(а):А как ее скачать-то?
kotompazb писал(а):Извиняюсь. А это что?
pupsik писал(а):Возможно у вас такое сообщение из-за битности.
Джентельмен писал(а):есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1