Category: музыка

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

"...требуется сок ТРИНАДЦАТИ(!) бобов..."

Из всех-всех-всех компонентов ВижуалСтудии наиболее мною нелюбимый - MSDN.

Хорошая справочная система должна быть подобна топографической карте, используя которую легко можно определить собственное местоположение, определить дальнейший маршрут, оценить препятствия на пути к цели, подсчитать то количество сил и времени которые будет затрачены на этот конкретный вариант действия.

Забрасывая же невод в MSDN, никогда нельзя быть уверенным, что вытянешь все-необходимое-искомое с первого, второго, третьего раза.

Вроде бы простая иерархическая структура - на некоторой глубине превращается клубок слипшехся нитей, катакомбы с грудой повторяющегося материала. Решение простенькой практической задачки может находиться за соседней стенкой, но чтобы обнаружить его, требуется намотать на спидометр десятки коридоров, обработать груды нафиг в данный момент не нужной информации, только для того чтобы понять - где его искать не надо.

Трудность в том, что "для того чтобы задать правильный вопрос, надо знать большую часть ответа". А еще большая трудность - для крутящихся в мозгу концепций не всегда хватает словесных ярлычков, чтобы задать хотя бы неправильный вопрос. Всякий раз после недели пахоты и спустя несколько сотен строк кода, испытываешь смесь облегчения и лютого бешенства, случайно, за очередным поворотом туннеля, обнаружив элементарное решение длиной в пяток строк...

Крайний пример. Collapse )
  • 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 - вроде бы щелчков не заметил, и памяти хватило. Так что есть подозрение, что все дело в цикле, вернее, в неверной его организации. Может быть, надо считывать кусочки не тупо одинакового размера, а по границам фреймов?