필자는 순수 자바 오디오 믹싱 라이브러리를 만들려고합니다. 안드로이드와 함께 사용할 수있는 라이브러리가 좋지만, 실제로는 실용적이지는 않지만 확실히 흥미로운 것입니다. 나는 그것이 이미 끝났다고 확신하지만, 단지 내 자신의 학습 경험을 위해 나는 주변에서 일할 압축 모델이 없기 때문에 wav 파일로 이것을하려고 노력하고있다.모바일 오디오 믹싱 소프트웨어에서 메모리를 어떻게 관리해야합니까?
java.io의 특성을 감안할 때 많은 InputStream 유형의 클래스를 정의합니다. 각각은 기본적으로 일부 기본 리소스에서 데이터를 읽는 작업을 구현합니다. 나중에 데이터로 수행하거나, 자신의 주소 공간에 집계하거나 집계하는 것은 사용자의 책임입니다. 내가 순수하게 자바가되기를 바란다. 모든 것 (JNI는 필요 없음)에서 작동하고, 낮은 메모리 구성에 최적화되며, 확장이 간단합니다.
RIFF 형식의 특성과 PCM 샘플 데이터를 어셈블하는 방법을 알고 있지만 파일을 메모리로 확장하는 데 필요한 메모리를 관리하는 가장 좋은 방법은 없습니다. FileInputStream을 사용하면 기본 파일 시스템과 읽기 작업이 호출되는 방식에 따라 한 번에 많은 양의 데이터 만 읽을 수 있습니다. FileInputStream은 파일에서 사용자가 색인을 생성하는 방법을 제공하지 않으므로 나중에 혼합하기 위해 스트림을 검색 할 수 없습니다. 내 목표는 기본 청크의 적절한 영역을 읽고 쓸 수있는 Java 객체로 RIFF 문서를 확장하는 것입니다.
전체에 공간을 할당하면 (예 : 모든 PCM 샘플 데이터는 평균 노래 당 50MB와 같습니다. 일반적인 스마트 폰이나 태블릿에서 전체 성능에 영향을 미칠 가능성은 얼마나됩니까? 아마 청크가 InputStream에있는 곳을 추적 할 수있는 내 자신의 InputStream 유형을 제안하는 것이 나을 것입니까? 파일의 경우 PCM 샘플을 가져올 때 많은 블로킹이 발생하지만 시스템의 전체 메모리 사용량은 줄입니다.
감사합니다. Bjorn, RandomAccessFile은 내가 찾고있는 데이터 구조입니다. 또한, 확실히 그것을 차단하기 때문에 재생 스레드에서 파일을 읽지 않을 것입니다. 오히려 청크 영역에 액세스하여 샘플을 혼합하거나 필터링 한 다음 새 wav 파일을 쓰는 데이터 구조를 만들고 싶습니다. 모든 것을 메모리로 읽어 들이지 않고 기존의 입력 스트림과 바이트 버퍼를 사용하여이를 수행하는 방법을 보지 못했습니다.나는 확실히 당신의 슬라이드를 체크 아웃 할 것입니다. 무리 감사. –
FileInputStream을 사용할 수 있습니다. 파일의 이전 지점으로 돌아가려면 다시 열어야합니다. 내 경험상,이 성능에 치명적인 타격은 살인자가 아니지만 YMMV와 YMMV를 테스트 한 적이 없습니다. 분명히 RandomAccessFile은보다 자연스러운 작업 방법입니다. –