원격 IO 오디오 장치의 사용법을 보여주는 3-4 가지 예를 발견했습니다. here, here 등. 그들은 iPhone 마이크에서 아날로그 오디오 데이터를 변환하고 디지털화 한 다음 다시 재생합니다. 이 시점까지는 모든 것이 잘 작동하며 이제 오디오 장치에 대해 잘 알고 있습니다.스트림 한 아이폰에서 다른 아이폰으로 원격 IO 오디오 장치
이제 동일한 장치에서 AudioBufferList에 저장된 녹음 된 오디오를 재생하는 대신 다른 장치로 스트리밍하려고합니다.
다음은 AudioBufferList를 nsdata로 변환하여 다른 장치로 보내는 방법입니다. 다음은
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObject:@(bufferList->mNumberBuffers) forKey:@"buffersCount"];
NSMutableArray *buffers = [NSMutableArray array];
for (int i=0; i< bufferList->mNumberBuffers; i++) {
NSData *data = [NSData dataWithBytes:bufferList->mBuffers[i].mData length:bufferList->mBuffers[i].mDataByteSize];
NSDictionary *obj = @{@"data":data, @"channels":@(bufferList->mBuffers[i].mNumberChannels)};
[buffers addObject:obj];
}
[dict setValue:buffers forKey:@"buffers"];
NSData *packet = [NSKeyedArchiver archivedDataWithRootObject:dict];
내가 수신 장치에 다시 AudioBufferList에있는 NSData로 변환 한 후 재생 tempBuffer에 복사하고있어 방법이다.
NSDictionary *dict = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:voiceData];
int numberOfBuffers = [dict[@"buffersCount"] intValue];
AudioBufferList *audio = malloc(sizeof(AudioBufferList) + (numberOfBuffers-1)*sizeof(AudioBuffer));
if (!audio) {
return;
}
for (int i=0; i < audio->mNumberBuffers; i++) { // in practice we will only ever have 1 buffer, since audio format is mono
AudioBuffer buffer = audio->mBuffers[i];
NSLog(@"Buffer %d has %d channels and wants %d bytes of data.", i, (unsigned int)buffer.mNumberChannels, buffer.mDataByteSize);
// copy temporary buffer data to output buffer
UInt32 size = min(buffer.mDataByteSize, [iosAudio tempBuffer].mDataByteSize); // dont copy more data then we have, or then fits
memcpy(buffer.mData, [iosAudio tempBuffer].mData, size);
buffer.mDataByteSize = size; // indicate how much data we wrote in the buffer
}
하지만 다른 기기에서는 아무 것도들을 수 없습니다.
무엇이 잘못되었을 수 있는지 안내하십시오.
(NSLog 등) 수신 한 오디오의 개수와 실제 샘플을 검사하고 비교하여 디버깅합니다. 그런 다음 알려진 사인파로 채워서 tempBuffer 재생 루틴을 테스트합니다. – hotpaw2
코드를 디버깅 한 결과 소스에서 보내는 데이터와 대상에서받는 데이터의 차이가 있음을 발견했습니다. NSData가 어떻게 AudioBufferList로 제대로 변환되는지 설명 할 수 있습니까? – iAmd
@iAmd이 문제를 해결 했습니까? – kezi