我想要反转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];
答案 0 :(得分:2)
简单地反转位的顺序将不起作用,因为声音数据的字节流具有特定格式。您需要反转样本,而不是整个字节流。然而,至于回答'如何反转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);
答案 1 :(得分:1)
我修复了上面的例子并进行了测试。 现在它可以用在一个类别中:
- (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;
}
答案 2 :(得分:0)
-(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];
}