ios - 修剪长度在音频修剪iOS中出现错误

标签 ios objective-c audio

因此,我有一个可以放大的波形应用程序。

然后打开修整控件以编辑波形。

当我按下编辑按钮时,修剪控件以一定的长度开始,如下所示:

-(IBAction)edit:(id)sender {

if (player.duration) {

_trimControl = [[RETrimControl alloc] initWithFrame:CGRectMake(0, 0, self.waveform.frame.size.width, self.waveform.frame.size.height/4)];

_trimControl.length = player.duration*((self.waveform.zoomEndSamples-self.waveform.zoomStartSamples)/self.waveform.totalSamples);

_trimControl.delegate = self;
[self.view addSubview:_trimControl];
[_trimControl setCenter:CGPointMake(self.waveform.center.x, self.waveform.center.y)];
}
}

这给了我正确的_trimControl.length。

但是,当我尝试在用户放大波形后重设长度时,对于完全相同的公式,它的值为0。

首先,我将UIPinchGestureRecognizer分配给我的波形 View ,以便在用户捏住波形时,将发生如下操作:
-(void)pinchEnd:(UIPinchGestureRecognizer*) gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateEnded && self.trimControl != nil) {

    [self resetTrim];
}
}

而resetTrim方法就是这样
-(void)resetTrim {

_trimControl.length = player.duration*((self.waveform.zoomEndSamples-self.waveform.zoomStartSamples)/self.waveform.totalSamples);


NSLog(@"This is how many zoomEndSamples %lu", self.waveform.zoomEndSamples);
NSLog(@"This is how many zoomStartSamples %lu", self.waveform.zoomStartSamples);
NSLog(@"This is how many zoomTotalSamples %lu", self.waveform.totalSamples);
NSLog(@"This is how many seconds %f", player.duration);
NSLog(@"This is the trimcontrol %ld", (long)self.trimControl.length);
}

这是我得到的NSLog读数:
This is how many zoomEndSamples 2202964
This is how many zoomStartSamples 1046166
This is how many zoomTotalSamples 3249152
This is how many seconds 73.629025
This is the trimcontrol 0

奇怪的是,如果我使用除self.trimControl.length以外的所有值,则计算可以正常进行。绝对不能为0。在上面的IBAction编辑中,它也不为零。

有什么想法我做错了吗?为什么self.trimControl.length的输出方式不同?

更新:

这就是我在ViewController.h文件中声明_trimControl的方式。
@property (strong, nonatomic) IBOutlet RETrimControl *trimControl;

最佳答案

我的猜测是您的实例变量_trimControl为零。起初它持有并反对,但是由于某种原因它被释放了。

尝试在两个地方都记录:

NSLog(@"_trimControl = %@", _trimControl);

如何声明trimControl属性?您在使用ARC还是手动引用计数?如果您使用的是手动引用计数,并且_trimControl创建为自动释放的,则可以在用户与用户界面交互时释放它。

使用有关如何定义trimControl属性以及如何对其进行初始化的更多信息来更新您的问题。

关于ios - 修剪长度在音频修剪iOS中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569037/

相关文章:

ios - self.extensionContext!.openURL 打开应用程序但不调用任何方法

ios - 保存特定于应用程序的数据,即使在应用程序删除后也能保留

ios - 如何删除 iOS 7 中的分隔线?

javascript - objective-c 中是否有 JavaScript apply like 方法?

ios - Ray Wenderlich 的 Mapkit 教程中的 SIGABRT

php - 在 PHP 中运行 Windows Speech SDK 应用程序

ios - 在单元格之间的 UICollectionView 中设置/覆盖填充

javascript - 在网络应用程序中检测 iPhone 4 vs 4s - PhoneGap

Java播放错误的声音频率

linux - 提取音频,再次操作和合并