| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Как с LinIn получить 24bit звук??? |
| Автор: ivan219 6.1.2009, 04:16 |
| Получить 8 или 16bit можно а вот 24bit никак Пример в архиве. |
| Автор: Alexeis 6.1.2009, 12:52 |
| ivan219, а твоя звуковая карта на это способна? Разрядность определяется возможностями АЦП, если у тебя 16 битный АЦП, то как из него выжать 24 бита? |
| Автор: ivan219 6.1.2009, 14:53 |
| Поддержевает!!! |
| Автор: Alexeis 6.1.2009, 15:46 | ||
| ivan219, но ты ведь сам установил 16 бит звук см код Добавлено через 4 секунды
|
| Автор: Alexeis 6.1.2009, 16:18 | ||
Еще вот посмотрел форматы поддерживаемые интерфейсом waveInХХХХ. Вот полный перечень
Среди них нет формата 24 бит. Вероятно нужно использовать более новый API. |
| Автор: ivan219 6.1.2009, 18:21 |
| А как где барть может исходничёк есть |
| Автор: Alexeis 6.1.2009, 19:09 | ||||
| Гм... сейчас покопал ни OpenAl ни DirectSound не умеют определять наличие поддержки формата 24 бита. Помниться в фубаре тоже такая проблема. Фубар не знает какую разрядность поддерживает звуковая карта, но предлагает установить насильно формат 24 бита если юзер уверен в поддержке. Так что попробуй вместо
Написать
Может и сработает. IDirectSoundCapture очень мало инфы. На русском так вообще не нашел. Нужно искать. Если с WaveIn не прокатит то с IDirectSoundCapture должно прокатить, но опять же ставить нужно не проверяя. |
| Автор: ivan219 7.1.2009, 00:21 | ||
это дело пробовал но ведь там есть буфер
Как с ним быть ведь 3-х байтного типа нет |
| Автор: Alexeis 7.1.2009, 01:29 |
| Тякс DirectSoundCapture удалось получить нестандартные PCM форматы, но тема по сути не меняется. Буфер будет из блоков по 6 байт или по 3 байта. Выборки можно доставать при помощи битовых операций. Например если полезные байты 3 младших делаешь операцию AND с маской $00FFFFFF, если в 3х старших то с маской $FFFFFF00 + сдвиг вправо на 8 разрядов. |
| Автор: Alexeis 7.1.2009, 02:20 | ||||||||
| Значит дело оказалось еще хирее. Числа ведь представлены в 3х байтовом дополнительном коде. Значит для стерео блока я использую следующую структуру
Массив определяю так
Значит положительные числа достаются правильно вот так
Однако если число отрицательное то у него знаковый бит 24й а не 32й как у Integer, по этому отрицательные числа нужно подправлять добавив $FF в старший разряд. Ну и в итоге для вывода выборок в чарт применяю такой код
Кстати запись веду через DirectSound. Если интересно приведу весь код. |
| Автор: ivan219 7.1.2009, 14:23 | ||
Да если можно |
| Автор: Alexeis 7.1.2009, 21:22 |
| Код пробный, но работает. |
| Автор: ivan219 12.9.2009, 18:43 | ||||||
| Я всётаки его добил бинарная математика рулит Только мне не даёт покоя два вареанта решения этой проблемы. Для моно 24бит
вареант1
Вареант 2
Оба вроде работают хорошо но какой выбрать??? |
| Автор: Alexeis 15.9.2009, 09:34 | ||
Желательно без деления. Но есть еще более быстрый вариант.
|
| Автор: ivan219 21.10.2009, 21:39 |
| |
| Автор: Alexeis 22.10.2009, 19:32 |
| ivan219, что это значит? Появляешься через 1.5 месяца чтобы отпостить смайлик? Чего там? Заработало или нет? |