2015-01-20 4 views
1

NAudio AsioOut 클래스를 살펴보면 인스턴스가 출력을 통해 새 파일을 재생할 때마다 인스턴스가 파괴되고 다시 만들어지기 마련입니다. Init 메서드는 인스턴스에 이미 소스 스트림이 있으면 InvalidOperationException을 throw합니다. 일반적으로 일반적인 상황에서는 Asio 출력을 처리하고 다시 작성하는 것이 문제가되지 않지만 출력을 Coniover로 설정하여 Asio 드라이버로 보내므로이를 피하고 싶습니다. 드라이버가 초기화 될 때마다 큰 회선 필터를 다시로드해야하므로 gapless 트랙을 재생할 때 지연이 성가시다.NAudio : 파일 대기열을 재생하기 위해 기존 AsioOut 인스턴스를 재사용해도 안전합니까?

지연을 피하기 위해 이미 존재하는 AsioOut 인스턴스를 처리하지 말아야하며 큐의 다음 파일의 비트 깊이와 샘플링 속도는 마지막 파일과 동일합니다. 문제는 AsioOut 클래스에서 Init를 호출하여 재생할 다음 파일을 전달해야한다는 것입니다. 위에서 언급 한 예외가 발생합니다. 파일 사이에서 비트 심도, 샘플링 속도 및 출력 채널 수가 변경되지 않았 으면 예외를 throw하지 않도록 Init 메서드를 변경하는 것이 안전합니까?

감사합니다, 앨런

답변

0

난 내 자신의 질문에 대답하고있다. MixingSampleProvider를 사용하고 ReadFully 속성을 true로 설정하면 동일한 파일의 샘플 속도와 비트 심도가있는 한 AsioOut 인스턴스를 다시 초기화 할 필요없이 AudioFileReaders를 계속 추가 할 수 있습니다. Mark Heath는 여기에서 유용한 AutoDisposeFileReader라는 도우미 클래스에 대해 토론 한 블로그 게시물을 작성했습니다.