Mac OS X Простой диктофон - PullRequest
2 голосов
/ 12 ноября 2011

У кого-нибудь есть какой-нибудь пример кода для ПРОСТРАНСТВЕННОГО диктофона для Mac OS X? Я просто хотел бы записать свой голос, исходящий из внутреннего микрофона на моем MacBook Pro, и сохранить его в файл. Это все.

Я искал часы, и да, есть несколько примеров, которые запишут голос и сохранят его в файл, такой как http://developer.apple.com/library/mac/#samplecode/MYRecorder/Introduction/Intro.html. Пример кода для Mac OS X выглядит примерно в 10 раз сложнее, чем аналогичный пример кода для iPhone.

Для iOS команды так же просты:

soundFile =[NSURL FileURLWithPath:[tempDir stringByAppendingString:@"mysound.cap"]];
soundSetting = [NSDictionary dictionaryWithObjectsAndKeys: // dictionary setting code left out goes here
soundRecorder = [[AVAudioRecorder alloc] initWithURL:soundFile settings:soundSetting error:nil];
[soundRecorder record];
[soundRecorder stop];  

Я думаю, что для Mac OS X есть код, который будет таким же простым, как и версия для iPhone. Спасибо за вашу помощь.

Вот код (в данный момент плеер не будет работать)

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

@interface MyAVFoundationClass : NSObject <AVAudioPlayerDelegate>
{
    AVAudioRecorder *soundRecorder;

}

@property (retain) AVAudioRecorder *soundRecorder;

-(IBAction)stopAudio:(id)sender;
-(IBAction)recordAudio:(id)sender;
-(IBAction)playAudio:(id)sender;

@end


#import "MyAVFoundationClass.h"

@implementation MyAVFoundationClass

@synthesize soundRecorder;

-(void)awakeFromNib
{
    NSLog(@"awakeFromNib visited");
    NSString *tempDir;
    NSURL *soundFile;
    NSDictionary *soundSetting;

    tempDir = @"/Users/broncotrojan/Documents/testvoices/";
    soundFile = [NSURL fileURLWithPath: [tempDir stringByAppendingString:@"test1.caf"]];    
    NSLog(@"soundFile: %@",soundFile);

    soundSetting = [NSDictionary dictionaryWithObjectsAndKeys:
                    [NSNumber numberWithFloat: 44100.0],AVSampleRateKey,
                    [NSNumber numberWithInt: kAudioFormatMPEG4AAC],AVFormatIDKey,
                    [NSNumber numberWithInt: 2],AVNumberOfChannelsKey,
                    [NSNumber numberWithInt: AVAudioQualityHigh],AVEncoderAudioQualityKey, nil];

    soundRecorder = [[AVAudioRecorder alloc] initWithURL: soundFile settings: soundSetting error: nil];
}

-(IBAction)stopAudio:(id)sender
{
    NSLog(@"stopAudioVisited");
    [soundRecorder stop];
}

-(IBAction)recordAudio:(id)sender
{
    NSLog(@"recordAudio Visited");
    [soundRecorder record];

}

-(IBAction)playAudio:(id)sender
{
    NSLog(@"playAudio Visited");
    NSURL *soundFile;
    NSString *tempDir;
    AVAudioPlayer *audioPlayer;

    tempDir = @"/Users/broncotrojan/Documents/testvoices/";
    soundFile = [NSURL fileURLWithPath: [tempDir stringByAppendingString:@"test1.caf"]];  
    NSLog(@"soundFile: %@", soundFile);

    audioPlayer =  [[AVAudioPlayer alloc] initWithContentsOfURL:soundFile error:nil];

    [audioPlayer setDelegate:self];
    [audioPlayer play];

}

@end

Ответы [ 3 ]

4 голосов
/ 12 ноября 2011

Фреймворк AVFoundation является новым в Lion и очень похож на версию для iOS.Это включает в себя AVAudioRecorder.Вы можете использовать код от iOS с небольшими изменениями или без изменений.

Документы здесь .

0 голосов
/ 07 марта 2017

Вот фрагмент кода для Mac:

    NSDictionary *soundSetting = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithFloat: 44100.0],AVSampleRateKey,
                             [NSNumber numberWithInt: kAudioFormatMPEG4AAC],AVFormatIDKey,
                             [NSNumber numberWithInt: 2],AVNumberOfChannelsKey,
                             [NSNumber numberWithInt: AVAudioQualityHigh],AVEncoderAudioQualityKey, nil];

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSURL* audioFileURL = [NSURL fileURLWithPath: [documentsDirectory stringByAppendingString:@"/test.wav"]];

NSError* error;
AVAudioRecorder* soundRecorder = soundRecorder = [[AVAudioRecorder alloc] initWithURL: audioFileURL settings: soundSetting error: &error];

if (error)
{
    NSLog(@"Error!  soundRecorder initialization failed...");
}

// start recording
[soundRecorder record];
0 голосов
/ 09 июля 2013

Причина, по которой ваш код не воспроизводит звук, заключается в том, что переменная audioPlayer немедленно освобождается, как только она достигает конца блока метода.

Поэтому переместите следующую переменную за пределы блока метода,тогда он будет хорошо воспроизводить звук.

 AVAudioPlayer *audioPlayer; 

Кстати, ваш фрагмент кода был очень полезным для меня!: D

...