Главная страница
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.013 c
2-1195849433
ton
2007-11-23 23:23
2007.12.23
как создать модуль объекта с возможностью выбора его параметров


15-1195814417
Cyrax
2007-11-23 13:40
2007.12.23
Оптимальный способ задания ширины столбцов таблицы.


2-1196185522
Свой
2007-11-27 20:45
2007.12.23
Ttableи довабление записей


15-1196017801
Cyrax
2007-11-25 22:10
2007.12.23
JavaScript: "не выпускаем" пользователя из поля ввода, пока...


15-1195980167
Lang
2007-11-25 11:42
2007.12.23
C++ vs C#