在录制的音频文件末尾添加静音

时间:2012-04-20 19:01:47

标签: iphone ios cocoa-touch audio avaudioplayer

目前,我允许用户录制自己的语音,持续时间不超过30秒。一旦他们完成录制音频,我就会抓住他们的音频持续时间。我运行这个快速数学(SixtySeconds-TheirAudioDuraion)= TimeNeededToFill。基本上我需要最终得到精确的1分钟曲目。其中一部分是实际音频,其余部分是静音音频。我目前正在使用AVAudioPlayer来完成我的所有录音。是否有一种编程方式可以实现这一点而不是一些暴力黑客攻击,我开始将无声音轨文件一起塞进来创建单个文件?

需要简单的才华,我们将不胜感激。

我最擅长。

2 个答案:

答案 0 :(得分: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;

}];

答案 1 :(得分:0)

我将有60秒的静音录音已经“录制”,将其附加到用户录音,然后将总长度调整为60秒。

这个问题avaudiorecorder-avaudioplayer-append-recording-to-file提到了在Siddarth的答案中附加声音文件。

这个问题trim-audio-with-ios包含有关修剪声音文件的信息。