Записывайте аудио прямо в NSData - PullRequest
1 голос
/ 12 октября 2011

Мне нужно записать звук и передать его напрямую в NSData. Я попытался сделать то же самое с AVAudioRecorder, но, к сожалению, он сохраняет запись в файл, и процесс занимает много времени для сохранения звука в файле и последующего чтения его в NSData, пожалуйста, помогите с некоторым кодированием, где я мог бы сохранить аудио непосредственно в объект NSData, заранее спасибо.

Мой код записи: `

printf("\nstart recording ...");
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] initWithCapacity:10];
[recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[recordSettings setValue:[NSNumber numberWithFloat:11400.0] forKey:AVSampleRateKey]; 
[recordSettings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[recordSettings setValue :[NSNumber numberWithInt:8] forKey:AVLinearPCMBitDepthKey];
[recordSettings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[recordSettings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
NSArray *arrayTempDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *soundFilePath = [[arrayTempDir objectAtIndex:0] stringByAppendingString: @"/sound.caf"];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:soundFilePath error:nil];
NSLog(@"\n%@",soundFilePath);
NSURL *newURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
NSError *error = nil;
audioRecorder = [[ AVAudioRecorder alloc] initWithURL:newURL settings:recordSettings error:&error];
NSLog(@"%@",error);
[audioRecorder setDelegate:self];
if ([audioRecorder prepareToRecord] == YES)
{
    audioRecorder.meteringEnabled = YES;
    [audioRecorder record];
    [NSTimer scheduledTimerWithTimeInterval:RECORDING_METERING target:self selector:@selector(stopRecording) userInfo:nil repeats:NO];
}
[recordSettings release];

`

Ответы [ 2 ]

0 голосов
/ 21 декабря 2012

Я хочу сделать то же самое прямо сейчас. Я наткнулся на Audio Queue Services - это API, который, очевидно, позволяет записывать аудио прямо в объекты.

Цитата из Документов:
Когда вы записываете с использованием Audio Queue Services, местом назначения может быть что угодно - файл на диске, сетевое соединение, объект в памяти и т. Д.

См. Документы:
http://developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html#//apple_ref/doc/uid/TP40005343-CH4-SW1

0 голосов
/ 12 октября 2011

API не позволит вам сделать это.Сколько времени у вас занимает чтение файла?Единственный способ, как я вижу, это регулярно показывать файл и добавлять все, что было добавлено к нему, в NSMutableData по мере продолжения записи (добавляя size_of_file - size_of_mutable_data каждый раз).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...