ورود

View Full Version : ضبط صدا



_abiriamir
دوشنبه 15 تیر 1388, 20:29 عصر
با سلام
من قبلا کد زیر را راجع به ضبط صدا با دلفی از بچه های همین سایت گرفتم
وقتی با این ضبط میکنم یا با کامپوننت KDTele صدای یک نفر رو ضبط میکنم دیگه ویندوز مدیاپلیر بازش نمیکنه
ولی وقتی صدا با همون مشخصات رو با Sound Recorder ویندوز ضبط میکنم این مشکل رو مشاهده نمیکنم . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

procedure TForm1.btnStopStartRecClick(Sender: TObject);
begin
if btnStopStartRec.Caption = 'Record' then begin
btnStopStartRec.Caption := 'Stop';
mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mySound',nil,0,Handle);
mciSendString('SET mySound ' +
'TIME FORMAT MS ' +
'BITSPERSAMPLE 16 ' +
'CHANNELS 1 ' +
'SAMPLESPERSEC 8000 ' +
'BYTESPERSEC 14000 ' +
'ALIGNMENT 4',
nil,0,handle);
mciSendString('RECORD mySound',nil,0,Handle);
end else begin
btnStopStartRec.Caption := 'Record';
mciSendString('STOP mySound',nil,0,Handle);
mciSendString('SAVE mySound "C:\First8bitMono.wav"',nil,0,Handle);
mciSendString('CLOSE mySound',nil,0,Handle);
end;
end;

Saeed_m_Farid
چهارشنبه 17 تیر 1388, 12:31 عصر
با سلام
من قبلا کد زیر را راجع به ضبط صدا با دلفی از بچه های همین سایت گرفتم
وقتی با این ضبط میکنم یا با کامپوننت KDTele صدای یک نفر رو ضبط میکنم دیگه ویندوز مدیاپلیر بازش نمیکنه


سلام
احتمالاً این فایل رو فقط ویندوز مدیاپلیر پخش نمی کنه! چون من با winamp و jetaudio گوش کردم، این مشکل مطمئناً از هدر فایل ضبط شده است، که با توجه به انعطاف پذیر نبودن مدیاپلیر برای تصحیح خطای هدر از طریق این نرم افزار قابل پخش نیست ...

یه توضیحاتی در مورد فرمت فایل صوتی :


ساده ترین فایل صوتی : 8 بیت alaw مونو است که همه چی بصورت صفر و یک بدون هیچ نوع انکودینگ ذخیره میشه؛ تمام فرکانسهای آنالوگ با sample rate 8 نمونه برداری میشه، هرچقدر این مقدار هر نمونه برداری بالاتر بره کیفیت بالاتر رفته و بالطبع حجم فایل (بدون انکودینگ) هم افزایش پیدا میکنه؛ یعنی یه چیزی مثل شکل زیر (اولی 8 بیت و دومی 16 بیت نمونه برداری میشن) :


http://img.tfd.com/cde/SAMPLE.GIF


حالا نرم افزارهایی که قراره این فایل رو پخش کنند باید بدونن که فایل موردنظر با چه فرمتی دخیره و نمونه برداری شده، و WaveForm باید حتماً تعیین بشه، برای این منظور اولِ فایل موردنظر، مشخصات فایل ضبط شده قرار داده میشه.



برای نمونه ای از سرآمد فایلهای صوتی، ساده ترین حالت رو درنظر میگیریم یعنی : فرمت PCM با Sample Rate هشت بیتیِ مونو؛ برای این فرمت به هدر 58 بایتی اول اطلاعات خامِ (صفر و یک های معادل آنالوگ) ضبط شده قرار میگیره که برای پلیر قابل فهم باشه (البته نرم افزارهایی مثل CoolEdit قادرند فقط با دادن مشخصات فایل خام یه هدر بافر کرده و به فایل اضافه و پخشش کنند)؛ 58 بایت سرآمد این فرمت (8 بیت مونو با Sample Rate 8) بصورت زیر است :


szHeader: Array[0..58-1] Of Byte = (
$52,$49,$46,$46,$24,$00,$00,$00,$57,$41,
$56,$45,$66,$6D,$74,$20,$12,$00,$00,$00,
$06,$00,$01,$00,$40,$1F,$00,$00,$40,$1F,
$00,$00,$01,$00,$08,$00,$00,$00,$66,$61,
$63,$74,$04,$00,$00,$00,$07,$1D,$00,$00,
$64,$61,$74,$61,$07,$1D,$00,$00);
شما میتونین برای امتحان مشخصات رو موقع ضبط به ساده ترین صورت (که ذکر شد) قرار بدین و هدر رو با این که بالا گذاشتم مقایسه کنید.


اگه میخواین از هدر فایل مطمئن بشید، هدر هر دو تا فایل ضبط شده (اونی که پخش میشه و اون که مورد داره) رو با یه نرم افزاری که قابلیت باز کردن فایلهای باینری داره (مثل UltraEdit) باز کنید و هدرهاشون رو مقایسه کنید، اگه با یه ویرایشگر معمولی باز کنید (مثل نوت پد) یه شروعی مثل این دارن : RIFF„m WAVEfmt : حالا یه کم اینور اونور!


اگه مایل بودین ادامه میدیم ...

davodsharif
چهارشنبه 17 تیر 1388, 13:33 عصر
دوست عزيز اگه بخوام يه فايل wav رو معكوس ، نرمال و اكو كنم ميتوني كمكم كني

raravaice
چهارشنبه 17 تیر 1388, 13:55 عصر
ساده ترین فایل صوتی : 8 بیت alaw مونو است که همه چی بصورت صفر و یک بدون هیچ نوع انکودینگ ذخیره میشه؛ تمام فرکانسهای آنالوگ با sample rate 8 نمونه برداری میشه، هرچقدر این مقدار هر نمونه برداری بالاتر بره کیفیت بالاتر رفته و بالطبع حجم فایل (بدون انکودینگ) هم افزایش پیدا میکنه؛ . . .



راجع به کدک های دیگه چه اطلاعاتی دارید؟
gsm یا ulaw

موفق باشید

Saeed_m_Farid
چهارشنبه 17 تیر 1388, 14:44 عصر
دوست عزيز اگه بخوام يه فايل wav رو معكوس ، نرمال و اكو كنم ميتوني كمكم كني
میتونین از برنامه های command line که برای اینکار فراهم شدن استفاده کنید، ولی اگه خودتون میخواید الگوریتمهای نرمالایز، ریورس یا اکو رو پیاده سازی کنید خیلی راه طولانی ای در پیش دارید!
مخصوصاً نرمالایز که بحث داغی در سطح ارشد و دکترا هست و تکنیکهای متنوع آستانه گذاری برای فرکانسهای مناسب شنوایی و بهترین نتیجه برای بهبود کیفیت سیگنال و کاهش نویز پیشنهاد شده که اولاً اینجا قابل ارائه نیست و از طرف دیگه بنده سواد ریاضی اینکار رو ندارم.
بیشتر مربوط به هوش مصنوعی و ریاضی میشه تا برنامه نویسی.

یه نمونه از این برنامه ها رو میتونید اینجا (http://listento.jaketolbert.com/church/command-line-noise-reduction/)ببینید. البته همونطورکه تو پست قبلی گفتم، خود من از CoolEdit 2.0 واسه اینکارها و اعمال مشابه (تبدیلات SampleRate و BitRate , ...) استفاده میکنم، که اکثر نیازهای منو جواب میده.

Saeed_m_Farid
چهارشنبه 17 تیر 1388, 16:50 عصر
راجع به کدک های دیگه چه اطلاعاتی دارید؟
gsm یا ulaw

موفق باشید
جناب raravaice امیدوارم مشکلاتی اگه دارم تذکر بدین و اینو به حساب درس پس دادن بذارید :
μ-law و gsm دو کدک صوتی برای فشرده سازی صوتی هستن، که اجمالاً سعی می کنم توضیحی در موردشون بدم :


μ-law : کدک صوتی که بیشتر تو ارتباطات دیجیتالی آمریکا (ایالات متحده) و ژاپن کاربرد داره و همانند الگوریتم a-law (رایج در کشور ما و اروپا و ...) برای تبدیل و حمل سیگنالهای آنالوگ روی خطوط E1 بکار برده میشه. این کدک رشته های بیتی kbit/s 64 از نمونه های 8 کیلوهرتزی آنالوگ درست میکنه (البته نسخه دیگه ای ازش هست که از روی نمونه های 11 کیلوهرتزی رشته های 88.2 کیلو بیتی درست میکنه یعنی دارای بیت ریت 88.2 kbit/s هست) به عبارت دیگه نمونه لگاریتمی 8 بیتی از نمونه های 14 بیتی رمزگذاری میکنه (یعنی با یه فرمول لگاریتمی نمونه اصلی 8 بیتی رو رمز گذاری میکنه)، این استاندارد تحت عنوان G.711 (همون PCM ای که می شناسیم) توسط ITU-T تعریف شده و از فرمول http://upload.wikimedia.org/math/c/e/b/ceb05b0121eca5bdfa61c9280697ad4c.pngپیروی میکنه؛ خلاصه اش اینه که در این الگوریتم نمونه هایی که مقدار صفر دارن (محتویات بی ارزش صوتی) حذف میشن. این الگوریتم پیچیده تر از a-law هست و سعی میکنه وضوح بیشتری در محدوده دیجیتالی فراهم کنه (در مقابل a-law که در سطوح پایین تر سیگنال، صدا رو بیشتر کوانتیزه -رمزگذاری؟یابسته بندی دیجیتالی- میکنه و درنتیجه حجم و پهنای باند کمتری اشغال میشه) شکل زیر مقایسه ای بین الگوریتمهای a-law و μ-law و مقادیر کوانیتزه شده خروجی انجام میده : http://upload.wikimedia.org/wikipedia/en/f/fa/Ulaw_alaw.png
gsm : نسخه 6.10 از این کدک با همان توضیحات بالا مطابقت داره (یعنی چون انگشتام از فارسی نوشتن درد گرفتن، خلاصه میکنم!)، مثل μ-law این کدک هم با دو تا الگوریتم کار میکنه که به ترتیب با (BitRate) بیت ریت های 13 kbit/s و 18 kbit/s روی نمونه های 8 کیلوهرتزی و 11 کیلوهرتزی کار میکنن، با این تفاوت که حجم بسیار پایین تری نسبت به کدکهای قبل فراهم کرده و درنتیجه پهنای باند کمتری هم اشغال میکنن؛ بنابراین همونطورکه از اسمش پیداست بسیار مناسب شبکه های موبایل هست
ادامه اش بمونه واسه بعد : چون دهنم کف کرد، این داستان ادامه دارد ...

Saeed_m_Farid
چهارشنبه 17 تیر 1388, 17:17 عصر
یه مقایسه برای حجم یادم رفت انجام بدم:

اگه بخواهیم یه صوت یک دقیقه ای رو بدون فشرده سازی با مثلاً 44100 (صدای قابل قبول و استاندارد) نمونه در هر ثانیه و استریو ضبط کنیم، به چیزی حدود 10 مگابایت فضا نیاز داریم! برای اینکه :


16 بیت در هر نمونه *
44100 نمونه برای 1 ثانیه *
60 ثانیه برای 1 دقیقه *
2 کانال برای صدای استریو *

یعنی میشه 2 * 60 * 44,100 * 16 بیت = 84672000 بیت = 10584000 بایت = 10 مگابایت

بخاطر همینه که از MP3، GSM یا μ-law و A-law و سایر کدک ها استفاده می کنیم، و همونطورکه میدونید با این کدک ها یک دهم این هم فضا و پهنای باند استفاده نمیشه.

davodsharif
چهارشنبه 17 تیر 1388, 22:20 عصر
دوست عزيز در باره الگوريتم هاي معكوس ، نرمال و اكو و .... ميتوني منبع بهم معرفي كني

_abiriamir
جمعه 19 تیر 1388, 15:23 عصر
دوست عزیز
اول از شما تشکر میکنم و بعد باید بگم که یه جورایی نفهمیدم
یعنی نفهمیدم الان باید چجوری مشکلم رو حل کنم