مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

ضبط و پخش صدا با فریم ورک AVFoundation در iOS


در این جلسه می خواهیم فریم ورک AVFoundation را به شما معرفی کنیم. iOS فریم ورک های مختلفی برای کار با  sound در اپ ها را فراهم نموده است. یکی از این فریم ورک ها که می توانیم از آن برای ضبط و پخش فایل صوتی استفاده کنیم ، فریم ورک AV Foundation می باشد. در این آموزش ، ما اصول اولیه از این فریم ورک را ارائه خواهیم کرد و به شما نحوه مدیریت ضبط و پخش صداها را نشان خواهیم داد.

جهت ارائه مثال در حین کار ، ما قصد داریم که یک اپ audio ساده بسازیم که به کاربران اجازه می دهد که صداها را ضبط و پخش نمایند. تمرکز اصلی ما بر نشان دادن نحوه عملکرد فریم ورک AV Foundation است ، از این رو ، رابط کاربری اپ بسیار ساده می باشد.

AV Foundation روش های بسیار ساده ای برای کار با صداها را فراهم می کند. در این آموزش ، ما با دو کلاس اصلی کار می کنیم:

  • AVAudioPlayer – این کلاس را به عنوان یک پخش کننده صوتی (audio player) در نظر می گیریم که فایل های صوتی را پخش می کند. با استفاده از پخش کننده ، ما می توانیم صداها را با هر حجمی و در هر فرمتی صوتی موجود در iOS پخش کنیم.
  • AVAudioRecorder – یک ضبط کننده صوتی برای ضبط کردن صداها می باشد.

 

شروع کار با تمپلت پروژه

قبل از همه ، ما یک پروژه با استفاده از تمپلت “Single View Application” می سازیم و نام آن را “AudioDemo” را قرار می دهیم. برای راحتی شما و خلاصی از تنظیمات رابط کاربری و کدنویسی ، می توانید تمپلت پروژه را از اینجا download the project template  دانلود کنید.

ما یک UI ساده برای شما طراحی کرده ایم که تنها شامل سه کلید “Record” ، “Stop” و “Play” است. کلیدها هم چنین با کدها لینک شده اند.

افزودن فریم ورک AVFoundation

به طور پیش فرض ، فریم ورک AVFoundation در پروژه Xcode وجود ندارد. از این رو ، باید آن را به صورت دستی به پروژه اضافه کنیم. در  Project Navigator بخش  “AudioDemo” پروژه را باز می کنیم. در Content Area ، زیر بخش Targets گزینه “AudioDemo” را انتخاب کرده و “Build Phases” را کلیک می کنیم. گزینه “Link Binary with Libraries” را بسط داده و روی کلید “+” برای افزودن فریم ورک “AVFoundation.framework” کلیک می کنیم.

برای استفاده از کلاس AVAudioPlayer  و AVAudioRecorder ، ما نیاز به import آنها به فایل ViewController.h داریم.

1

#import <AVFoundation/AVFoundation.h>

 

ضبط صدا با استفاده از کلاس AVAudioRecorder 

ابتدا ، بیایید ببینیم چگونه می توانیم از کلاس AVAudioRecorder  ، برای ضبط صدا استفاده کنیم. پروتکل AVAudioRecorderDelegate  و AVAudioPlayerDelegate  را در فایل ViewController.h اضافه می کنیم. در مورد این دو نماینده در حین انجام کدنویسی توضیح خواهیم داد.

@interface ViewController : UIViewController <AVAudioRecorderDelegate, AVAudioPlayerDelegate>

سپس ، متغیرهای نمونه برای AVAudioRecorder  و AVAudioPlayer  را در فایل ViewController.m اعلام می کنیم:

@interface ViewController () {
    AVAudioRecorder *recorder;
    AVAudioPlayer *player;
}

کلاس AVAudioRecorder  یک روش ساده برای ضبط صدا در iOS فراهم می کند. برای استفاده از recorder ، باید چند چیز را آماده کنیم:

  • مشخص کردن یک فایل URL صوتی
  • Setup کردن audio session (جلسه صوتی)
  • پیکربندی وضعیت اولیه recorder صوتی

ما عملیات setup را در متد “viewDidLoad” ار فایل ViewController.m انجام خواهیم داد. به سادگی متد را با کدهای زیر ویرایش می کنیم:

- (void)viewDidLoad
{
    [super viewDidLoad];
 
    // Disable Stop/Play button when application launches
    [stopButton setEnabled:NO];
    [playButton setEnabled:NO];
    
    // Set the audio file
    NSArray *pathComponents = [NSArray arrayWithObjects:
                               [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],
                               @"MyAudioMemo.m4a",
                               nil];
    NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];
    
    // Setup audio session
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
 
    // Define the recorder setting
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
    
    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
    [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
    
    // Initiate and prepare the recorder
    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
    recorder.delegate = self;
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];
}

نکته: به دلیل این که اپ ما آزمایشی می باشد ، از هندل کردن خطاها صرف نظر می کنیم. در اپ واقعی ، نباید هندل کردن خطاها ، فراموش شوند.

در کد بالا ، ما ابتدا فایل URL را برای ذخیره سازی صداهای ضبط شده ، تعریف می کنیم. سپس audio session را پیکربندی می کنیم. iOS رفتار صوتی یک اپ را با استفاده از audio session هندل می کند. به محض راه اندازی ، اپ به طور خودکار یک audio session دریافت می کند. ما می توانیم در اپ ، چنین session را با فراخوانی [AVAudioSession sharedInstance] به دست  بگیریم و آن را پیکربندی می نماییم. در اینجا ، ما به iOS می گوییم که اپ از دسته بندی “AVAudioSessionCategoryPlayAndRecord” استفاده می کند و ورودی ها و خروجی های صوتی را فعال می کند. ما وارد جزئیات audio session  نمی شویم ، اما شما می توانید برای کسب اطلاعات بیشتر به مرجع official document مراجعه نمایید.

AVAudioRecorder  از تنظیمات مبتنی بر دیکشنری (dictionary-based settings) برای پیکربندی خود استفاده می کند. در خط 21-25 ، ما از کلیدهای اختیاری برای پیکربندی فرمت داده های صوتی ، نرخ نمونه و تعداد کانال ها استفاده می کنیم. در آخر ، audio recorder را با فراخوانی متد “prepareToRecord:” مقداردهی اولیه می کنیم.

نکته: برای کسب اطلاعات بیشتر در مورد سایر کلیدهای تنظیمات ، می توانید به مرجع AV Foundation Audio Settings Constants مراجعه نمایید.

پیاده سازی کلید Record

ما آماده سازی عملیات صوتی را تکمیل کرده ایم. بیایید به بخش پیاده سازی متد action مربوط به کلید Record وارد شویم. قبل از این که وارد کدنویسی شویم ، اجازه دهید شرحی از نحوه کار کلید “Record” ارائه دهیم. هنگامی که کاربر روی کلید “Record” ضربه می زند ، اپ ضبط صدا را شروع خواهد کرد ، در ادامه این کلید به مقدار “Pause” تغییر می یابد. اگر کاربر کلید “Pause” را ضربه بزند ، اپ در عملیات ضبط صدا مکث ایجاد می کند ، تا زمانی که دوباره روی کلید “Record” ضربه زده شود. ضبط صدا ، فقط هنگامی متوقف خواهد شد که کاربر روی کلید “Stop” ضربه بزند.

متد “recordPauseTapped:” را با کد زیر ویرایش می کنیم:

- (IBAction)recordPauseTapped:(id)sender {
    // Stop the audio player before recording
    if (player.playing) {
        [player stop];
    }
    
    if (!recorder.recording) {
        AVAudioSession *session = [AVAudioSession sharedInstance];
        [session setActive:YES error:nil];
        
        // Start recording
        [recorder record];
        [recordPauseButton setTitle:@"Pause" forState:UIControlStateNormal];
 
    } else {
 
        // Pause recording
        [recorder pause];
        [recordPauseButton setTitle:@"Record" forState:UIControlStateNormal];
    }
 
    [stopButton setEnabled:YES];
    [playButton setEnabled:NO];
}

در کد بالا ، ما ابتدا بررسی می کنیم که آیا audio player در حال پخش صدا می باشد یا نه. اگر در حال پخش باشد ، ما به سادگی آن را با استفاده از متد “stop:” متوقف می کنیم. خط 7 از کد بالا تعیین می کند که آیا اپ در حالت recording است یا نه. اگر در حالت recording نباشد ، اپ audio session ها را فعال می کند و ضبط صدا را شروع می کند. برای ضبط صدا (یا پخش صدا) ، audio session باید فعال شود.

به طور کلی ، ما می توانیم از متدهای زیر از کلاس AVAudioRecorder  برای کنترل ضبط صدا استفاده کنیم:

  • record – شروع / ادامه دادن عملیات ضبط صدا
  • pause – ایجاد وقفه در عملیات ضبط صدا
  • stop – متوقف کردن عملیات ضبط صدا

پیاده سازی کلید Stop

برای کلید Stop ، ما به سادگی متد “stop:” را برای recorder فراخوانی می کنیم. سپس با غیرفعال کردن audio session کار را دنبال می کنیم. متد “stopTapped:” را با کد زیر ویرایش می کنیم:

- (IBAction)stopTapped:(id)sender {
    [recorder stop];
    
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setActive:NO error:nil];
}

پیاده سازی نماینده پروتکل AVAudioRecorderDelegate

ما می توانیم از نماینده پروتکل AVAudioRecorderDelegate برای هندل کردن وقفه های صوتی (مثلاً دریافت یک تماس تلفنی در حین ضبط صدا) و تکمیل عملیات ضبط صدا ، استفاده می کنیم. در این مثال ، ViewController یک نماینده است. متدهای تعریف شده در پروتکل AVAudioRecorderDelegate اختیاری هستند. در اینجا ، ما فقط متد “audioRecorderDidFinishRecording:” را برای هندل کردن ، تکمیل عملیات ضبط صدا ، پیاده سازی خواهیم کرد. کد زیر را در فایل ViewController.m اضافه می کنیم:

- (void) audioRecorderDidFinishRecording:(AVAudioRecorder *)avrecorder successfully:(BOOL)flag{
    [recordPauseButton setTitle:@"Record" forState:UIControlStateNormal];
    
    [stopButton setEnabled:NO];
    [playButton setEnabled:YES];    
}

بعد از اتمام عملیات ضبط صدا ، ما به سادگی کلید “Pause” را به کلید “Record” تغییر می دهیم.

پخش صدا با استفاده از AVAudioPlayer

در نهایت ، در این قسمت به پیاده سازی کلید “Play” برای پخش صدا با استفاده از AVAudioPlayer می رسیم. در فایل  ViewController.m ، متد “playTapped:” را با استفاده از کد زیر ویرایش می کنیم:

- (IBAction)playTapped:(id)sender {
    if (!recorder.recording){
        player = [[AVAudioPlayer alloc] initWithContentsOfURL:recorder.url error:nil];
        [player setDelegate:self];
        [player play];
    }
}

کد بالا بسیار ساده است. به طور معمول ، چند کار برای پیاده سازی audio player وجود دارد که باید انجام بدهیم:

  • مقداردهی اولیه audio player و تخصیص یک فایل صوتی به آن. در این مورد ، این فایل همان فایل صوتی برای عملیات ضبط صدا (یعنی recorder.url) می باشد.
  • تعیین یک شیء نماینده audio player ، که وقفه ها و هم چنین رویداد تکمیل پخش صدا را هندل می کند.
  • متد Call play: برای پخش فایل صوتی.

پیاده سازی پروتکل AVAudioPlayerDelegate 

نماینده یک شیء AVAudioPlayer  باید با پروتکل AVAudioPlayerDelegate  مطابقت داشته باشد. در این مورد ، این نماینده ، ViewController می باشد. نماینده به ما اجازه هندل کردن وقف ها ، خطاهای عملیات ضبط صدا و به روز رسانی رابط کاربری را در زمانی که عملیات ضبط صدا پایان یافته است ، می دهد. تمام متدهای پروتکل AVAudioplayerDelegate  اختیاری هستند. برای نشان دادن نحوه عملکرد آن ، ما متد “audioPlayerDidFinishPlaying:” را برای نمایش دادن یک هشدار که بعد از اتمام عملیات پخش صدا صادر می شود ، استفاده می کنیم. برای کاربرد سایر متدها ، می توانید به مرجع  official documentation of AUAudioPlayerDelegate protocol مراجعه نمایید.

کد زیر را به فایل ViewController.m اضافه می کنیم:

- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Done"
                               message: @"Finish playing the recording!"
                              delegate: nil
                     cancelButtonTitle:@"OK"
                     otherButtonTitles:nil];
    [alert show];
}

کامپایل و اجرا نمودن اپ

برای تست عملیات ضبط و پخش صدا می توانیم از یک دستگاه فیزیکی واقعی یا نرم افزار شبیه ساز استفاده نماییم. اگر اپ را با استفاده از دستگاه واقعی (یعنی آیفون) تست نماییم ، صدای ضبط شده از دستگاه متصل به میکروفون داخلی یا میکروفون هدست ، خارج می شود. از سوی دیگر ، اگر اپ را با استفاده از شبیه ساز تست کنیم ، صدا از سیستم پیش فرض صوتی دستگاه که در System Preference تنظیم شده است ، بیرون می آید.

بدین نحو ، کامپایل و اجرای اپ را دنبال می کنیم. روی کلید “Record” برای شروع عملیات ضبط صدا ، ضربه می زنیم. چند کلمه حرف می زنیم ، روی کلید “Stop” ضربه زده و سپس کلید “Play” را برای گوش دادن به صدای پخش شده ، انتخاب می کنیم.

فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 5 , تعداد قسمت ها: 221 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

در این فصل:-نمایش notification به کاربر زمانی که اتفاقاتی از قبیل لایک کردن پست و ... میافتد(این مبحث مبحثی مهم بوده و ج…

  توضیحات کلی دوره: با سلام خوش اومدین به حرفه ای ترین دوره ی Swift ابتدای کار ممکن است سوالی برای شما پیش آید: -من نیازی به ساخت اپلیکیشن اجتماعی ندارم چرا باید این دوره را ببینم؟ ج…
فصلِ: 7 , تعداد قسمت ها: 159 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

اپل نویس حرفه ای شوید... با این پکیج کسب درآمد میلیونی کنید....   در این پکیج به نکات ریز و درشت زیادی پرداختیم که خیلی خیلی میتونه به شما کمک کنه که تبدیل به برنامه نویس حرفه ای شوید... …
فصلِ: 12 , تعداد قسمت ها: 126 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

فصل 16 فصل آخرمون هست و میایم توی این فصل یه سری مباحث کوچیکی که جامونده و کارهای نهایی برای انتشار برنامه توی مایکت های…

با سلام نکته:هیچ نیازی به mac و یا iphone نیست... نکته:هیچ نیازی به بلد بودن برنامه نویسی از قبل نیست... مباحثی که توی این دوره مرور میکنیم میتونه ما رو از سطح صفر برنامه نویسی ios به صد …
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…
فصلِ: 5 , تعداد قسمت ها: 51 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش پرداخت درون برنامه ای بازار در یونیتی-اموزش خرید سکه در بازی-اموزش خرید مصرفی و غیر مصرفی…

توضیحات کلی مجموعه: آموزش مقدماتی تا پیشرفته یونیتی(ساخت بازی توپ چرخنده-اموزش بازی دوبعدی-اموزش بازی سه بعدی اول شخص شوتر-اموزش بازی سه بعدی رالی (ماشین سواری))   سرفصلهای دوره: نصب ی…
فصلِ: 2 , تعداد قسمت ها: 68 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت یک فروشگاه کوچک-آموزش کار با bottom navigation -آموزش کار با تب بار-آموزش کار با scrollview - آموزش کار با ان…

توضیحات کلی مجموعه: آموزش دوره فلاتر از پایه تا پیشرفته(این دوره به دوره متخصص فلاتر تغییر پیدا کرد) درسال های گذشته تعدا زیادی فریمورک معرفی شد که هرکدام تجربه خاص خودش رو داشت،اما فلاتر …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید