Kambiz
دوشنبه 17 آذر 1382, 01:20 صبح
تابع زیر جزوی از Wave Audio Package (http://delphiarea.com/products/waveaudio/) هست که بصورت رایگان عرضه میشه و قراره که یک فرمت صدا از نوع PCM رو به یک فرمت PCM دیگه تبدیل کنه:
// Converts the wave data to the specified format (PCM format only). The caller is
// responsible to release the memory allocated for the converted wave data.
function ConvertWaveFormat(const srcFormat: PWaveFormatEx; srcData: Pointer; srcDataSize: DWORD;
const dstFormat: PWaveFormatEx; out dstData: Pointer; out dstDataSize: DWORD): Boolean;
begin
Result := False;
if (srcFormat^.wFormatTag = WAVE_FORMAT_PCM) and
(dstFormat^.wFormatTag = WAVE_FORMAT_PCM) and
not CompareMem(srcFormat, dstFormat, SizeOf(TWaveFormatEx)) then
begin
dstDataSize := srcDataSize;
dstDataSize := MulDiv(dstDataSize, dstFormat^.nChannels, srcFormat^.nChannels);
dstDataSize := MulDiv(dstDataSize, dstFormat^.wBitsPerSample, srcFormat^.wBitsPerSample);
dstDataSize := MulDiv(dstDataSize, dstFormat^.nSamplesPerSec, srcFormat^.nSamplesPerSec);
GetMem(dstData, dstDataSize);
// ToDo
Result := True;
end;
end;
حدود دو ماه میشه که میخوام این تابع رو کامل کنم ولی اصلا" دستم به کار نمیره. آخرش به این نتیجه رسیدم که از شما دوستان کمک بگیرم. کسی هست که حالش رو داشته باشه تا این تابع رو بنویسه؟
کد نوشته شده به نام شخص نویسنده در مستندات Package ثبت خواهد شد (یعنی کاری در جهت رضای خدا و خلق خدا). :)
ممنون. :oops:
// Converts the wave data to the specified format (PCM format only). The caller is
// responsible to release the memory allocated for the converted wave data.
function ConvertWaveFormat(const srcFormat: PWaveFormatEx; srcData: Pointer; srcDataSize: DWORD;
const dstFormat: PWaveFormatEx; out dstData: Pointer; out dstDataSize: DWORD): Boolean;
begin
Result := False;
if (srcFormat^.wFormatTag = WAVE_FORMAT_PCM) and
(dstFormat^.wFormatTag = WAVE_FORMAT_PCM) and
not CompareMem(srcFormat, dstFormat, SizeOf(TWaveFormatEx)) then
begin
dstDataSize := srcDataSize;
dstDataSize := MulDiv(dstDataSize, dstFormat^.nChannels, srcFormat^.nChannels);
dstDataSize := MulDiv(dstDataSize, dstFormat^.wBitsPerSample, srcFormat^.wBitsPerSample);
dstDataSize := MulDiv(dstDataSize, dstFormat^.nSamplesPerSec, srcFormat^.nSamplesPerSec);
GetMem(dstData, dstDataSize);
// ToDo
Result := True;
end;
end;
حدود دو ماه میشه که میخوام این تابع رو کامل کنم ولی اصلا" دستم به کار نمیره. آخرش به این نتیجه رسیدم که از شما دوستان کمک بگیرم. کسی هست که حالش رو داشته باشه تا این تابع رو بنویسه؟
کد نوشته شده به نام شخص نویسنده در مستندات Package ثبت خواهد شد (یعنی کاری در جهت رضای خدا و خلق خدا). :)
ممنون. :oops: