2017-04-18 2 views
0

저는 iOS 프로그래밍을 처음 사용하고 Swift 3을 사용하여 Android 앱을 iOS로 이식하려고합니다. 앱의 핵심 기능은 이 스트림을 실시간으로 처리 할 수 ​​있습니다. 따라서 오디오 스트림을 파일에 저장하고 녹음이 중지 된 후에 처리하는 것으로는 충분하지 않습니다.스위프트 3의 AVAudioRecorder : 파일로 저장하는 대신 바이트 스트림 가져 오기

이미 작동하는 AVAudioRecorder 클래스를 찾았지만 데이터 스트림을 라이브 (필터링, 서버로 보내는 등)를 처리하는 방법을 모르겠습니다. AVAudioRecorder의 초기화 기능은 다음과 같습니다

AVAudioRecorder(url: filename, settings: settings) 

는 내가 필요하면 내가 X 바이트 내가 처리 할 수있는 읽은 때마다 호출되는 그런 이벤트 핸들러 또는 무언가를 등록 할 수있는 클래스입니다 그것.

AVAudioRecorder에서 가능합니까? 그렇지 않다면 Swift 라이브러리에 오디오 스트림을 실시간으로 처리 할 수있는 또 다른 클래스가 있습니까? Android에서는 android.media.AudioRecord를 사용합니다. Swift에 동등한 클래스가 있으면 멋질 것입니다.

감사합니다.

+0

어떤 해결책이 있습니까? 나는 같은 문제에 빠져있다. 미리 감사드립니다! – miibpa

답변

0

코어 오디오 프레임 워크에서 오디오 대기열 서비스를 사용하십시오. 오디오 큐 버퍼

1 세트 수를 사용 : https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html#//apple_ref/doc/uid/TP40005343-CH4-SW1

static const int kNumberBuffers = 3;       // 1 
struct AQRecorderState { 
    AudioStreamBasicDescription mDataFormat;     // 2 
    AudioQueueRef    mQueue;      // 3 
    AudioQueueBufferRef   mBuffers[kNumberBuffers];  // 4 
    AudioFileID     mAudioFile;     // 5 
    UInt32      bufferByteSize;    // 6 
    SInt64      mCurrentPacket;    // 7 
    bool       mIsRunning;     // 8 
}; 

여기에이 구조의 필드에 대한 설명이다. 2 (CoreAudioTypes.h의) AudioStreamBasicDescription 구조체 은 디스크에 쓸 오디오 데이터 형식을 나타냅니다. 이 포맷은, mQueue 필드로 지정된 오디오 큐에 의해 사용되는 를 가져옵니다. 기록 용 오디오 형식 설정에서 설명한대로 mDataFormat 필드는 처음에는 프로그램의 코드로 채워집니다. 오디오 대기열에서 전체 오디오 형식 가져 오기에서 설명한대로 은 오디오 대기열의 kAudioQueueProperty_StreamDescription 속성을 쿼리하여이 필드의 값을 업데이트하는 것이 좋습니다. Mac OS X v10.5에서 대신 kAudioConverterCurrentInputStreamDescription 속성을 사용하십시오.

AudioStreamBasicDescription 구조에 대한 자세한 내용은 Core 오디오 데이터 형식 참조를 참조하십시오.

3 응용 프로그램에서 만든 녹음 오디오 대기열입니다.

4 오디오 큐 에 의해 관리되는 오디오 대기열 버퍼에 대한 포인터를 보유하는 배열입니다.

5 프로그램 이 오디오 데이터를 기록하는 파일을 나타내는 오디오 파일 객체입니다.

6 각 오디오 큐 버퍼의 크기 (바이트). 이 값은 , DeriveBufferSize 함수의이 예제에서 계산 된 것입니다. 오디오 큐가 만들어지고 시작되기 전입니다. 기록 오디오 대기열 버퍼 크기를 유도하는 함수 작성 ( 참조)을 참조하십시오.

7 현재 오디오 대기열 버퍼에서 기록 될 첫 번째 패킷의 패킷 색인입니다.

8 오디오 대기열이 실행 중인지 여부를 나타내는 부울 값입니다.

+0

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 포스트/18738067) –