2017-01-07 1 views

답변

1

특정 수식을 얻으려면 볼륨 레벨을보다 정확하게 정의해야 할 수 있습니다. Loudness of PCM stream 질문/답변 중 하나가 인기있는 옵션입니다.

귀하의 32 비트 INT은 잘 보이지 않습니다. 16+ 비트/샘플 정수의 경우 샘플은 일반적으로 0을 중심으로합니다 (즉, 부호있는 정수로 처리해야 함). 16 비트 PCM 값이 32 비트로 잘못 변환 된 것처럼 질문의 값 시퀀스가 ​​더 많이 보입니다. 부호 비트.

어느 쪽이든, 일반적으로 샘플 창을 가지고 위에서 언급 한 수식을 볼륨 수준에 집계하는 값에 적용합니다. 슬라이딩 윈도우는 시간 경과에 따른 볼륨 변경을 제공합니다.

다른 사양/알고리즘은이 대답에 의해 언급되었습니다 : get loudness level from raw data received from microphone in DirectShow.

+0

내가 lib에서 얻은 값을 플로팅하면 뭔가 이상하게 보입니다. http://imgur.com/scLU1jM ('n16 = uint16 (b [0]) + uint16 (b [1]) << 8') – Xeoncross

+1

@Xeoncross : 서명 된'__int16'은 16 비트 PCM을 사용하는 가장 좋은 방법입니다 –

+0

부호있는 int16 ('int16 (buf [0]) + int16 (buf [1]) << 8')으로 이동하면 더 나은 그래프가됩니다 : http://imgur.com/UfXrxw0 – Xeoncross

1

Specification은 샘플을 부호없는 바이트 또는 부호있는 정수로 저장할 수 있다고 말합니다. 단순히 바이너리 데이터로 전달하면 문제가되지 않습니다. 정보는 정보입니다. 해당 데이터를 볼륨 수준으로 해석하려면 해당 사실을 알아야하며 BitsPerSample은이를 보여줍니다.

따라서 샘플 스트림이 있지만 채널이 있습니다. 스테레오를 모노로 변환하려면 매초마다 작업해야합니다. 다시 한 번 플레이하고 싶다면 - 플레이어가 스테레오를 사용하도록 구성하십시오.

ReadRawSample이 bytestream에 대한 액세스를 허용하는지 아니면 특정 청크에 대한 행 데이터의 bytearray에 대한 액세스인지는 알기가 어렵습니다. 그런 다음 이미 처리 된 내용을 알아야합니다. 그러나 그것이 실제 샘플이라고 확신한다면 - 당신은 그것을 알고 있습니다.

Here is sample code that plays sound. 입력 바이너리 스트림에서 데이터를 읽는 대신, out 버퍼를 웨이브 샘플로 채울 수 있습니다. 그것이 당신이 할 계획이 아니라면 - 샘플이 예상대로 들리는 지 확인할 수 있습니다. 그것은 언젠가 전에 많은 도움이되었습니다.

희망이 있으면 도움이됩니다.

관련 문제