0

のバイトを逆にしたい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];
4

3 に答える 3

3

サウンドデータのバイトストリームには特定の形式があるため、ビットの順序を逆にするだけでは機能しません。バイトストリーム全体ではなく、サンプルを逆にする必要があります。ただし、「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);
于 2012-08-01T14:07:47.763 に答える
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;
}
于 2013-04-30T18:30:31.780 に答える
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];
}
于 2014-11-26T15:00:54.690 に答える