[英]Can AVAudioRecorder be used to record audio coming from your iOS app?
[英]iOS: Get Audio from AVAudioRecorder
免責聲明 AVAudioRecorder的新手
我正在做的事情是使用iPhone麥克風錄制聲音的應用程序。 錄制完聲音后,我需要將聲音(應該是AVAsset,對嗎?)轉換為NSData以發送到我們的后端。
問題是什么問題是我不確定如何“獲取”應該通過AVAudioRecorder錄制的音頻。 AVAudioRecorder有一個委托方法- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag
。 我本來希望包含從此委托方法傳遞的音頻的實際AVAsset,但事實並非如此。 它給我的是一個具有.url
屬性的aRecorder
對象。 當我NSLog從傳遞的aRecorder
的URL時,它顯示出來。 實際上,我可以在下面的代碼中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
並嘗試從self.mediaURL
抓取文件時(類似於我之前所做的操作),資產沒有從po self.mediaURL
返回(即使當我將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的新手,所以也許我只是沒有正確設計此流程。 任何人都可以幫助我獲得實際的音頻數據。
謝謝!
AVAudioRecorder記錄到文件,而不是資產庫。
因此,您可以簡單地從該文件中讀取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.