Я напрямую конвертирую 32-битные стереосэмплы из цифровой линии на устройствах iOS, используя добавку для микрофона Mickey Blue, в mp3 с хромой.
Проблема в том, что он принимает только 16-битные образцы. Попытка напрямую конвертировать сэмплы оставляет меня с большим количеством шума и без узнаваемого звука. Настройки, которые я использую для записи звука на iOS, следующие:
AudioStreamBasicDescription stereoStreamFormat;
stereoStreamFormat.mSampleRate = 44100.00;
stereoStreamFormat.mFormatID = kAudioFormatLinearPCM;
stereoStreamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
stereoStreamFormat.mBytesPerPacket = 4;
stereoStreamFormat.mBytesPerFrame = 4;
stereoStreamFormat.mFramesPerPacket = 1;
stereoStreamFormat.mChannelsPerFrame = 2;
stereoStreamFormat.mBitsPerChannel = 32;//changing this to 16bit does not work
Затем я конвертирую сэмплы из двух отдельных буферов с помощью lame:
-(void) encodeMicrophoneWithLeft :(NSData*) left andRight : (NSData *) right
{
void *mp3 = malloc(MP3_SIZE_MIC);
int write = lame_encode_buffer(microphoneLame, left.bytes, right.bytes, left.length/2, mp3, MP3_SIZE_MIC);
[self.microphoneBuffer appendBytes:mp3 length:write];
}
С этими настройками:
lame_set_brate(microphoneLame, 128);// current streaming speed kbps
lame_set_in_samplerate(microphoneLame, 44100);
lame_set_VBR(microphoneLame, vbr_off);//set variable bitrate off
lame_set_num_channels(microphoneLame,2);
Можно ли как-нибудь преобразовать 32-битные сэмплы в 16-битные или заставить работать с 32-битными семплами? Рекордер почему-то не работает с настройками, отличными от 32-битных для стерео, но если есть другой способ инициализации с 16-битными, это тоже было бы решением для меня.