PDA

View Full Version : سوال: جاد بوق از بلندگوی کامپیوتر



kamran_14
جمعه 26 خرداد 1391, 09:11 صبح
سلام من این برنامه ای رو که براتون ضمیمه کردم در مورد ایجاد بوق از بلندگوی کامپیوتر است اما موقع اجرا خطا می ده من از error ش عکس گرفتم می شه این خطا رو رفع کنید؟
شاید این خطا به خاطر استاندارد نبودن فایل port.dll است
من مطمئن نیستم که این فایل dll برا vb یا delphi7
اگه فایل port.dll برا دلفی 7 داشتید می شه برام بذارید؟
ممنون می شم اگه کمکم کنید

Mask
شنبه 27 خرداد 1391, 17:10 عصر
میتونی از این روال استفاده کنی :

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;

BORHAN TEC
شنبه 27 خرداد 1391, 17:40 عصر
اگر می خواهید با پورت ها کار کنید به نظر من بهتره که از کامپوننت TComPort استفاده کنید که هم رایگان است و هم OpenSource که قابلیت کار با پورتهای مختلف از جمله USB را هم دارد. (البته اینرا برای آیندگان گفتم!)
این هم لینک دانلودش:
http://sourceforge.net/projects/comport/