Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

Включение звуковой карты в режиме простого усилителя звука   Найти похожие ветки 

 
Yr2   (2006-03-07 23:17) [0]

Как запрграммировать звуковую карту, чтобы она НЕ писала звук с микрофона в файл, НЕ воспроизводила звук из файла, а только усиливала сигнал с микрофона и воспроизводила (соответственно) на громкоговорители? Все функции, которые мне попадаются работают либо с файлом, либо со стримом, а мне не нужно ни то, ни другое. Некую аналогию можно провести с системой Караоке (слушаешь, что поёшь). И ещё есть одна деталь: по одному каналу (например левому) сигнал должен поступать с микрофона, а по второму (правому) с линейного входа платы. Возможно ли такое? Какие есть API-шные функции и компонеты для Delphi?
Спасибо, если кто откликнется.


 
Eraser ©   (2006-03-08 00:37) [1]


> Yr2   (07.03.06 23:17)


>  Все функции, которые мне попадаются работают либо с файлом,
>  либо со стримом, а мне не нужно ни то, ни другое.

реализуй "извлечение/проигрывание" звука сам, в общем не очень сложно.

>  И ещё есть одна деталь: по одному каналу (например левому)
> сигнал должен поступать с микрофона, а по второму (правому)
> с линейного входа платы. Возможно ли такое?

вполне.

> Какие есть API-шные функции

auxGetDevCaps
auxGetNumDevs
auxGetVolume
auxOutMessage
auxSetVolume
PlaySound
sndPlaySound
waveInAddBuffer
waveInClose
waveInGetDevCaps
waveInGetErrorText
waveInGetID
waveInGetNumDevs
waveInGetPosition
waveInMessage
waveInOpen
waveInPrepareHeader
waveInProc
waveInReset
waveInStart
waveInStop
waveInUnprepareHeader
waveOutBreakLoop
waveOutClose
waveOutGetDevCaps
waveOutGetErrorText
waveOutGetID
waveOutGetNumDevs
waveOutGetPitch
waveOutGetPlaybackRate
waveOutGetPosition
waveOutGetVolume
waveOutMessage
waveOutOpen
waveOutPause
waveOutPrepareHeader
waveOutProc
waveOutReset
waveOutRestart
waveOutSetPitch
waveOutSetPlaybackRate
waveOutSetVolume
waveOutUnprepareHeader
waveOutWrite

см. MSDN.

> и компонеты для Delphi?

TACM..... ищи на torry.net


 
Yr2   (2006-03-08 15:55) [2]

реализуй "извлечение/проигрывание" звука сам, в общем не очень сложно.
-так об этом-то я и спрашиваю :) если под "реализацией" понимается программирование на уровне портов, программирование контроллера DMA, то этого бы не хотелось... напоминает времена DOS, плюс проблемы со спецификой некоторых саундбластеров...
API-шные функции типа PlaySound, sndPlaySound, waveInOpen, waveInStart и другие я, естественно, смотрел. Но говорю же, что им подавай или файл, или указывай буфер для хранения оцифрованных данных... А мне нужна функция или программа, которая бы типа "замкнула" вход на выход, то есть включила режим транзита звука с микрофона на громкогворитель (но с усилением сигнала). Интуитивно предполагаю, что такое должно быть. Работают же как-то программы "Караоке"!?
а что такое ТАСМ? на ум приходит только одно (из далеких времен) -турбоассемблер...


 
Eraser ©   (2006-03-08 21:20) [3]


> Yr2   (08.03.06 15:55) [2]


> Но говорю же, что им подавай или файл, или указывай буфер
> для хранения оцифрованных данных...

а по-другомы и быть не может. Делай размер буффера минимальным - задержки не услышишь.

>  Работают же как-то программы "Караоке"!?

однако ведь в любом караоке звук таки проходит обработку? )

> а что такое ТАСМ?

ACMComponents


 
Сергей М. ©   (2006-03-09 08:34) [4]


> Как запрграммировать звуковую карту чтобы она .. усиливала сигнал с микрофона и воспроизводила .. на громкоговорители?


см. mixer-функции в составе MultimediaAPI


 
Yr2   (2006-03-15 15:18) [5]

1. посмотрел ACMComponents и их демку. Это дело "заточено" под IP-телефонию. При предлагаемых значениях по-умолчанию задержка между входным сигналом и выходным составляет две секунды. При уменьшении размера буфера для приема оцифрованного сигнала (звука) компьютер начинает "захлебываться", то есть сигнал "рвется" (при частоте проца 2ГГц). Видимо "внутренности" их звуковых компонентов достаточно "тяжелые"... Выбросил оттуда передачу через сокет - помогло очень мало.
2. сделал вариант с использованием waveInOpen ... waveOutWrite, причем с несколькими буферами для хранения оцифрованного сигнала. По ходу дела выяснилось, что размер буфера должен быть кратным частоте дискретизации сигнала, а также делиться нацело на 2. В противном случае при формировании звука слышен стук/треск. Так вот, при частоте дискретизации 44100 Гц минимальный размер буфера получается 2205 байт (меньше нельзя, так как на два уже не делится). При таких значениях задержка сигнала между входом и выходом составляет 50 миллисекунд. Кстати, это уже ощущается на слух.
to Eraser:
Yr2> Но говорю же, что им подавай или файл, или указывай буфер  для хранения оцифрованных данных...
Eraser> а по-другомы и быть не может. Делай размер буффера минимальным - задержки не услышишь.
Yr2>  Работают же как-то программы "Караоке"!?
Eraser> однако ведь в любом караоке звук таки проходит обработку? )

я предполагал, что должна быть команда процессору звуковой карты, чтобы он внутри карты "замкнул" вход на выход. Тогда бы не было необходимости "тянуть" звук в память компа, а потом из этой памяти выгружать обратно в карту для воспроизведения!

to Сергей М.: mixer-функции...  - что-то пока не нашел ничего подходящего...


 
Eraser ©   (2006-03-15 15:48) [6]


> Yr2   (15.03.06 15:18) [5]


> идимо "внутренности" их звуковых компонентов достаточно
> "тяжелые"...

да какие там тяжёлы... несколько десятков строк, использующих те же waveInOpen ... waveOutWrite.

> Тогда
> бы не было необходимости "тянуть" звук в память компа, а
> потом из этой памяти выгружать обратно в карту для воспроизведения!
>

это и делают упомянутые ф-ии. Можешь ещё копнуть в сторону DirectSound.


 
Yr2   (2006-03-15 16:28) [7]

to Eraser
...это и делают упомянутые ф-ии...
-не согласен. этим функциям я должен передать буфер памяти для их работы. и пока буфер приема звука не заполнится я не могу отдать его (буфер) звуковой плате на воспроизведение (хотя в принципе так можно сделать, но такая муть получается... в один и тот же буфер карта и пишет, и читает, а процессы эти асинхронные...)


 
Yr2   (2006-03-15 19:39) [8]

На всякий случай сообщаю, что я "открыл Америку"! Помог только что купленный новый компьютер, в котором девственно чистая операционка и настройки звуковой платы соответственно. Так вот оказалось, что по-умолчанию все "движки" микшеров и сама плата установлена в режим приема звука со входа и передачи его на выход (с соответствующим усилением). И хотя при максимальном положении движков громкость всё же маловата, но тем не менее это работает абсолютно без всякого программирования, буферов и т.п.... Кроме этого в расширенных (advanced) настройках микшера я нашел флажок "Mic Boost". Не знаю, что это такое, но при включении этого флажка усиление сигнала увеличивается в два раза.
Так что задача практически решена.


 
Сергей М. ©   (2006-03-16 10:03) [9]


> нашел флажок "Mic Boost". Не знаю, что это такое


Это - микрофонный предусилитель, используется для некоторых типов микрофонов.


 
Eraser ©   (2006-03-16 14:39) [10]


> Yr2   (15.03.06 19:39) [8]

Это всё хорошо, но одного усиления звука для караоке не достаточно. Нужна, как минимум, ещё и реверберация.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.044 c
2-1158359832
Juri
2006-09-16 02:37
2006.10.08
Фильтровать базу данных по куску слова


9-1136934366
GLMaterialLibrary1
2006-01-11 02:06
2006.10.08
GLScene Как сделать тоже самое только в поток?


15-1158643332
Ega23
2006-09-19 09:22
2006.10.08
С Днём рождения! 19 сентября


15-1158217336
boalse
2006-09-14 11:02
2006.10.08
Ещё оптический обман


2-1157950790
lobach
2006-09-11 08:59
2006.10.08
List Box





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский