1. ホーム
  2. iphone

録音と再生に AVFoundation フレームワークを使用する IOS (AVAudioSession、AVAudioRecorder、AVAudioPlayer)

2022-02-28 05:10:25

最近、WeChatのような音声送信、押すと録音、離すと録音終了のシンプルな機能を実装し、再生も可能です。

<スパン エフェクト


<スパン デモのダウンロードはこちら

http://download.csdn.net/download/rhljiayou/6535125

<スパン インポートが必要

#インポート <AVFoundation/AVFoundation.h>

このフレームワークの

AVAudioRecorder と AVAudioPlayer で録音と再生を行います。

以下は AVAudioRecorderの録音は、次のような場合に使用されます。

- (IBAction)downAction:(id)sender {
    //Press to record
    if ([self canRecord]) {

        NSError *error = nil;
        //must be tested on real machine, may crash on emulator
        recorder = [[AVAudioRecorder alloc] initWithURL:[NSURL URLWithString:playName] settings:recorderSettingsDict error:&error];
        
        if (recorder) {
            //whether to allow level meter refreshing, default is off
            recorder.meteringEnabled = YES;
            //create the file and prepare to record
            [recorder prepareToRecord];
            //Start recording
            [recorder record];
            
            //start the timer, in order to update the level
            timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(levelTimer:) userInfo:nil repeats:YES];
            
        } else
        {
            int errorCode = CFSwapInt32HostToBig ([error code]);
            NSLog(@"Error: %@ [%4.4s])" , [error localizedDescription], (char*)&errorCode);
            
        }
    }
   
}

- (IBAction)upAction:(id)sender {
    //release End recording
    
    //recording stops
    [recorder stop];
    recorder = nil;
    //end the timer
    [timer invalidate];
    timer = nil;
    //image reset
    soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:0]];
    
}


以下は AVAudioPlayerプレーヤーが使用されています。

- (IBAction)playAction:(id)sender {
    
    NSError *playerError;
    
    //play
    player = nil;
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:playName] error:&playerError];
    
    if (player == nil)
    {
        NSLog(@"ERror creating player: %@", [playerError description]);
    }else{
        [player play];
    }
    
}


7.0であれば 初回実行時に、マイクを許可するかどうかを確認する画面が表示されます。


7.0では、以下の設定が必要です。

if ([[UIDevice currentDevice] systemVersion] compare:@"7.0"] ! = NSOrderedAscending)
    {
        //7.0 will prompt for the first run, whether to allow the microphone
        AVAudioSession *session = [AVAudioSession sharedInstance];
        NSError *sessionError;
        //AVAudioSessionCategoryPlayAndRecord is used for recording and playback
        [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
        if(session == nil)
            NSLog(@"Error creating session: %@", [sessionError description]);
        else
            [session setActive:YES error:nil];
    }


OK! 完璧、PERFECT!


転載元 灰谷廉のブログ