Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.069 c
2-1196082528
Angelka
2007-11-26 16:08
2007.12.23
Memo


15-1195680552
Суслик
2007-11-22 00:29
2007.12.23
Виртуальная конференция от CodeGear!!!


2-1195909606
Servelat
2007-11-24 16:06
2007.12.23
Приведение типов


15-1195835332
Piter
2007-11-23 19:28
2007.12.23
Зачем InnoSetup требует права администратора?


2-1196405007
ardent
2007-11-30 09:43
2007.12.23
table order





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский