Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
2-1196410006
IvanB
2007-11-30 11:06
2007.12.23
ООП


2-1196486249
Ravshan
2007-12-01 08:17
2007.12.23
Как можна скопировать структуру и данные из формата dbf на Oracle


11-1180257197
homm
2007-05-27 13:13
2007.12.23
Давненько я багрепортов не слал :)


2-1195902105
ice321i
2007-11-24 14:01
2007.12.23
Аудит в InterBase 6.5


15-1195944028
Суслик
2007-11-25 01:40
2007.12.23
Некие новости о Delphi




   Наверх