Отказ Новое в AVAudioRecorderIOS: Получить аудио из AVAudioRecorder
Что я делаю Я работаю над приложением, которое использует микрофон iPhone, чтобы записывать звук. После записи звука мне нужно преобразовать звук (должен быть AVAsset, правильно?) В NSData для отправки на наш сервер.
В чем проблема Проблема заключается в том, что я не уверен, как «получить» аудио, которое должно быть записано с помощью AVAudioRecorder. AVAudioRecorder имеет метод делегирования, который называется - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag
. Я бы ожидал, что на самом деле AVAsset, содержащий аудио, передаваемый из этого метода делегата, но это не так. То, что он дает, это объект aRecorder
, который имеет свойство .url
. Когда я NSLog url из пройденного aRecorder
, он появляется. На самом деле я могу NSLog длину файла в коде ниже:
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag
{
DLog (@"audioRecorderDidFinishRecording:successfully: %@",aRecorder);
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:aRecorder.url options:nil];
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
NSLog(@"asset length = %f", audioDurationSeconds); //Logs 7.051 seconds, so I know it's "there".
self.audioURL = aRecorder.url;
}
Проблема Когда я прохожу self.audioURL
к следующему ViewController-х self.mediaURL
и попытаться захватить файл из AssetLibrary (аналогично тому, как я делал раньше), актив не возвращается из AssetLibrary (несмотря на то, когда я po self.mediaURL
это действительно регистрирует правильный URL:.
if (self.mediaURL) {
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
[assetLibrary assetForURL:self.mediaURL resultBlock:^(ALAsset *asset) {
if (asset) {
// This block does NOT get called...
ALAssetRepresentation *rep = [asset defaultRepresentation];
Byte *buffer = (Byte*)malloc((long)rep.size);
NSUInteger buffered =[rep getBytes:buffer fromOffset:0.0 length:(long)rep.size error:nil];
NSMutableData *body = [[NSMutableData alloc] init];
body = [NSMutableData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];
[dataToSendToServer setObject:body forKey:@"audioData"];
}
} failureBlock:^(NSError *error) {
NSLog(@"FAILED TO ACCESS AUDIO FROM URL: %@!", self.mediaURL);
}];
}
else {
NSLog(@"NO AUDIO DATA!");
}
}
Потому что я новичок в AVAudioRecorder, возможно, я просто не проектированием этого потока правильно Может кто-нибудь помочь меня в получении электропривода al аудиоданных.
Спасибо!
Где находится этот файл, хранящийся в устройстве? И с 'self.audioURL', который я просматриваю, позволит мне получить доступ к фактическому файлу из любого места (из любого приложения на устройстве)? –
Вы решили местоположение файла, когда вы ввели AVAudioRecorder. Да, вы можете получить к нему доступ в своем приложении –
Так что я могу сделать что-то вроде 'NSData * audioData = [NSData dataWithContentsOfURL: self.mediaURL];' и это все, что мне нужно сделать, чтобы преобразовать его в NSData? –