簡體   English   中英

iOS:從AVAudioRecorder獲取音頻

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM