Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

Щелчки в звуке   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
1-1191597941
Kilkik
2007-10-05 19:25
2007.12.23
Выделение


15-1195998290
Kostafey
2007-11-25 16:44
2007.12.23
Как сравнить директории


8-1171480125
Vovan # 2
2007-02-14 22:08
2007.12.23
Щелчки в звуке


15-1195586382
Германн
2007-11-20 22:19
2007.12.23
Автоматическое обновление WinXp SP1


3-1187164866
GanibalLector
2007-08-15 12:01
2007.12.23
insert в поле ftTime