2 개의 샘플 프로그램이 있습니다. 하나는 WAV를 MP3로 변환합니다. 다른 하나는 내 연사를 포착하고 WAV 파일을 씁니다. 나는 2 : 입력 스피커, 출력 MP3를 결합하려고합니다.BYTE *에서 int C++ 로의 유형 변환
short int pcm_buffer[PCM_SIZE*2];
unsigned char mp3_buffer[MP3_SIZE];
read = fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);
write=lame_encode_buffer_interleaved(gfp, pcm_buffer, read, mp3_buffer, MP3_SIZE);
size_t lBytesWritten = fwrite(mp3_buffer, write, sizeof(char), mp3);
실무 인코딩 : 내 결과가 올바른 길이의 MP3 파일로 MP3로 근로 변환 소스에 WAV를 (그래서 나는 정수의 정확한 숫자를 통과) 만 소음 (그래서 내가 잘못된 데이터를 전달) 에 WAV에 있습니다
BYTE *pData;
hr = pAudioCaptureClient->GetBuffer(&pData, &nNumFramesToRead, &dwFlags, NULL, NULL);
LONG lBytesToWrite = nNumFramesToRead * nBlockAlign;
mmioWrite(hFile, reinterpret_cast<PCHAR>(pData), lBytesToWrite);
내 버전은 다음과 같습니다
BYTE *pData;
unsigned char mp3_buffer[MP3_SIZE];
hr = pAudioCaptureClient->GetBuffer(&pData, &nNumFramesToRead, &dwFlags, NULL, NULL);
LONG lBytesToMP3=lame_encode_buffer_interleaved(gfp, reinterpret_cast<short int*>(pData), nNumFramesToRead, mp3_buffer, MP3_SIZE);
fwrite(mp3_buffer, lBytesToMP3, sizeof(char), mp3);
I 오류가 표시되지 않습니다. Borland C++에서 약 10 년 전까지 C++를 코딩했고, 이제는 Microsoft가 무능한 프로그래머로부터 세상을 보호한다는 것을 알게되었습니다. 그러나 (나는 정말로 유감스럽게 생각한다) 그들이 내가 그것을 올바르게하고 싶어하는 방법을 모르고있다!
내가 Wav 인코더를 디버깅하는 경우, 그는 mmio에 PCHAR 스트림으로 데이터 BYTE 스트림을 쓰는 것을 볼 수 있습니다. WAV를 MP3 인코더로 디버깅하면 WAV 데이터가 16 비트 (짧은 int) 숫자임을 알 수 있습니다. AudioClient에서 BYTE로 가져 왔고 Lame로 보내야하지만 이번에는 짧은 int 배열로 보내야합니다. 따라서 샘플 (2 개의 프로그램이 올바르게 작동하기 때문에)은 실제로 16 비트 여야합니다. 나는 아마도 엉망이 될 것입니다. & 또는 * 너무 많거나 너무 적습니다. – Martin
많은 시도 끝에 마침내 무슨 일이 일어나는지 알게되었습니다. 그것은 당신의 8 비트입니다. 그것은 나를 더 가까이 보이게했습니다. 사실 그것은 32 비트 플로트입니다. 이것은 16 int로 전달됩니다. 당신은 포인트를 얻지 못 하기엔 너무 가깝습니다! – Martin
굉장합니다. 그것을 알아내는 것에 축하! – StilesCrisis