Как преобразовать AVAudioPCMBuffer в NSData в Objective-C?

Как следует из названия.

В Swift есть старое решение здесь. Но мне трудно конвертировать в Objective-C. Кажется, нет эквивалента Objective-C для UnsafeBufferPointer


person Harikrishnan R    schedule 19.04.2018    source источник


Ответы (1)


В Objective-C небезопасные указатели встроены прямо в язык, поэтому преобразование просто выглядит так:

- (NSData *)bufferToNSData:(AVAudioPCMBuffer *)buffer {
    return [[NSData alloc] initWithBytes:buffer.floatChannelData[0] length:buffer.frameLength * 4];
}

Н.Б. это предполагает моно 32-битные данные с плавающей запятой в буфере. Необходимо проделать дополнительную работу, чтобы сериализовать все поддерживаемые форматы AVAudioPCMBuffer в NSData.

person Rhythmic Fistman    schedule 19.04.2018
comment
Мне нужны моно 16-битные данные. Поэтому я предполагаю, что мне следует использовать int16ChannelData вместо floatChannelData. Но каковы критерии 4 в buffer.frameLength * 4. Размер поплавка? - person Harikrishnan R; 20.04.2018
comment
Правильно, и 4 станет 2. Вы можете выкопать это число из буфера, если хотите. - person Rhythmic Fistman; 20.04.2018
comment
@LordHari ты разгадал тайну? Если да, поделитесь со мной кодом, так как я не могу получить 'int16ChannelData' - person Majid Bashir; 28.08.2018