2010-02-24 3 views
0

VB.NET에서 힙에 순환 버퍼를 만들려면 어떻게해야합니까?VB.NET의 순환 버퍼

이것은 소프트웨어 신스의 개발을 지원하기 위해 winmm.dll waveoutopen 및 waveoutwrite에 대한 P/Invoke를 통한 오디오 재생에 사용됩니다.

현재 marshall 클래스를 사용하여 힙에 일반 바이트 배열을 작성합니다.

답변

2

OK, I 바이트 ...

당신은 정말 (고정 크기 등) 원형을 의미합니까 것 또는 당신은 연결된 목록을 사용할 수 있습니다?

"힙"에 대해 걱정할 필요가있는 이유는 무엇입니까? VB는 임베디드 하드웨어 시스템에서 "c/C++"이 아닙니다. 데이터 범위, 수명주기 또는 가용성으로 인해 ALLOC/MALLOC과 같은 다른 응용 프로그램에 "힙"이라는 용어가 사용됩니까?

+0

필자는 단지 전달해야하는 링크 된 목록을 사용할 수 없다고 생각합니다. winmm API에 대한 메모리 블록에 대한 포인터. 진행중인 내 작업은 다음과 같습니다. http://waveout.codeplex.com/SourceControl/changeset/view/43602#798077 버퍼 재생이 완료되었을 때부터 콜백에서 버퍼를 회전하려고 시도하지만 엄격하게 원형이 아닙니다. buffer – PeanutPower

+0

OK, 나는 픽스를 가지고 갔다. 큐/어레이에 "샘플"을 만든 다음 힙으로 바이트별로 Marshall.write를 작성한 다음 ptr을 멀티미디어 DLL에 전달한다. 명시 적으로 정의 된 데이터 구조 (즉, LChannel 데이터 바로 다음에 RChannel 데이터가 오는)를 작성한 다음 포인터를 구조체에 MM_ddl로 전달하는 방법은 어떻습니까? 데이터가 재생되는 동안 "프런트 엔드"의 데이터를 대체 할 수 있습니다. 또는 초를 채우는 동안 하나의 배열을 MM_dll에 전달한 다음 그 중 하나를 전달하고 처음으로 다시 채우는 동안 플립 플롭 배열을 가질 수 있습니다. – tobrien

+0

초당 필요한 샘플 44100 개를 수용 할 수있을만큼 큰 구조가 생성됩니다. – tobrien