首页 > 解决方案 > 在 AKAudioPlayer 中使用 AKAudioFile 和 replaceWith 会导致失真吗?

问题描述

我正在将 AudioKit 构建成一个实验心理学,添加测试内部感觉(内部身体感觉),现在它非常简单,我只有一个 AudioManager.m 类,它声明:

    @implementation AudioManager {
    AKAudioPlayer* player;
    bool canPlay;
}

    +(AudioManager *)sharedManager {
        static dispatch_once_t pred = 0;
        static AudioManager *instance = nil;
        dispatch_once(&pred, ^{
            instance = [[AudioManager alloc] init];
            [instance setup];
        });
        return instance;
    }

小玩家方法,例如:

-(NSError*)playHTTIntro {
    return [self playWavInResources:@"Htt1"];
}

然后从特定的视图控制器调用:

    -(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[AudioManager sharedManager] playHTTGuess];
}

我遇到的奇怪问题是,随着文件被调用和播放,增加的幅度和失真会累积

当我播放了 10 或 15 个文件时,语音音频文件几乎无法理解

playWavInResources以上实现为:

    -(NSError*)playWavInResources:(NSString*)wavName {
    if(player)
        [player stop];

    NSError* error;
    AKAudioFile* audioFile = [[AKAudioFile alloc] initForReading:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:wavName ofType:@"wav"]] error:&error];
    if(!error) {
        if(player)
            [player replaceWithFile:audioFile error:&error];
        else
            player = [[AKAudioPlayer alloc] initWithFile:audioFile looping:false lazyBuffering:false error:&error completionHandler:nil];
        AudioKit.output = player;

        // Start audio engine if not already
        NSError* error;
        [AudioKit startAndReturnError:&error];
        if(!error)
            [player start];
    }
    return error;
}

以前有没有人出现过这个问题?

标签: audiokit

解决方案


推荐阅读