5

Mikrofon Ses verilerini Multipeer Connectivity (iOS 8) üzerinden göndermek ve alıcı eşin hoparlörüyle çalmak istiyorum. Ayrıca AVAudioEngine'i kurdum ve mikrofon verilerini (üst) hoparlör çıkışından duyabiliyorum, ancak AVAudioPCMBuffer'ı ağ üzerinden nasıl göndereceğimi bilmiyorum. İşte kod kodum:iOS8 AVAudioMyveler Bağlantısı üzerinden mikrofon verileri nasıl gönderilir?

AVAudioInputNode *inputNode =[self.engine inputNode]; 
AVAudioMixerNode *mainMixer = [self.engine mainMixerNode]; 
[self.engine connect:inputNode to:mainMixer format:[inputNode inputFormatForBus:0]]; 

[mainMixer installTapOnBus:0 bufferSize:4096 format:[mainMixer outputFormatForBus:0] 
    block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when) { 

    //==== How to send the PCMBuffer ?? ======// 
}]; 

NSError *error = nil; 
[self.engine startAndReturnError:&error]; 

if(error) 
{ 
    NSLog(@"error: %@", [error localizedDescription]); 
} 

Bunu NSData veya NSStream olarak gönderir miyim?

Yardım için teşekkür ederiz. Teşekkürler.

- (NSOutputStream *)startStreamWithName:(NSString *)streamName 
           toPeer:(MCPeerID *)peerID 
            error:(NSError **)error 

Sen property buffer.floatChannelData kullanarak bir şamandıra dizi alabilir:

cevap

0

Bu çözümü denemedim. Şimdi bu float dizisini NSOutputStream'a paketleyip gönderebilirsiniz. İstemci tarafında

bir akışı almak için deneyebilirsiniz: emin olmak, böylece yerine şamandıra dizinin

- (void)session:(MCSession *)session 
didReceiveStream:(NSInputStream *)stream 
     withName:(NSString *)streamName 
     fromPeer:(MCPeerID *)peerID 
{ 
    stream.delegate = self; 
    [stream scheduleInRunLoop:[NSRunLoop mainRunLoop] 
         forMode:NSDefaultRunLoopMode]; 
    [stream open]; 
} 

Ama bu denemeden önce, siz (dolayısıyla white noise) rastgele değerleri göndermek için deneyebilirsiniz Bu arabellekleri göndermek için zaman aralığının (gerçek zamandan bahsediyoruz) yeterince geniş.

Güncelleme 2014/10/15 Ben tam olarak neye ihtiyacınız bulundu : cevap fo http://robots.thoughtbot.com/streaming-audio-to-multiple-listeners-via-ios-multipeer-connectivity

+0

Merhaba Michael, thx. MCSessionDelegate bu yönteme sahiptir: session: didReceiveStream: withName: fromPeer: Veriyi akım olarak göndermek mümkün mü? sürekli veri akışı olduğundan. Ve, 'zaman aralığı yeterince geniş' anlamına gelir? Teşekkürler. –

+0

Sadece göndereni sorduğunuzu sanıyordum. Alıcıyı ekledim. İkinci soru için aşırı basitleştiriyorum: ses verisi alıcının Bluetooth bağlantısından daha hızlı gelmesine neden oluyorsa; Bu 'zaman dilimi' ile kastediyorum. –

+0

Merhaba Michael, hızlı cevap için teşekkürler. Pardon me ... StartStreamWithName: toPeer: error :,ReceiveStream alma kısmı demek istedim. NSData kullanarak gönderme ve alma denedim, ancak alıcı tarafında bir sorunum var. [NSData dataWithBytes: buffer.floatChannelData length: buffer.frameLength] kullanarak gönderdim, alınan bayt verilerini AVAudioPCMBuffer'a nasıl dönüştürebilirim? Tamponu oynatmak için AVAudioPlayerNode kullanacağımdan beri. Apple belgelerinde buffer.floatChannelData için 'setter' yok. –

İlgili konular