【问题标题】:how to reverse order of NSMutableData如何反转 NSMutableData 的顺序
【发布时间】:2012-08-01 13:58:22
【问题描述】:

我想反转 NSMutableData 的字节。

我正在从音频文件生成 nsmutabledata 对象。并使用数据播放它。我的目的是反向播放音频。

如果我能反转NSMutableData,我就成功了。

这是我的代码

NSString *inputVideoPath = [[NSBundle mainBundle] pathForResource:@"chalne" ofType:@"mp3"];

NSMutableData *wave=[NSMutableData dataWithContentsOfURL:[NSURL fileURLWithPath:inputVideoPath]];

avPlayer = [[AVAudioPlayer alloc] initWithData:wave error:nil ];
[avPlayer prepareToPlay];
[avPlayer play];

【问题讨论】:

  • 这行不通。要反向播放,它还需要是一个音频文件(或片段),而不仅仅是一个反向字节数组。
  • 那么倒序播放的方法是什么...请给我一些代码示例...
  • 查看这篇文章,有一个关于如何做的例子:stackoverflow.com/questions/7373977/…

标签: iphone objective-c audio reverse nsmutabledata


【解决方案1】:

简单地颠倒位的顺序是行不通的,因为声音数据的字节流具有特定的格式。您需要反转样本,而不是整个字节流。但是,至于回答“如何反转 NSData 的字节”,这应该可以工作(打出来,可能有错别字):

NSData *myData;
const char *bytes = [myData bytes];
char *reverseBytes = malloc(sizeof(char) * [myData length]);
int index = [myData length] - 1;
for (int i = 0; i < [myData length]; i++)
    reverseBytes[index--] = bytes[i];
NSData *reversedData = [NSData dataWithBytes:reverseBytes length:[myData length]]
free(reverseBytes);

【讨论】:

  • 非常好的分析器,它可以反转数据,但正如您所建议的那样,它无法播放。请告诉我如何以相反的顺序播放音频文件。
【解决方案2】:

我修复了上面的示例并对其进行了测试。 现在它可以在一个类别中使用:

- (NSData*) reversedData
{
    NSData *myData = self;

    const char *bytes = [myData bytes];

    NSUInteger datalength = [myData length];

    char *reverseBytes = malloc(sizeof(char) * datalength);
    NSUInteger index = datalength - 1;

    for (int i = 0; i < datalength; i++)
        reverseBytes[index--] = bytes[i];

    NSData *reversedData = [NSData dataWithBytesNoCopy:reverseBytes length: datalength freeWhenDone:YES];

    return reversedData;
}

【讨论】:

    【解决方案3】:
    -(NSData *)reverseData
    {
        NSMutableData *data = [[NSMutableData alloc] init];
        for(int i = (int)self.length - 1; i >=0; i--){
            [data appendBytes: &self.bytes[i] length:1];
        }
        return [data copy];
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2021-11-18
      • 2021-11-17
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      相关资源
      最近更新 更多