• 录制音频


    #import <UIKit/UIKit.h>
    #import <AVFoundation/AVFoundation.h>
    
    @interface ViewController : UIViewController<AVAudioPlayerDelegate, AVAudioRecorderDelegate>
    {
        BOOL _newRecordingAvailable;
    }
    
    @property (weak, nonatomic) IBOutlet UILabel *averageLabel;
    @property (weak, nonatomic) IBOutlet UILabel *peakLabel;
    @property (strong, nonatomic) AVAudioPlayer *player;
    @property (strong, nonatomic) AVAudioRecorder *recorder;
    @property (weak, nonatomic) IBOutlet UIButton *recordButton;
    @property (weak, nonatomic) IBOutlet UIButton *playButton;
    @property (strong, nonatomic) NSString *recordedFilePath;
    
    - (IBAction)toggleRecording:(id)sender;
    - (IBAction)togglePlaying:(id)sender;
    
    @end
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    @synthesize recordButton = _recordButton;
    @synthesize playButton = _playButton;
    @synthesize averageLabel = _averageLabel;
    @synthesize peakLabel = _peakLabel;
    
    - (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags
    {
        if (flags == AVAudioSessionInterruptionOptionShouldResume)
        {
            [player play];
        }
    }
    
    - (void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder withOptions:(NSUInteger)flags
    {
        if (flags == AVAudioSessionInterruptionOptionShouldResume)
        {
            [recorder record];
        }
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup dafter loading the view, typically from a nib.
        self.recordedFilePath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"recording.wav"];
        NSURL *url = [[NSURL alloc] initFileURLWithPath:self.recordedFilePath];
        NSError *error;
        self.recorder = [[AVAudioRecorder alloc] initWithURL:url settings:nil error:&error];
        if (error)
        {
            NSLog(@"Error initializing recorder: %@", error);
        }
        self.recorder.meteringEnabled = YES;
        self.recorder.delegate = self;
        [self.recorder prepareToRecord];
        
        [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateLabels) userInfo:nil repeats:YES];
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)toggleRecording:(id)sender
    {
        if ([self.recorder isRecording])
        {
            [self.recorder stop];
            [self.recordButton setTitle:@"Record" forState:UIControlStateNormal];
        }
        else
        {
            [self.recorder record];
            [self.recordButton setTitle:@"Stop" forState:UIControlStateNormal];
        }
    }
    
    - (IBAction)togglePlaying:(id)sender
    {
        if (self.player.playing)
        {
            [self.player pause];
            [self.playButton setTitle:@"Play" forState:UIControlStateNormal];
        }
        else if (_newRecordingAvailable)
        {
            NSURL *url = [[NSURL alloc] initFileURLWithPath:self.recordedFilePath];
            NSError *error;
            self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
            if (!error)
            {
                self.player.delegate = self;
                [self.player play];
            }
            else
            {
                NSLog(@"Error initializing player: %@", error);
            }
            [self.playButton setTitle:@"Pause" forState:UIControlStateNormal];
            _newRecordingAvailable = NO;
        }
        else if (self.player)
        {
            [self.player play];
            [self.playButton setTitle:@"Pause" forState:UIControlStateNormal];
        }
    }
    
    -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
    {
        [self.playButton setTitle:@"Play" forState:UIControlStateNormal];
    }
    
    - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
    {
        _newRecordingAvailable = flag;
        [self.recordButton setTitle:@"Record" forState:UIControlStateNormal];
    }
    
    -(void)updateLabels
    {
        [self.recorder updateMeters];
        self.averageLabel.text = [NSString stringWithFormat:@"%f", [self.recorder averagePowerForChannel:0]];
        self.peakLabel.text = [NSString stringWithFormat:@"%f", [self.recorder peakPowerForChannel:0]];
    }
    
    @end
  • 相关阅读:
    字符集WideCharToMultiByte
    [HDF]hdf-4.2.6类库的使用
    [GDAL]读取HDF格式的calipso数据
    C#读写BitMap及颜色相乘
    [Slimdx]顶点和索引缓冲,绘制了2个分离的三角形
    [GDAL]写入shp
    几个环境学概念
    MIConvexHull
    几个力学概念
    [转载]如何破解Excel VBA密码
  • 原文地址:https://www.cnblogs.com/fengmin/p/5526188.html
Copyright © 2020-2023  润新知