2

iPhoneのシステムオーディオをm4aファイルに直接録音するxCodeを探しています。具体的には、デバイスで再生しているオーディオファイルとマイクからの入力を同時に録音したいと思います。他のオーディオイベントを拾うリスクがあることを理解しており、録音を一時停止または停止したいと思います(たとえば、テキストを受信し、チャイムが鳴ります。...録音を停止したいと思います)。

4

2 に答える 2

1

AVAudioRecorderを使用できます

以下のコードはtechotopia.comから取得しました

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface RecordViewController : UIViewController
        <AVAudioRecorderDelegate, AVAudioPlayerDelegate>

@property (strong, nonatomic) AVAudioRecorder *audioRecorder;
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;
@property (strong, nonatomic) IBOutlet UIButton *recordButton;
@property (strong, nonatomic) IBOutlet UIButton *playButton;
@property (strong, nonatomic) IBOutlet UIButton *stopButton;
- (IBAction)recordAudio:(id)sender;
- (IBAction)playAudio:(id)sender;
- (IBAction)stop:(id)sender;

@end

AVAudioRecorder インスタンスの作成

- (void)viewDidLoad {
   [super viewDidLoad];
   _playButton.enabled = NO;
   _stopButton.enabled = NO;

   NSArray *dirPaths;
   NSString *docsDir;

   dirPaths = NSSearchPathForDirectoriesInDomains(
        NSDocumentDirectory, NSUserDomainMask, YES);
   docsDir = dirPaths[0];

    NSString *soundFilePath = [docsDir
       stringByAppendingPathComponent:@"sound.caf"];

   NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

   NSDictionary *recordSettings = [NSDictionary
            dictionaryWithObjectsAndKeys:
            [NSNumber numberWithInt:AVAudioQualityMin],
            AVEncoderAudioQualityKey,
            [NSNumber numberWithInt:16],
            AVEncoderBitRateKey,
            [NSNumber numberWithInt: 2],
            AVNumberOfChannelsKey,
            [NSNumber numberWithFloat:44100.0],
            AVSampleRateKey,
            nil];

  NSError *error = nil;

  _audioRecorder = [[AVAudioRecorder alloc]
                  initWithURL:soundFileURL
                  settings:recordSettings
                  error:&error];

   if (error)
   {
           NSLog(@"error: %@", [error localizedDescription]);
   } else {
           [_audioRecorder prepareToRecord];
   }
}

アクション メソッドの実装 - (IBAction)recordAudio:(id)sender { if (!_audioRecorder.recording) { _playButton.enabled = NO; _stopButton.enabled = YES; [_audioRecorder レコード]; } }

- (IBAction)playAudio:(id)sender {
    if (!_audioRecorder.recording)
    {
       _stopButton.enabled = YES;
       _recordButton.enabled = NO;

        NSError *error;

        _audioPlayer = [[AVAudioPlayer alloc]
        initWithContentsOfURL:_audioRecorder.url
        error:&error];

        _audioPlayer.delegate = self;

        if (error)
              NSLog(@"Error: %@",
              [error localizedDescription]);
        else
              [_audioPlayer play];
   }
}

- (IBAction)stop:(id)sender {
    _stopButton.enabled = NO;
    _playButton.enabled = YES;
    _recordButton.enabled = YES;

    if (_audioRecorder.recording)
    {
            [_audioRecorder stop];
    } else if (_audioPlayer.playing) {
            [_audioPlayer stop];
    }
}

デリゲート メソッドの実装

-(void)audioPlayerDidFinishPlaying:
(AVAudioPlayer *)player successfully:(BOOL)flag
{
        _recordButton.enabled = YES;
        _stopButton.enabled = NO;
}

-(void)audioPlayerDecodeErrorDidOccur:
(AVAudioPlayer *)player 
error:(NSError *)error
{
        NSLog(@"Decode Error occurred");
}

-(void)audioRecorderDidFinishRecording:
(AVAudioRecorder *)recorder 
successfully:(BOOL)flag
{
}

-(void)audioRecorderEncodeErrorDidOccur:
(AVAudioRecorder *)recorder 
error:(NSError *)error
{
        NSLog(@"Encode Error occurred");
}

詳細はこちら

于 2012-10-11T13:44:51.113 に答える
0

マイクとストリーミング オーディオの両方から同時にオーディオを録音しようとしたことはありませんが、前の回答は .m4a ではなく .caf ファイルに録音するものであり、AVAudioSession をセットアップしていないことに気付きました。以前に回答した同様の質問へのリンクを提供すると思いました:

AVAudioRecorder レコード AAC/m4a

AVAudioSession を設定すると、他のアプリケーション (電話アプリなど) がマイクとスピーカーの制御を取得し、アプリを一時停止できるようになることに注意してください。I use a Record session にリンクしたコードでは、両方のアクティビティを可能にするために、おそらく Playback と Record セッションを使用することをお勧めします。また、Apple からのこのドキュメントで説明されている通知を処理して、アプリが中断されたとき、または制御が返されたときに何が起こるかを処理できます。

http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html

これが完全な答えではないことは承知していますが、お役に立てば幸いです。

于 2012-10-11T21:38:40.463 に答える