2016-06-15 20 views
2

마이크에서 오디오를 녹음하는 앱이 있는데 BASSenc을 사용하여 LAME을 사용하여 녹음을 MP3로 인코딩합니다. 앱을 종료하고 나중에 다시 시작하면 (녹음) 세션을로드하고 계속할 수 있습니다.BASS/LAME Enc : MP3 녹음/인코딩을 올바르게 계속하는 방법은 무엇입니까?

지금까지 모든 것이 잘 작동합니다. 그러나, 나는 녹음/인코딩 스트림을 계속하기위한 적절한 방법이 무엇일까?

BASS_StreamCreateFile을 사용하여 이전 파일을 열면 녹음 및 인코더를 시작하고 BASS_ChannelGetDataBASS_Encode_Write을 사용하여 전체 파일을 읽은 다음 이전 데이터를 "전송"합니다.

나는 이것이 "옳은"방법이 아닐 수도 있다는 것을 염려하고 있습니까? 이 단계는 녹음 시간이 길어지면 길어집니다. 또한 손실이 많은 MP3를로드하고 다시 인코딩하여 더 많은 정보를 잃어 버리기 때문에 손실이 있다고 생각합니다. 그렇지 않니? 아니면 내가 틀렸어?

BASSenc/LAME에게 기존 파일을 사용하고 직접 추가하는 방법이 있습니까? 아니면 이미 적절한 접근법을 사용하고 있습니까?

(델파이 XE7, 윈도우, VCL)

답변

0

직접 먼저 압축을 해제하지 않고 압축 된 스트림에 새로운, 비 압축 데이터를 추가 할 수 없습니다. 그래서 당신의 접근법은 그럴듯 해 보입니다.

녹음의 최대 길이에 따라 크기가 실제로 문제가 될 수 있습니다. 압축되지 않은 압축 스트림을 최대 1GB까지 처리합니다. 지연과 관련된 주요 문제가 발생하지 않았습니다. 적어도 현대적인 데스크탑 컴퓨터에서는 그렇지 않습니다.

그러나 프로세스를 최적화하는 방법은 이 아니고 새 세션을로드하기 전에 이전 세션 데이터를로드하고 새 세션을 디스크에 저장하기 전에 읽는 것입니다. 이렇게하면 매번 더 많은 RAM을 프로세스에 할당하지 않고 즉시 레코딩을 시작할 수 있습니다.

결과가 "옳고"잘못 표시됩니다. 가장 좋은 방법은 항상 그것을 달성하기위한 최소한의 노력으로 가장 잘 작동하는 방법입니다.

손실 코덱을 사용하지 않은 경우 여러 번 다시 인코딩하면 품질에 영향을 미치지 않습니다.

지원 소스 코드가 필요한 경우 알려주십시오.