2011-09-25 3 views
1

iOS에서 오디오를 오프라인으로 처리하려고하지만 메모리 사용에 관한 쿼리가 필요합니다. AVAssetReader를 사용하여 MP3를 원시 PCM 데이터로 압축하면 메모리 공간이 커집니다. 그렇다면 압축을 풀면 너무 많은 메모리를 사용하는 앱으로 이어질 경우 어떻게 mp3 파일을 처리 (오프라인 FFT)할까요? 어떻게 든 스트리밍해야한다고 가정하지만 iOS에서이 작업을 수행하는 방법을 모르겠습니다.파일 압축 해제 메모리 풋 프린트

답변

0

AVAssetReader는 AVAssetWriter를 사용하여 파일에 쓸 수 있습니다.

PCM을 얻으려면 WAV 파일 형식을 작성한 다음 읽을 때 RIFF 헤더를 건너 뛸 수 있습니다. 그런 다음 FFT 길이가 요구하는만큼 WAV 파일의 데이터를 한 번에 메모리로 가져와야합니다. 각 FFT의 샘플 길이가 100 만 개를 넘는 경우에만 메모리 발자국 문제가 발생합니다.

iOS에서 파일 스트림을 읽으려면 C/Unix posix 호출 (fgetc 등)을 사용할 수 있습니다. 또는 NSInputStream에서 NSData로 읽습니다.

+0

따라서 명확히하기 위해 먼저 변환을 수행하여 디스크의 임시 파일에 기록해야합니다. 그런 다음 루프 당 샘플링 된 샘플 수 (예 : 1024)를 읽으면 덮어 쓰지 않고 모든 FFT 데이터를 어디에서 저장합니까? Accelerate FFT가 in-place 함수를 수행 한 이후 외부 버퍼가 필요하다고 가정합니다.하지만 고급 모드에서이 외부 버퍼가 얼마나 커야할지 계산하는 방법은 무엇입니까? 단 몇 분 안에 44100 * 길이의 노래를 재생할 수 있습니까? 답장을 보내 주셔서 감사합니다. – Skoder

+0

이것은 아마도 FFT 결과로 무엇을하고 싶은가에 달려 있습니다. – hotpaw2

+0

스펙트럼 비주얼 라이저를 만들고 싶지만 실시간으로 생성하고 싶지는 않습니다. 즉 전체를 전처리하고 싶습니다. – Skoder