Category: музыка

Category was added automatically. Read all entries about "музыка".

  • stariy

mp3->wav: появляются щелчки:-(

Народ, помогите прояснить ситуацию. Итак, написал прогу под PocketPC для конвертирования mp3 в wav. Прога использует библиотеку fmod.
Проблема в том, что после конвертирования появляются щелчки и дефекты, примерно раз в 5-10 секунд. От файла не зависит, пробовал несколько. Код:
Код:
FILE *f = fopen ("\\recdata.dat", "wb");
fwrite(&RIFF, sizeof(RIFF), 1, f);
m_Progress.SetRange(0,sizemp3/(256*1024));
m_progress_info.SetWindowTextW(_T("Не дышать, идет процесс..."));
m_progress_info.UpdateWindow();

for(i=0;i<1+sizemp3/(256*1024);i++)
{
samp = FSOUND_Sample_Load(FSOUND_FREE,mp3,FSOUND_2D,(256*1024)*i,(256*1024));
if(!samp)
{
break;
}
// Получаем доступ к звуковым данным в буфере звукового образца
// Буфер имеет кольцевую структуру, поэтому задается двумя указателями.
void *ptr1, *ptr2;
unsigned int len1, len2;
FSOUND_Sample_Lock(samp, 0, rec_len, &ptr1, &ptr2, &len1, &len2);
fwrite(ptr1, len1, 1, f);
if (len2) fwrite(ptr2, len2, 1, f);
FSOUND_Sample_Unlock(samp, ptr1, ptr2, len1, len2);
if (samp) FSOUND_Sample_Free(samp);
m_Progress.SetPos(i);
m_Progress.UpdateWindow();
}
fclose(f);

Почему в цикле? Потому что если засунуть весь файл одним махом, то памяти не хватает. Ее мало очень, мегов 30 свободно, а результат получается 50 с хвостиком, потому и сделал цикл.
пробовал скармливать функции FSOUND_Sample_Load файл целиком, но меньшего размера, секунд на 30 - вроде бы щелчков не заметил, и памяти хватило. Так что есть подозрение, что все дело в цикле, вернее, в неверной его организации. Может быть, надо считывать кусочки не тупо одинакового размера, а по границам фреймов?