2013-01-25 7 views
3

iOS에는 상위 수준의 다양한 오디오 프레임 워크가있어 특정 파일을 간단하게 재생할 수 있으며 하위 PCM 데이터 및 그 중간에있는 모든 것을 가져올 수 있습니다. 우리의 앱에서는 외부 파일 (WAV, AIFF, MP3) 만 재생해야하지만 버튼을 누르는 순간 이에 대응해야하므로 가능한 한 작게 레이턴시가 필요합니다.지연이 적은 iOS에서 오디오 파일 (WAV, MP3, AIFF)을 재생할 때 사용해야하는 프레임 워크는 무엇입니까?

이제 AVAudioPlayer 등은 URL을 통해 간단한 파일 자산을 재생하지만 실제로 소리를 시작하는 데 소요되는 시간은 너무 길습니다. 길이가 5 분 이상인 대용량 파일의 경우 사운드를 시작하는 데 걸리는 시간이 1 초가 넘을 수 있으므로 라이브 퍼포먼스의 타이밍에서는 쓸모 없지만 쓸모가 없습니다.

지금 내가 OpenAL에 같은 일이 매우 낮은 대기 시간 재생에 사용 할 수 있습니다 알고 있지만, 당신은 허리 깊이 등 오디오 버퍼, 오디오 소스, 청취자로 말했다

은 누구를 수행하고 매우 낮은 대기 시간으로 상위 레벨에서 작동하는 프레임 워크 (예 : 'MyBeddingTrack.mp3'재생)를 알고 계십니까? 사전 버퍼링이 좋습니다. 방아쇠가 빨리 움직여야합니다. 등

답변

1

following SO question에는 Audio Units 및 특히 AudioFilePlayer를 사용하여 파일을 재생하는 작업 코드가 들어 있습니다. 질문은 그것이 작동하지 않는다고 말하지만, 그것은 나를 위해 상자에서 일했습니다 - 단지 AUGraphStart(_graph)을 끝에 추가하십시오.

AudioFilePlayer의 'ScheduledFilePrime'속성은 재생을 시작하기 전에로드 할 파일의 양을 나타냅니다. 당신은 그걸로 놀고 싶어 할 것입니다.

그러나 다른 사람들이 언급 한 것처럼 오디오 단위는 가파른 학습 곡선을 가지고 있습니다.

1

우리는 더킹을 수행하는 경우에도 파일 내의 재생의 설정 시작과 끝 지점 등의 작업을 수행 할 수 있습니다, 또는 볼륨을 변경하거나 경우

보너스, 당신은 시스템 사운드 프레임 워크가 필요합니다. 시스템 사운드 프레임 워크는 인터페이스 사운드 사용 또는 신속하고 반응이 빠른 사운드와 같은 것들을 위해 만들어졌습니다. 보세요 here.

+0

아니, 그것은 짧은 소리 (및 진동.) 내 질문에 언급 한 바와 같이, 파일이 매우 길 수 있으므로 시스템 사운드 프레임 워크는 사용해야하는 것이 아닙니다. 감사합니다. :) – MarqueIV

1

AVAudioPlayer에는 오디오 버퍼를 미리로드하는 방법이 있습니다. 이렇게하면 응답 시간이 크게 빨라질 수 있습니다.

+0

단일 사운드에서 작동하지만 실제로 트리거 할 소리가 여러 개 있습니다. 또한 문서에 'Stop'을 호출하거나 재생을 끝내면이 작업이 취소되므로 상태를 계속 설정해야한다는 것을 의미합니다. 그래도 일회용으로 좋습니다. – MarqueIV

1

나는 당신과 같은 문제에 부딪쳤다.하지만 잠시 동안 연구를 해보니 훌륭한 프레임 워크를 발견했다. 현재 kstenerud의 ObjectAL 사운드 프레임 워크를 사용하고 있습니다. OpenAL을 기반으로하며 문서가 잘되어 있습니다. 여러 레이어로 배경 음악과 사운드 효과를 재생할 수 있습니다. 여기

여기 GitHub의 https://github.com/kstenerud/ObjectAL-for-iPhone 에 프로젝트 웹 사이트 http://kstenerud.github.com/ObjectAL-for-iPhone/index.html

+0

좋아요 ... 메인 페이지에서 보면 멋져 보일 것 같습니다! 감사! 지금 파고있어. Audio Queue 질문에 대한 답변을 얻으려고했지만 지금은이 때문에 보류 중입니다. 내가 찾은 것을 당신에게 알려줄 것입니다. – MarqueIV

+0

배경 음악과 사운드 효과를 재생하는 데만 사용하지만 복잡한 사운드를 재생할 수 있습니다. – NelsonPunch

1
+0

iOS에 있는지 몰랐습니다! 이제 SpeakHere 예제를 살펴 보겠습니다. 당신이 지금 기술과 관련이없는 많은 것들을 파헤 치고 있기 때문에 그것들을 좋아하는 사람들의 팬은 아닙니다. (예를 들어 그들은 OpenGL ES에서 렌더링하는 뷰 미터를 가지고 있습니다.) 정말로 당신은 * audio * sample ?! 그게 더 고급 샘플에 있어야합니다!) 게다가 ARC가 지원되지 않기 때문에 많은 호환성을 처리해야합니다. 그러나 지금까지는 이것이 가장 유망한 것으로 보입니다. 내 자신의 정적 미니 라이브러리에서 이것을 감싸려고 할 수 있습니다. 그래서 파일을 가리키고 갈 수 있습니다. – MarqueIV

+0

(누가 정말로 자신의 사용자 이름을 변경하는 것을 고려해야합니까! LOL!) ... 앱에 포함 할 수있는 오디오 대기열 수의 한도는 알고 있습니까?우리는 화면에 최대 100 개의 버튼을 가질 수 있으며 모든 것이 잠깐 공지 될 준비가되어 있어야하지만, 30 개의 단서가 있다는 것을 읽은 것 같습니다. 그러나 나는 그것을 읽을 수있는 곳을 찾을 수 없으므로 나는 그것을 확인할 수 없다. – MarqueIV

+0

잘 모르겠습니다 ... 지난 프로젝트에 대한 연구를하면서 Audio Queue를 조금 밖에 알지 못했기 때문에. 그리고 오디오 유닛을 대신 사용했습니다. 아마도 다른 사람이 이것을 처리 할 수 ​​있습니다. – user523234

2

가장 짧은 대기 시간은 Audio Units, RemoteIO입니다.

원격 I/O 유닛

원격 I/O 유닛 (아형 kAudioUnitSubType_RemoteIO)는 입력, 출력, 또는 동시 입력 및 출력 장치 하드웨어에 연결된다. 반향 제거가 필요하지 않은 곳에서 재생, 녹음 또는 낮은 대기 시간의 동시 입력 및 출력에 사용하십시오.

이 튜토리얼에서 살펴 보자 :

http://atastypixel.com/blog/using-remoteio-audio-unit/

http://atastypixel.com/blog/playing-audio-in-time-using-remote-io/

+0

RemoteIO 첫눈에 조금 발굴 보인다, 하지만 분명히 낮은 대기 시간을위한 최선의 선택입니다. 또한 시작/끝점 또는 유사한 기능을 설정할 수 있습니다. – Totoro

2

오디오 큐 프레임 워크를 사용하는 것이 상대적으로 용이하지만 .. 그것은 즉, 만약 뒤에서 DSP 무거운 많이 (팩 당신은 VBR/압축 된 오디오를 공급합니다. 자동적으로 그것을 PCM으로 변환하여 스피커에서 재생합니다 .. 또한 최종 사용자를위한 스레딩 문제를 불투명하게 처리합니다.) 비 실시간 응용 프로그램.

당신은 라이브 프로덕션에서 대기열에 필요하다고 언급했습니다. 그게 당신의 앱이 실시간이라는 것을 확신 할 수 없다면 .. Audio Queue가 당신의 필요를 파헤 치려고 노력할 것이기 때문입니다. 이것에 관해 읽을만한 좋은 기사는 Ross Bencina's입니다. 멀리 떨어져 버리면 제 3 자 프레임 워크 나 라이브러리가 스레드 잠금이나 mallocing 또는 deallocing 등과 같은 잠재적 인 비용이 많이 드는 작업을 할 수 없다는 것입니다. 이는 실시간 오디오 애플리케이션 개발에 너무 비싸고 위험합니다. .

오디오 유닛 프레임 워크는 오디오 유닛 프레임 워크가 들어있는 곳입니다. 오디오 큐는 실제로 오디오 유닛 프레임 워크 위에 구축됩니다 (많은 작업을 자동화합니다).하지만 오디오 유닛은 여러분을 가져 오는 금속에 가깝게 만듭니다 iOS. 그것은 당신이 원하는만큼 반응적이고, 실시간 앱을 쉽게 할 수 있습니다. Audio Unit에는 큰 학습 곡선이 있습니다. 주변에는 오픈 소스 래퍼가있어 간단하게 만들 수 있습니다 (novocaine 참조). 당신은 ... 나는 적어도 Learning Core Audio을 통해 탈지 것 인 경우에

는 .. 그것은 오디오 큐, 오디오 장치 등에 대해 구체적으로 이야기하고 우수한 코드가 .. 어떤 아이폰 OS의 코어 오디오 개발자 예약 할 이동의 examples ..

내 자신의 경험에서 ... 몇 가지 집중적 인 오디오 요구 사항이있는 실시간 오디오 응용 프로그램에서 일했습니다. 오디오 대기열 프레임 워크를 발견하고 그것이 너무 좋았다고 생각했습니다. 내 응용 프로그램은 나는 가벼운 제한으로 그것을 프로토 타입을 만들었다. .. 그러나 그것은 단지 스트레스 테스트에 질식시켰다. 그것은 내가 오디오 유닛으로 깊숙이 뛰어 들어야했고, 건축 기타 등을 바꿨 던 때다 (그것은 귀여웠다). 필자의 조언 : 적어도 Audio Unit에 대한 소개로 오디오 대기열을 사용하십시오. 요구 사항을 충족하는 경우 오디오 대기열을 사용하고 Audio Queue가 더 이상 응용 프로그램 요구 사항을 충족시키지 않는다는 것이 분명 해지면 Audio Unit 사용을 두려워하지 마십시오. .