2013-10-19 17 views
6

Das iPhone 5 hat drei Mikrofone - oben vorne, oben hinten und unten. Ich möchte alle gleichzeitig aufzeichnen, um eine Signalverarbeitung durchzuführen. Ich habe mehrere Tage erfolglos versucht.Stereo Aufnahme auf dem iPhone

Mit AVAudioSession, kann ich die Mikrofone sehen:

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs); 

    "<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>" 

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].inputDataSources); 

    "<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>", 
    "<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>", 
    "<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>" 

I AVAudioSessionPortDescription -setPreferredDataSource:error: von einem der drei aufnehmen können. Aber ich kann nicht mehr als eins gleichzeitig aufnehmen. Wenn ich die Anzahl der Eingangskanäle auf 2 festlege, erhalte ich zwei identische Spuren vom selben Mikrofon.

AVAudioRecorder hat eine Eigenschaft channelAssignments, die wie es scheint, sollte zu funktionieren, aber AVAudioSession inputNumberOfChannels und maximumInputNumberOfChannels sind beide 1. Die Eigenschaft channelAssignments für Zusatzmikrofone ausgebildet ist, die mehrere Kanäle haben.

Ich habe versucht, die Low-Level-AudioUnit, aber ich bekomme das gleiche Ergebnis. Ich konnte auf AudioUnit keine Eigenschaften finden, um die Eingangsquelle zu ändern.

Jede Hilfe wäre willkommen.

Antwort

4

Mein Verständnis, nachdem alle meine Forschung versucht, das gleiche zu tun, ist genau das, was Sie beschrieben haben - Sie können nicht mehrere Datenquellen für das eine Gerät bevorzugen, so dass Sie nicht von mehreren eingebauten aufnehmen können Mikrofone auf einmal. Wenn jemand mir das Gegenteil beweisen kann, würde ich es sehr gerne hören!

Hinweis: Ich kann Ihren Code nicht ausführen. Wie schon geschrieben, ich

Property availableInputs not found on object of type 'id' 

Auch nach massiert, was Sie in ein Format haben, das keine explizite Casts benötigt:

NSLog(@"%@", [[[AVAudioSession sharedInstance] availableInputs][0] inputDataSources]); 

ich SIGABRT:

-[AVAudioSessionPortDescription inputDataSources]: unrecognized selector sent to instance 0xd59dbe0' 

Welches SDK verwenden Sie, dass Ihr Code tatsächlich kompiliert, viel weniger Läufe?

+0

Ich denke, Sie benötigen ≥ iOS 7.0 (siehe https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008240 -CH1-SW112). –

+2

All meine Erfahrung bezieht sich auf die Verwendung des iOS 7 SDK, so dass allein das nicht ausreicht, um meine Frage zu beantworten, aber vielleicht fehlt mir etwas Spezifischeres. –

+0

Haben Sie in iOS8 oder sogar in iOS9 Betas versucht? Ich bin daran interessiert, zwei Quellen gleichzeitig aufzunehmen. – nacho4d