0

現在、ユーザーが自分の声を 30 秒以内で録音できるようにしています。音声の録音が終了したら、音声の長さを取得します。この簡単な計算 (SixtySeconds-TheirAudioDuraion) = TimeNeededToFill を実行します。基本的には、最終的に正確な 1 分間のトラックで終わる必要があります。一部は実際のオーディオで、残りはサイレント オーディオです。現在、AVAudioPlayer を使用してすべてのオーディオ録音を行っています。これを達成するためのプログラム的な方法と、サイレントオーディオトラックファイルをまとめて単一のファイルを作成するブルートフォースハックはありますか?

シンプルな輝きが必要であり、高く評価されます。

すべての人に私のベスト。

4

2 に答える 2

2

これは、 を使用してかなり簡単に実行できますAVMutableComposionTrack insertEmptyTimerange

// Create a new audio track we can append to
AVMutableComposition* composition = [AVMutableComposition composition];
AVMutableCompositionTrack* appendedAudioTrack = 
    [composition addMutableTrackWithMediaType:AVMediaTypeAudio
                             preferredTrackID:kCMPersistentTrackID_Invalid];

// Grab the audio file as an asset
AVURLAsset* originalAsset = [[AVURLAsset alloc]
    initWithURL:[NSURL fileURLWithPath:originalAudioPath] options:nil];

NSError* error = nil;

// Grab the audio track and insert silence into it
// In this example, we'll insert silence at the end equal to the original length 
AVAssetTrack *originalTrack = [originalAsset tracksWithMediaType:AVMediaTypeAudio];
CMTimeRange timeRange = CMTimeRangeMake(originalAsset.duration, originalAsset.duration);
[appendedAudioTrack insertEmptyTimeRange:timeRange];

if (error)
{
    // do something
    return;
}

// Create a new audio file using the appendedAudioTrack      
AVAssetExportSession* exportSession = [AVAssetExportSession
                                       exportSessionWithAsset:composition
                                       presetName:AVAssetExportPresetAppleM4A];
if (!exportSession)
{
    // do something
    return;
}


NSString* appendedAudioPath= @""; // make sure to fill this value in    
exportSession.outputURL = [NSURL fileURLWithPath:appendedAudioPath];
exportSession.outputFileType = AVFileTypeAppleM4A; 
[exportSession exportAsynchronouslyWithCompletionHandler:^{

    // exported successfully?
    switch (exportSession.status)
    {
        case AVAssetExportSessionStatusFailed:
            break;
        case AVAssetExportSessionStatusCompleted:
            // you should now have the appended audio file
            break;
        case AVAssetExportSessionStatusWaiting:
            break;
        default:
            break;
    }
    NSError* error = nil;

}];
于 2013-04-16T15:40:13.320 に答える
0

すでに「録音」されている無音の 60 秒の録音を作成し、それをユーザーの録音に追加してから、合計の長さを 60 秒にトリミングします。

このSOの質問avaudiorecorder-avaudioplayer-append-recording-to-file には、Siddarthの回答にサウンドファイルを追加することへの参照がいくつかあります。

この SO question trim-audio-with-iosには、サウンドファイルのトリミングに関する情報が含まれています。

于 2012-04-20T19:21:06.373 に答える