AudioKit 滚动波形图未显示在物理设备上

AudioKit rolling waveform plot not displaying on physical device

我一直在尝试使用 AudioKit 并制作了一个示例应用程序来尝试绘制录制音频和回放音频。不过,我发现一个问题,当我录制或播放音频时,滚动波形不会显示在设备的视图中。然而,它在 sim (11.4) 上显示得非常好。我在下面提供了录制视图控制器代码,以了解我在录制音频时如何尝试实现它。

任何帮助或指出大体方向将不胜感激。

RecordingVC.m代码:

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self setupConfig];
    [self setupUI];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void) setupUI
{
    //Configure waveform view
    self.recordingPlotView.gain = 2;
    self.recordingPlotView.backgroundColor = [UIColor colorWithRed: .10 green: .10 blue: .10 alpha: 1];
    self.recordingPlotView.color = [UIColor colorWithRed: .44 green: .44 blue: .44 alpha: 1];
    self.recordingPlotView.plotType = EZPlotTypeRolling;
    self.recordingPlotView.shouldFill = YES;
    self.recordingPlotView.shouldMirror = YES;
    [self.view addSubview: self.recordingPlotView];
}

- (void) setupConfig
{
    self.isRecording = NO;
    [AKSettings setAudioInputEnabled: true];
    [AKSettings setPlaybackWhileMuted: true];
    [AVAudioSession.sharedInstance setCategory: AVAudioSessionCategoryAmbient withOptions: kAudioSessionProperty_OverrideCategoryDefaultToSpeaker error: nil];

    self.mic = [[EZMicrophone alloc] initWithMicrophoneDelegate: self];
}

#pragma mark - EZMicrophone Delegate methods
- (void)   microphone:(EZMicrophone *)microphone
     hasAudioReceived:(float **)buffer
       withBufferSize:(UInt32)bufferSize
 withNumberOfChannels:(UInt32)numberOfChannels
{
    __weak typeof (self) weakSelf = self;
    dispatch_async(dispatch_get_main_queue(), ^{

        [weakSelf.recordingPlotView updateBuffer:buffer[0]
                                   withBufferSize:bufferSize];
    });
}

- (void)   microphone:(EZMicrophone *)microphone
        hasBufferList:(AudioBufferList *)bufferList
       withBufferSize:(UInt32)bufferSize
 withNumberOfChannels:(UInt32)numberOfChannels
{
    if (self.isRecording)
    {
        [self.recorder appendDataFromBufferList:bufferList
                                 withBufferSize:bufferSize];
    }
}

#pragma mark - EZRecorder Delegate methods
- (void)recorderDidClose:(EZRecorder *)recorder
{
    self.recorder.delegate = nil;
}

#pragma mark - Utils
- (NSArray *)applicationDocuments
{
  return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
}


- (NSString *)applicationDocumentsDirectory
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}

- (NSURL *)testFilePathURL
{
    return [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",
                                   [self applicationDocumentsDirectory],
                                   @"test2.m4a"]];
}

#pragma mark - user Interaction

- (IBAction)playButtonTapped:(id)sender {
    if (self.isRecording)
    {
        self.isRecording = NO;
        self.playButton.titleLabel.text = @"Record";
        [self.mic stopFetchingAudio];
    }
    else
    {
        self.isRecording = YES;
        self.playButton.titleLabel.text = @"Pause";
        [self.mic startFetchingAudio];
        self.recorder = [EZRecorder recorderWithURL: [self testFilePathURL] clientFormat: [self.mic audioStreamBasicDescription] fileType: EZRecorderFileTypeM4A delegate: self];
    }
}
- (IBAction)stopButtonTapped:(id)sender {
    if (self.isRecording)
    {
        self.isRecording = NO;
        self.playButton.titleLabel.text = @"Record";
        [self.mic stopFetchingAudio];
        [self.recorder closeAudioFile];
    }
    [self.recordingPlotView clear];
    self.recorder = nil;
}

@end

RecordingVC.h代码:

#import <UIKit/UIKit.h>
@import AudioKit;
@import AudioKitUI;

@interface FirstViewController : UIViewController <EZMicrophoneDelegate, EZRecorderDelegate>

@property (strong, nonatomic) IBOutlet EZAudioPlot *recordingPlotView;
@property (nonatomic, strong) EZMicrophone* mic;
@property (nonatomic, strong) EZRecorder* recorder;
@property (nonatomic, assign) BOOL isRecording;
@property (strong, nonatomic) IBOutlet UIButton *playButton;

@end

小更新: 我已经设法通过在界面生成器中设置增益来在设备上显示播放波形,即使我在 viewDidLoad() 期间在代码中设置它也是如此。

我试过为录音VC(上面的代码)做同样的事情(在界面生成器中设置绘图的增益),但这确实解决了这个问题,就像它对回放所做的那样VC.

我 运行 你的项目,它在设备上的工作方式与模拟器相同,除了模拟器的麦克风是计算机的,而且似乎比设备上的更敏感,所以我不得不将增益设置得更高:

self.recordingPlotView.gain = 20;

在我注意到波形之前