iphone - 我想要一个 5 分钟 300kb 的音频文件

标签 iphone ios objective-c avaudioplayer audio-recording

我附上了我实现的记录数据的方法,它保存在 .wav 格式中,但我的问题是文件占用的大小太大(即 10 秒占用 86kb ), 我想要 5mints 300kb 的大小,我试了很多方法,你能帮帮我吗?

- (IBAction) startRecording
{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    NSError *err = nil;
    [audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
    if(err){
        NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        return;
    }
    [audioSession setActive:YES error:&err];
    err = nil;
    if(err){
        NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        return;
    }


recordSetting = [[NSMutableDictionary alloc] init];
    [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
    [recordSetting setValue:[NSNumber numberWithInt:8] forKey:AVLinearPCMBitDepthKey];
    [recordSetting setValue:[NSNumber numberWithBool:NX_BigEndian == NXHostByteOrder()] forKey:AVLinearPCMIsBigEndianKey];
    [recordSetting setValue:[NSNumber numberWithBool:0] forKey:AVLinearPCMIsFloatKey];
recorderFilePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"abc.wav"] ;

    NSLog(@"recorderFilePath: %@",recorderFilePath);

    NSURL *url = [NSURL fileURLWithPath:recorderFilePath];


    err = nil;

    NSData *audioData = [NSData dataWithContentsOfFile:[url path] options: 0 error:&err];
    if(audioData)
    {
        NSFileManager *fm = [NSFileManager defaultManager];
        [fm removeItemAtPath:[url path] error:&err];
    }

    err = nil;
    recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];
    if(!recorder){
        NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        UIAlertView *alert =
        [[UIAlertView alloc] initWithTitle: @"Warning"
                                   message: [err localizedDescription]
                                  delegate: nil
                         cancelButtonTitle:@"OK"
                         otherButtonTitles:nil];
        [alert show];
        }

    //prepare to record
    [recorder setDelegate:self];
    [recorder prepareToRecord];
    recorder.meteringEnabled = YES;

    BOOL audioHWAvailable = audioSession.inputIsAvailable;
    if (! audioHWAvailable) {
        UIAlertView *cantRecordAlert =
        [[UIAlertView alloc] initWithTitle: @"Warning"
                                   message: @"Audio input hardware not available"
                                  delegate: nil
                         cancelButtonTitle:@"OK"
                         otherButtonTitles:nil];
        [cantRecordAlert show];

        return;
    }

    [recorder record];
 currentTimeUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.5
                                                              target:self selector:@selector(updateAudioDisplay)
                                                            userInfo:NULL repeats:YES];


}

非常感谢。

最佳答案

将格式 ID 更改为 kAudioFormatAppleIMA4kAudioFormatMPEG4AAC。这些将产生较小的音频文件。评论中提到的 WAV 是一种未压缩的音频格式。所以音频文件的大小会很大。

关于iphone - 我想要一个 5 分钟 300kb 的音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15248372/

相关文章:

ios - 为每个 iPhone 型号提交单独的 IPA

iphone - 在 iPhone 模拟器中从硬盘读取文件

ios - 如何访问 JSON 数据并将其显示在 XCode Logcat 中,如果响应为空,我想显示警报

ios - 如何检查是否安装了特定应用程序?

objective-c - 两个类之间的 IBOutlets 属性不保留。解除分配?

ios - UITableViewCell 中的角标(Badge) View

如果应用程序以 iPhone 横向启动,iOS 13 应用程序窗口会在 iPhone 上错误地旋转

iphone - 表格 View 不显示数据,iphone

ios - 如何让我所有的自动布局约束自行更新? (例如,当用户更新他们的系统大小/动态类型时)?

ios - 如何在现有项目中使用尺寸类自适应布局