음악가 용 협업 오디오 녹음 플랫폼 (GitHub과 결혼 한 클라우드 DAW)을 개발 중입니다. 간단히 말해 세션 (노래)은 AAC로 인코딩되고 HTML5 <audio>
요소를 통해 재생되는 일련의 오디오 트랙으로 구성됩니다. 각 트랙은 MediaElementAudioSourceNode를 통해 Web Audio API에 연결되고 대상까지 일련의 노드 (현재는 게인과 팬)를 통해 라우팅됩니다. 여태까지는 그런대로 잘됐다.HTML5 오디오 요소를 찾으려면 지연이 발생 함 (동기화 중단)
필자는 동기화, 일시 중지, 중지 및 탐색을 전혀 문제없이 수행 할 수 있었으며 일반 DAW의 일반적인 음소거 기능과 솔로 기능, 파형 시각화 및 탐색 기능을 성공적으로 구현할 수있었습니다. 이것은 재생 부분입니다.
녹음 파트는 getUserMedia()의 출력을 MediaStreamAudioSourceNode에 연결 한 다음 웹 작업자를 사용하여 녹음 된 버퍼를 배열에 쓰는 ScriptProcessorNode로 라우팅합니다. 녹음 프로세스가 끝나면 녹음 된 버퍼가 PCM 웨이브 파일에 기록되고 서버에 업로드되지만 동시에 즉시 재생을 위해 <audio>
요소에 연결됩니다 (그렇지 않으면 wav 파일을 기다려야합니다. 서버에 업로드하여 사용할 수 있음).
다음과 같은 문제가 있습니다. 녹음 된 트랙을 처음부터 재생하면 이전 트랙과 완전히 동기화되어 재생할 수 있지만 제대로 찾지는 못합니다. 새로 녹음 된 트랙의 currentTime 속성을 변경하면 지저분 해지고 동기화되지 않습니다. "로컬"트랙이 추가 될 때만이 작업이 반복됩니다. 위치를 변경하면 다른 트랙도 정상적으로 작동합니다.
이 문제를 일으킬 수있는 원인이 누구에게 있습니까? 제가 제공 할 수있는 다른 유용한 정보가 있습니까?
미리 감사드립니다.
AudioBufferSourceNode 노드에 여러 개의 큰 오디오 파일 (각각 5 분씩)을로드 할 수 있습니까? 이 규격은 PCM 데이터의 길이가 상당히 짧을 것으로 예상된다 (보통 1 분 미만). 또한 start() 및 stop() 메서드는 한 번만 호출 할 수 있으므로 이러한 노드는 원샷 사운드에 적합합니다. – user1276108
(죄송합니다, 휴가 중이 셨습니다). 그렇습니다. 이렇게 큰 파일을로드 할 수는 있습니다. 사용 가능한 메모리가 더 많이 필요합니다. 5 분 * 60 초/분 * 44100Hz * 8 바이트 [스테레오 플로트의 경우] = 각각 105MB입니다. 다른 옵션은 스트리밍/청크 구현을 직접 수행하는 것으로, 모든 것을 메모리에 강제로 동기화하지만 유지하지는 못합니다. – cwilso
문제는 스트리밍 구현에서 품질, 글리치 및 동기화 사이에서 교환 결정을 내려야한다는 것입니다. 대부분의 "스트리밍 라디오 듣기"유형 시나리오는 행복하게 희생됩니다. – cwilso