2012-08-01 4 views
0

Я хочу изменить байты NSMutableData.как изменить порядок 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]; 
+2

Он не будет работать. Для воспроизведения в обратном направлении также должен быть аудиофайл (или сегменты), а не только обратный байтовый массив. – Templar

+0

Тогда как играть в обратном порядке ... Можете ли вы дать мне пример кода, пожалуйста ... –

+1

Отметьте это сообщение, есть пример о том, как это сделать: http: // stackoverflow. com/questions/7373977/object-c-ios-whats-the-simple-way-to-play-a-audio-file-backwards –

ответ

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); 
+0

Очень хороший anser, он меняет данные, но, как вы предполагали, не играет. Можете ли вы сообщить мне, как играть в аудиофайл в обратном порядке. –

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; 
} 
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]; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^