2016-07-04 5 views
0

Ich bin ein Anfänger in Core Audio, AudioUnit Framework und ich habe nicht viel Wissen darüber, also bitte tragen Sie es mit mir.Wie werden Audio-Puffer vor dem Senden an den Lautsprecher gepackt?

Ich habe eine Anforderung, wo ich auf den Live-Stream zugreifen muss, der durch einen Remote-Aufruf mit WebRTC kommt. Im webRTC-Framework gibt es keine Möglichkeit, auf den Audio-Stream zuzugreifen.

Also, was ich gedacht habe ist, einen Zugang zu diesem Audio-Stream durch Apple Audio Frameworks zu bekommen, denke ich daran, das Audio vor dem Senden an den Lautsprecher zu greifen. Ist es möglich, die Audiopuffer vor dem Senden an den Lautsprecher zu erhalten?

Ich muss die Audio-Puffer mit einem gewissen Wert ändern und es an den Lautsprecher zurücksenden.

Bitte helfen!

+0

können Sie hier viel Hilfe bekommen, benötigen aber noch ein wenig mehr für Ihr Problem und Ihre Bemühungen zu beschreiben. Sicher können Sie die Puffer greifen und sie ändern, aber die Methode hängt von der Konstruktion Ihrer Audioverarbeitungskette ab. Wenn Sie neu bei CA sind, kann dieses [Lehrbuch] (http://www.informit.com/store/learning-core-audio-a-hands-on-guide-to-audio-programming-9780321636843) zur Klärung beitragen Grundlegende Konzepte mit funktionierendem Beispielcode, um daraus zu lernen. – user3078414

Antwort

0

Sie können den Render-Callback für die Ausgabe von AudioUnit festlegen und die Audiopuffer vor dem Senden an die Lautsprecher ändern.

AURenderCallbackStruct callbackStruct; 
     callbackStruct.inputProc = inputRemoteRenderCallback; 
     callbackStruct.inputProcRefCon = sourceUnit; 


     AudioUnitSetProperty(outputAudioUnit, 
          kAudioUnitProperty_SetRenderCallback, 
          kAudioUnitScope_Input, 
          0, 
          &callbackStruct, 
          sizeof(callbackStruct)); 

und Rückruf:

static OSStatus inputRemoteRenderCallback (void *inRefCon, 
             AudioUnitRenderActionFlags *ioActionFlags, 
             const AudioTimeStamp *inTimeStamp, 
             UInt32 inBusNumber, 
             UInt32 inNumberFrames, 
             AudioBufferList *ioData 
             ) { 

AudioUnit au = (AudioUnit)inRefCon; 

AudioUnitRender(au, 
       ioActionFlags, 
       inTimeStamp, 
       0, 
       inNumberFrames, 
       ioData); 

return noErr; 
} 
Verwandte Themen