Форум: "Media";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизЩелчки в звуке Найти похожие ветки
← →
Vovan # 2 (2007-02-14 22:08) [0]Привет всем.
Продолжаю изучать Waveform Audio. Поставил себе цель написать удобный (для себя) в использовании класс-обёртку. Столкнулся с такой проблемой, что возникают щелчки непонятного происхождения. Да, читал, что буфер надо переключать быстро, что есть какой-то минимальный размер. Но у меня какие-то странные щелчки :). Они есть и в самом начале, и в конце проигрывания, т.е. достаточно проиграть только один loop, чтобы услышать два щелчка.
Прилагаю код. Он проигрывает тишину и как раз слышны щелчки. Откуда они берутся и как от них избавиться?
С EXE:
http://files-upload.com/files/103694/WavePlay.rar.html (430 Kb)
http://www.speedyshare.com/224985863.html (430 Kb)
Без EXE:
http://files-upload.com/files/103697/WavePlaywithoutEXE.rar.html
http://www.speedyshare.com/586405141.html
← →
TRUNK © (2007-02-15 11:04) [1]Посмотрел. Путаница с размерами буферов. Буфер имеет размер 176400, а обнуляются только первые 88200 байт, при том, что TSmallIntArray имеет размер всего 32768 байт. Да и вообще, есть несколько лишних переменных (часть из которых, кстати, и создала путаницу), многие участки кода можно упростить. При необходимости могу выслать свой пример воспроизведения WAV-файлов.
← →
Vovan # 2 (2007-02-15 12:16) [2]Чего-то не могу найти несовпадения. Я задаю длину буфера в блоках, при этом один блок - 2 байта (моно на 16 бит). При обнулении использую длину, а не фактический размер - так просто удобнее. TSmallIntArray должен иметь размер 32768*2 байт? Почему щелчки раздаются и в самом начале, как только я отправляю буфер?
Пример высылай на vovan_no_two(СОБАКА!)mail.ru
← →
TRUNK © (2007-02-15 14:10) [3]Пересмотрел ещё раз. Действительно буфер обнуляется полностью, просто я поначалу упорно верил, что p^[j] имеет размер в один байт (видимо сказывается хроническое недосыпание :). А насчёт TSmallIntArray, если проверка индекса в p^[j] не вызывает ошибок, тогда его можно объявить как массив всего с одним элементом. А можно было бы вообще объявить сам буфер как динамический массив и не возиться с GlobalAlloc/GlobalFree и двойным набором указателей. Я вообще объявляю буферы фиксированного размера - нет смысла менять их размер во время работы программы. А обнулять память быстрее и проще, используя FillChar или ZeroMemory.
А насчёт щелчков я разобрался. В FormCreate в буферы записываются ненулевые значения (Ampl=20000). Поэтому и происходит скачок уровня в начале (0 -> 20000) и в конце (20000 -> 0).
P.S. Пример выслал.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c